From 031511cc63f49b851d5d5576ddca7bf85a289e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 24 Jun 2017 10:59:48 +0200 Subject: [PATCH] json data store: allow name_id in edit/delete methods (#17171) --- passerelle/apps/jsondatastore/models.py | 17 +++++++++++++---- tests/test_jsondatastore.py | 9 +++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/passerelle/apps/jsondatastore/models.py b/passerelle/apps/jsondatastore/models.py index ff21bc3..7e39298 100644 --- a/passerelle/apps/jsondatastore/models.py +++ b/passerelle/apps/jsondatastore/models.py @@ -80,15 +80,24 @@ class JsonDataStore(BaseResource): data.save() return {'id': data.uuid, 'text': data.text} + def get_data_object_or_404(self, uuid, name_id=None): + attrs = { + 'uuid': uuid, + 'datastore': self, + } + if name_id is not None: + attrs['name_id'] = name_id + return get_object_or_404(JsonData, **attrs) + @endpoint(perm='can_access', methods=['get', 'post'], name='data', pattern=r'(?P\w+)/$',) - def get_or_replace(self, request, uuid): - data = get_object_or_404(JsonData, uuid=uuid, datastore=self) + def get_or_replace(self, request, uuid, name_id=None): + data = self.get_data_object_or_404(uuid, name_id) if request.method == 'POST': data.content = json.loads(request.body) data.save() return {'id': data.uuid, 'text': data.text, 'content': data.content} @endpoint(perm='can_access', methods=['post'], name='data', pattern=r'(?P\w+)/delete$') - def delete(self, request, uuid): - get_object_or_404(JsonData, uuid=uuid, datastore=self).delete() + def delete(self, request, uuid, name_id=None): + self.get_data_object_or_404(uuid, name_id).delete() return {'err': 0} diff --git a/tests/test_jsondatastore.py b/tests/test_jsondatastore.py index 499a6c9..2a89cd6 100644 --- a/tests/test_jsondatastore.py +++ b/tests/test_jsondatastore.py @@ -84,6 +84,15 @@ def test_jsondatastore_name_id(app, jsondatastore): resp = app.get('/jsondatastore/foobar/data/?name_id=yyy') assert len(resp.json['data']) == 1 + # try removing an existing entry with the wrong name id + resp = app.post_json('/jsondatastore/foobar/data/%s/delete?name_id=zzz' % uuid, status=404) + + # try removing an existing entry with a blank name id + resp = app.post_json('/jsondatastore/foobar/data/%s/delete?name_id=' % uuid, status=404) + + # and with the right one + resp = app.post_json('/jsondatastore/foobar/data/%s/delete?name_id=yyy' % uuid) + def test_jsondatastore_template(app, jsondatastore): jsondatastore.text_value_template = '{{foo}}' jsondatastore.save() -- 2.13.1