Skip to content

Commit f6629b1

Browse files
committed
0.0.5 - new conversions, round_ints() method
1 parent 2c9460e commit f6629b1

File tree

3 files changed

+34
-40
lines changed

3 files changed

+34
-40
lines changed

src/quickbase_json/qb_response.py

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ def denest(self):
120120
for k, v in d.items():
121121
d.update({k: v.get('value')})
122122

123-
print('++++', self.data)
124123
return self
125124

126125
@operation
@@ -206,22 +205,27 @@ def transform(self, transformation, **kwargs):
206205
self.update({'data': records})
207206

208207
if transformation == 'intround':
209-
"""Rounds numbers and transforms them to ints"""
208+
raise ValueError('This transformation has been deprecated, please use the "round_ints()" method.')
210209

211-
data = self.get('data')
212-
fields = self.get('fields')
213-
214-
for field in fields:
215-
if field.get('type') == 'numeric':
210+
return self
216211

217-
if type(self.get('data') == list):
218-
for row in data:
219-
numeric_field = row.get(str(field.get('id')))
220-
if numeric_field.get('value') is None:
221-
row.update({str(field.get('id')): int(round(numeric_field))})
222-
else:
223-
numeric_field = numeric_field.get('value')
224-
row.update({str(field.get('id')): {'value': int(round(numeric_field))}})
212+
def round_ints(self):
213+
"""
214+
Round int fields (remove floating .0 from int fields)
215+
:return:
216+
"""
217+
for f in self.get('fields'):
218+
fid = str(f.get('id'))
219+
if f.get('type') == 'numeric':
220+
221+
if 'denest' in self.operations:
222+
for d in self.get('data'):
223+
if d.get(fid).is_integer():
224+
d.update({fid: int(round(d.get(fid)))})
225+
else:
226+
for d in self.get('data'):
227+
d.update({fid: {
228+
'value': int(round(d.get(fid).get('value')))}})
225229

226230
return self
227231

@@ -241,34 +245,13 @@ def c_datetime():
241245

242246
if 'denest' in self.operations:
243247
for d in self.get('data'):
244-
print('>>>>>>>>', self.operations, d)
245248
d.update({fid: datetime.datetime.strptime(d.get(fid), '%Y-%m-%dT%H:%M:%S.%fZ')})
246249
else:
247250
for d in self.get('data'):
248-
print('>>>>>>>>', fid, d.get(fid), d)
249-
d.update({fid: {'value': datetime.datetime.strptime(d.get(fid).get('value'), '%Y-%m-%dT%H:%M:%S.%fZ')}})
250-
251-
251+
d.update({fid: {
252+
'value': datetime.datetime.strptime(d.get(fid).get('value'), '%Y-%m-%dT%H:%M:%S.%fZ')}})
252253

253254
if field_type == 'datetime':
254255
c_datetime()
255256

256-
if field_type == 'intround':
257-
"""Rounds numbers and transforms them to ints"""
258-
259-
data = self.get('data')
260-
fields = self.get('fields')
261-
262-
for field in fields:
263-
if field.get('type') == 'numeric':
264-
265-
if type(self.get('data') == list):
266-
for row in data:
267-
numeric_field = row.get(str(field.get('id')))
268-
if numeric_field.get('value') is None:
269-
row.update({str(field.get('id')): int(round(numeric_field))})
270-
else:
271-
numeric_field = numeric_field.get('value')
272-
row.update({str(field.get('id')): {'value': int(round(numeric_field))}})
273-
274257
return self

tests/sample_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"value": "Andre Harris"
66
},
77
"7": {
8-
"value": 10
8+
"value": 10.0
99
},
1010
"8": {
1111
"value": "2019-12-18T08:00:00.000Z"

tests/test_response.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_load(data, expected):
1919

2020
# test getting info, basic tests, does not test formatting
2121
def test_get_info():
22-
assert "{'6': {'value': 'Andre Harris'}, '7': {'value': 10}, '8': {'value': '2019-12-18T08:00:00.000Z'}}" in QBResponse(
22+
assert "{'6': {'value': 'Andre Harris'}, '7': {'value': 10.0}, '8': {'value': '2019-12-18T08:00:00.000Z'}}" in QBResponse(
2323
'records', sample_data=sample_data.record_data.copy()).info(prt=False)
2424

2525

@@ -48,6 +48,17 @@ def test_convert_datetime():
4848
assert isinstance(dt_test2, datetime.datetime)
4949

5050

51+
# test datetime convert
52+
def test_round_ints():
53+
# test converting ints with floating point
54+
res = QBResponse('records', sample_data=deepcopy(sample_data.record_data))
55+
56+
# assert float, then int
57+
assert type(res.data()[0].get('7').get('value')) == float
58+
res.round_ints()
59+
assert type(res.data()[0].get('7').get('value')) == int
60+
61+
5162
def test_operations():
5263
res = QBResponse('records', sample_data=sample_data.record_data)
5364
assert res.operations == []

0 commit comments

Comments
 (0)