0001-jsondatastore-return-datetimes-in-results.patch
passerelle/apps/jsondatastore/models.py | ||
---|---|---|
54 | 54 |
self.text = template.render(context).strip() |
55 | 55 |
return super(JsonData, self).save(*args, **kwargs) |
56 | 56 | |
57 |
def to_json(self): |
|
58 |
return { |
|
59 |
'id': self.uuid, |
|
60 |
'text': self.text, |
|
61 |
'content': self.content, |
|
62 |
'creation_datetime': self.creation_datetime, |
|
63 |
'last_update_datetime': self.last_update_datetime, |
|
64 |
} |
|
65 | ||
57 | 66 | |
58 | 67 |
class JsonDataStore(BaseResource): |
59 | 68 |
category = _('Data Sources') |
... | ... | |
69 | 78 |
objects = JsonData.objects.filter(datastore=self) |
70 | 79 |
if name_id is not None: |
71 | 80 |
objects = objects.filter(name_id=name_id) |
72 |
return {'data': [{'id': x.uuid, 'text': x.text, 'content': x.content} for x in objects]}
|
|
81 |
return {'data': [x.to_json() for x in objects]}
|
|
73 | 82 | |
74 | 83 |
@endpoint(perm='can_access', methods=['post'], name='data', |
75 | 84 |
pattern=r'create$', |
... | ... | |
111 | 120 |
elif request.method == 'PATCH': |
112 | 121 |
data.content.update(json.loads(request.body)) |
113 | 122 |
data.save() |
114 |
return {'id': data.uuid, 'text': data.text, 'content': data.content}
|
|
123 |
return data.to_json()
|
|
115 | 124 | |
116 | 125 |
@endpoint(perm='can_access', methods=['post'], name='data', |
117 | 126 |
description=_('Delete'), |
... | ... | |
138 | 147 |
objects = objects.filter(name_id=name_id) |
139 | 148 |
for data in objects: |
140 | 149 |
if data.content and data.content.get(attribute) == value: |
141 |
return {'id': data.uuid, 'text': data.text, 'content': data.content}
|
|
150 |
return data.to_json()
|
|
142 | 151 |
raise APIError('no such object') |
tests/test_jsondatastore.py | ||
---|---|---|
1 | 1 |
import pytest |
2 | 2 | |
3 | 3 |
from django.contrib.contenttypes.models import ContentType |
4 |
from django.core.serializers.json import DjangoJSONEncoder |
|
4 | 5 | |
5 | 6 |
from passerelle.apps.jsondatastore.models import JsonDataStore, JsonData |
6 | 7 |
from passerelle.base.models import ApiUser, AccessRight |
... | ... | |
148 | 149 | |
149 | 150 |
resp = app.get('/jsondatastore/foobar/data/by/foo/', params={'value': 'bar3', 'name_id': 'zzz'}) |
150 | 151 |
assert resp.json['err'] == 1 |
152 | ||
153 | ||
154 |
def test_jsondatastore_datetimes(app, jsondatastore): |
|
155 |
encoder = DjangoJSONEncoder() |
|
156 |
resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'bar'}) |
|
157 |
uuid = resp.json['id'] |
|
158 |
creation_datetime = jsondatastore.get_data_object(uuid).creation_datetime |
|
159 | ||
160 |
resp = app.post_json('/jsondatastore/foobar/data/%s/' % uuid, params={'foo': 'bar2'}) |
|
161 |
last_update_datetime = jsondatastore.get_data_object(uuid).last_update_datetime |
|
162 |
assert resp.json['creation_datetime'] == encoder.default(creation_datetime) |
|
163 |
assert resp.json['last_update_datetime'] == encoder.default(last_update_datetime) |
|
164 | ||
165 |
resp = app.get('/jsondatastore/foobar/data/by/foo/', params={'value': 'bar2'}) |
|
166 |
assert resp.json['creation_datetime'] == encoder.default(creation_datetime) |
|
167 |
assert resp.json['last_update_datetime'] == encoder.default(last_update_datetime) |
|
168 | ||
169 |
resp = app.get('/jsondatastore/foobar/data/') |
|
170 |
assert resp.json['data'][0]['creation_datetime'] == encoder.default(creation_datetime) |
|
171 |
assert resp.json['data'][0]['last_update_datetime'] == encoder.default(last_update_datetime) |
|
151 |
- |