Projet

Général

Profil

0001-jsondatastore-return-datetimes-in-results.patch

Valentin Deniaud, 03 octobre 2019 10:26

Télécharger (4,09 ko)

Voir les différences:

Subject: [PATCH] jsondatastore: return datetimes in results

 passerelle/apps/jsondatastore/models.py | 15 ++++++++++++---
 tests/test_jsondatastore.py             | 21 +++++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)
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
-