Skip to content

Commit 4b69a7c

Browse files
committed
big update
1 parent 91211f2 commit 4b69a7c

File tree

9 files changed

+107
-25
lines changed

9 files changed

+107
-25
lines changed

pyproject.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[build-system]
2+
requires = [
3+
"setuptools>=42",
4+
"wheel"
5+
]
6+
build-backend = "setuptools.build_meta"

setup.cfg

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[metadata]
2+
name = quickbase-json-api-client
3+
version = 0.0.1
4+
author = Robert Carroll
5+
author_email = rob@shenandoah.capital
6+
description = Python wrapper for quickbase JSON API.
7+
long_description = file: README.md
8+
long_description_content_type = text/markdown
9+
url = https://github.com/robswc/quickbase-json-api-client
10+
project_urls =
11+
Bug Tracker = https://github.com/robswc/quickbase-json-api-client/issues
12+
classifiers =
13+
Programming Language :: Python :: 3
14+
License :: OSI Approved :: MIT License
15+
Operating System :: OS Independent
16+
17+
[options]
18+
package_dir =
19+
= src
20+
packages = find:
21+
python_requires = >=3.6
22+
23+
[options.packages.find]
24+
where = src

setup.py

Lines changed: 0 additions & 13 deletions
This file was deleted.
File renamed without changes.

quickbase_json/client.py renamed to src/quickbase_json/client.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import requests
2-
import json
3-
42

3+
from src.quickbase_json.qb_response import QBResponse
54

65

76
class QuickbaseJSONClient:
87
def __init__(self, realm, auth, **kwargs):
8+
"""
9+
Creates a client object.
10+
:param realm: quickbase realm
11+
:param auth: quickbase user token
12+
:param kwargs:
13+
"""
914
self.realm = realm
1015
self.auth = auth
1116
self.headers = {
@@ -30,12 +35,21 @@ def query_records(self, table: str, select: list, where: str, **kwargs):
3035
:return: json data of records {data: ..., fields: ...}
3136
"""
3237

38+
# create request body
3339
body = {'from': table, 'select': select, 'where': where}
40+
# update with keyword args
41+
body.update(kwargs)
3442

3543
# add optional args
3644
body.update(kwargs)
45+
r = requests.post('https://api.quickbase.com/v1/records/query', headers=self.headers, json=body).json()
46+
47+
# create response object
48+
res = QBResponse('records')
3749

38-
return requests.post('https://api.quickbase.com/v1/records/query', headers=self.headers, json=body).json()
50+
# update response object with JSON data from request
51+
res.update(r)
52+
return res
3953

4054
def insert_update_records(self, table: str, data: list):
4155
"""

quickbase_json/helpers.py renamed to src/quickbase_json/helpers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def __init__(self, fid: any, operator: str, value: any, **kwargs):
3737

3838
def build(self, **kwargs):
3939

40-
if kwargs.get('join') == 'OR':
40+
if kwargs.get('join'):
4141
# check that value is a list
4242
if isinstance(self.value, list) is False:
4343
raise IncorrectParameters(self.value, list)
@@ -48,7 +48,7 @@ def build(self, **kwargs):
4848
queries.append(build_query_str(self.fid, self.operator, v))
4949

5050
# return chain of queries
51-
return 'OR'.join(queries)
51+
return f"{kwargs.get('join')}".join(queries)
5252

5353
return build_query_str(self.fid, self.operator, self.value)
5454

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from src.quickbase_json.client import QuickbaseJSONClient
2+
3+
4+
class LinkedRecord:
5+
def __init__(self, table, rid, table_name='default', fid=3, **kwargs):
6+
self.tables = {}
7+
self.attributes = {}
8+
self.add_link(table, rid, table_name, fid)
9+
10+
def add_link(self, table_id, rid, table_name='default', fid=3):
11+
if table_name == 'default':
12+
table_name = table_id
13+
self.tables.update({table_id: {'rid': rid, 'fid': fid, 'alias': table_name}})
14+
15+
def add_attribute(self, key, value):
16+
self.attributes.update({key: value})
17+
18+
def build(self, use_aliases=False):
19+
pass
20+
21+
22+
class LinkedRecordFactory:
23+
def __init__(self, realm, auth_token, table_id):
24+
self.realm = realm
25+
self.table_id = table_id
26+
self.records = {}
27+
self.client = QuickbaseJSONClient(realm, auth_token)
28+
29+
def set_root(self, table, fid, where):
30+
records = self.client.query_records(table, fid, where)
31+
self.records = records
32+
return records
33+
34+
def add_link(self, source_table, fid, table):
35+
pass
36+
37+
def add_links(self, links):
38+
pass

quickbase_json/qb_response.py renamed to src/quickbase_json/qb_response.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def orient(self, orient, **kwargs):
140140
def currency(self, currency_type):
141141
return self
142142

143-
def transform(self, transformation):
143+
def transform(self, transformation, **kwargs):
144144
"""
145145
Transforms the data, given a transformation argument.
146146
:param transformation: type of transformation.
@@ -179,7 +179,6 @@ def transform(self, transformation):
179179

180180
for field in fields:
181181
if field.get('type') == 'date time':
182-
183182
if type(self.get('data') == list):
184183
for row in data:
185184
dt_field = row.get(str(field.get('id')))
@@ -192,6 +191,20 @@ def transform(self, transformation):
192191
dt = datetime.datetime.strptime(str_dt, '%Y-%m-%dT%H:%M:%S.%fZ')
193192
row.update({str(field.get('id')): {'value': dt}})
194193

194+
if field.get('type') == 'date':
195+
if type(self.get('data') == list):
196+
for row in data:
197+
dt_field = row.get(str(field.get('id')))
198+
if dt_field.get('value') is None:
199+
str_dt = dt_field
200+
dt = datetime.datetime.strptime(str_dt, kwargs.get('datestring'))
201+
row.update({str(field.get('id')): dt})
202+
else:
203+
str_dt = dt_field.get('value')
204+
dt = datetime.datetime.strptime(str_dt, kwargs.get('datestring'))
205+
row.update({str(field.get('id')): {'value': dt}})
206+
207+
195208
if transformation == 'intround':
196209
"""Rounds numbers and transforms them to ints"""
197210

tests/test_client.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import datetime
1+
22

33
import pytest
44

5-
from quickbase_json import client as qbc
6-
from quickbase_json.helpers import Where, IncorrectParameters
7-
from quickbase_json.helpers import Sort as qbs
8-
from quickbase_json.helpers import Group as qbg
5+
96

107

118
# test where
9+
from src.quickbase_json.helpers import Where, IncorrectParameters
10+
11+
1212
@pytest.mark.parametrize('fid, operator, value, expected', [
1313
(3, 'EX', 12345, '{3.EX.12345}'),
1414
(3, 'XEX', 12345, '{3.XEX.12345}'),

0 commit comments

Comments
 (0)