misc: convert time.struct_time to datetime objects before json dump (#38706)
This commit is contained in:
parent
09a29908f8
commit
12bfec671f
|
@ -1158,7 +1158,8 @@ def test_formdata(pub, local_user):
|
|||
sign_uri('/api/forms/test/%s/' % formdata.id, user=local_user),
|
||||
status=200)
|
||||
|
||||
assert 'last_update_time' in resp.json
|
||||
assert datetime.datetime.strptime(resp.json['last_update_time'], '%Y-%m-%dT%H:%M:%S')
|
||||
assert datetime.datetime.strptime(resp.json['receipt_time'], '%Y-%m-%dT%H:%M:%S')
|
||||
assert len(resp.json['fields']) == 6
|
||||
assert 'foobar' in resp.json['fields']
|
||||
assert 'foobar2' not in resp.json['fields'] # foobar2 has no varname, not in json
|
||||
|
@ -1636,7 +1637,7 @@ def test_api_list_formdata(pub, local_user):
|
|||
# check it now gets the data
|
||||
resp = get_app(pub).get(sign_uri('/api/forms/test/list', user=local_user))
|
||||
assert len(resp.json) == 30
|
||||
assert 'receipt_time' in resp.json[0]
|
||||
assert datetime.datetime.strptime(resp.json[0]['receipt_time'], '%Y-%m-%dT%H:%M:%S')
|
||||
assert not 'fields' in resp.json[0]
|
||||
|
||||
# check getting full formdata
|
||||
|
|
|
@ -1845,8 +1845,9 @@ class FormPage(Directory):
|
|||
else:
|
||||
output = [{'id': filled.id,
|
||||
'url': filled.get_url(),
|
||||
'receipt_time': filled.receipt_time,
|
||||
'last_update_time': filled.last_update_time} for filled in items]
|
||||
'receipt_time': datetime.datetime(*filled.receipt_time[:6]),
|
||||
'last_update_time': datetime.datetime(*filled.last_update_time[:6]),
|
||||
} for filled in items]
|
||||
return json.dumps(output,
|
||||
cls=misc.JSONEncoder)
|
||||
|
||||
|
|
|
@ -182,8 +182,8 @@ class Evolution(object):
|
|||
|
||||
def get_json_export_dict(self, user, anonymise=False):
|
||||
data = {
|
||||
'time': self.time,
|
||||
'last_jump_datetime': self.last_jump_datetime,
|
||||
'time': datetime.datetime(*self.time[:6]) if self.time else None,
|
||||
'last_jump_datetime': self.last_jump_datetime
|
||||
}
|
||||
if self.status:
|
||||
data['status'] = self.status[3:]
|
||||
|
@ -1012,8 +1012,8 @@ class FormData(StorableObject):
|
|||
data['id'] = str(self.id)
|
||||
data['display_id'] = self.get_display_id()
|
||||
data['display_name'] = self.get_display_name()
|
||||
data['receipt_time'] = self.receipt_time
|
||||
data['last_update_time'] = self.last_update_time
|
||||
data['receipt_time'] = datetime.datetime(*self.receipt_time[:6])
|
||||
data['last_update_time'] = datetime.datetime(*self.last_update_time[:6])
|
||||
data['criticality_level'] = self.criticality_level
|
||||
data['url'] = self.get_url()
|
||||
|
||||
|
|
|
@ -475,8 +475,10 @@ def indent_xml(elem, level=0):
|
|||
|
||||
class JSONEncoder(json.JSONEncoder):
|
||||
def default(self, obj):
|
||||
if isinstance(obj, time.struct_time):
|
||||
return datetime.datetime.utcfromtimestamp(time.mktime(obj)).isoformat() + 'Z'
|
||||
# make sure time.struct_time are not received as they do have a
|
||||
# default serializer in Python 3 (they are tuples) and should
|
||||
# be converted to datetime objects beforehand.
|
||||
assert not isinstance(obj, time.struct_time), 'time.struct_time should not be serialized'
|
||||
|
||||
if isinstance(obj, datetime.datetime):
|
||||
return obj.isoformat()
|
||||
|
|
Loading…
Reference in New Issue