jsondatastore: return datetimes in results

This commit is contained in:
Valentin Deniaud 2019-10-02 14:54:55 +02:00
parent 579eed908f
commit 1dbc707733
2 changed files with 33 additions and 3 deletions

View File

@ -64,6 +64,15 @@ class JsonData(models.Model):
self.text = template.render(context).strip()
return super(JsonData, self).save(*args, **kwargs)
def to_json(self):
return {
'id': self.uuid,
'text': self.text,
'content': self.content,
'creation_datetime': self.creation_datetime,
'last_update_datetime': self.last_update_datetime,
}
class JsonDataStore(BaseResource):
category = _('Data Sources')
@ -79,7 +88,7 @@ class JsonDataStore(BaseResource):
objects = JsonData.objects.filter(datastore=self)
if name_id is not None:
objects = objects.filter(name_id=name_id)
return {'data': [{'id': x.uuid, 'text': x.text, 'content': x.content} for x in objects]}
return {'data': [x.to_json() for x in objects]}
@endpoint(perm='can_access', methods=['post'], name='data',
pattern=r'create$',
@ -124,7 +133,7 @@ class JsonDataStore(BaseResource):
new_content = clean_json_data(request.body)
data.content.update(new_content)
data.save()
return {'id': data.uuid, 'text': data.text, 'content': data.content}
return data.to_json()
@endpoint(perm='can_access', methods=['post'], name='data',
description=_('Delete'),
@ -151,5 +160,5 @@ class JsonDataStore(BaseResource):
objects = objects.filter(name_id=name_id)
for data in objects:
if data.content and data.content.get(attribute) == value:
return {'id': data.uuid, 'text': data.text, 'content': data.content}
return data.to_json()
raise APIError('no such object')

View File

@ -1,6 +1,7 @@
import pytest
from django.contrib.contenttypes.models import ContentType
from django.core.serializers.json import DjangoJSONEncoder
from passerelle.apps.jsondatastore.models import JsonDataStore, JsonData
from passerelle.base.models import ApiUser, AccessRight
@ -172,3 +173,23 @@ def test_jsondatastore_get_by_attribute(app, jsondatastore):
resp = app.get('/jsondatastore/foobar/data/by/foo/', params={'value': 'bar3', 'name_id': 'zzz'})
assert resp.json['err'] == 1
def test_jsondatastore_datetimes(app, jsondatastore):
encoder = DjangoJSONEncoder()
resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'bar'})
uuid = resp.json['id']
creation_datetime = jsondatastore.get_data_object(uuid).creation_datetime
resp = app.post_json('/jsondatastore/foobar/data/%s/' % uuid, params={'foo': 'bar2'})
last_update_datetime = jsondatastore.get_data_object(uuid).last_update_datetime
assert resp.json['creation_datetime'] == encoder.default(creation_datetime)
assert resp.json['last_update_datetime'] == encoder.default(last_update_datetime)
resp = app.get('/jsondatastore/foobar/data/by/foo/', params={'value': 'bar2'})
assert resp.json['creation_datetime'] == encoder.default(creation_datetime)
assert resp.json['last_update_datetime'] == encoder.default(last_update_datetime)
resp = app.get('/jsondatastore/foobar/data/')
assert resp.json['data'][0]['creation_datetime'] == encoder.default(creation_datetime)
assert resp.json['data'][0]['last_update_datetime'] == encoder.default(last_update_datetime)