From b1d72f4e82879bd205e68abf7fca2f2be1d242d6 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 | 20 ++++++++++++++------ tests/test_jsondatastore.py | 9 +++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/passerelle/apps/jsondatastore/models.py b/passerelle/apps/jsondatastore/models.py index ff21bc3..5164707 100644 --- a/passerelle/apps/jsondatastore/models.py +++ b/passerelle/apps/jsondatastore/models.py @@ -18,7 +18,6 @@ import json import uuid from django.db import models -from django.shortcuts import get_object_or_404 from django.template import Context, Template from django.utils.translation import ugettext_lazy as _ @@ -80,15 +79,24 @@ class JsonDataStore(BaseResource): data.save() return {'id': data.uuid, 'text': data.text} + def get_data_object(self, uuid, name_id=None): + attrs = { + 'uuid': uuid, + 'datastore': self, + } + if name_id is not None: + attrs['name_id'] = name_id + return JsonData.objects.get(**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(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() - return {'err': 0} + def delete(self, request, uuid, name_id=None): + self.get_data_object(uuid, name_id).delete() + return {} diff --git a/tests/test_jsondatastore.py b/tests/test_jsondatastore.py index a271c78..683ff9b 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.2