19 |
19 |
|
20 |
20 |
from django.db import models
|
21 |
21 |
from django.shortcuts import get_object_or_404
|
|
22 |
from django.template import Context, Template
|
22 |
23 |
from django.utils.translation import ugettext_lazy as _
|
23 |
24 |
|
24 |
25 |
from jsonfield import JSONField
|
... | ... | |
36 |
37 |
default=get_hex_uuid, editable=False, unique=True)
|
37 |
38 |
name_id = models.CharField(max_length=256, blank=True)
|
38 |
39 |
content = JSONField(_('Content'))
|
|
40 |
text = models.CharField(max_length=256, blank=True)
|
39 |
41 |
|
40 |
42 |
creation_datetime = models.DateTimeField(auto_now_add=True)
|
41 |
43 |
last_update_datetime = models.DateTimeField(auto_now=True)
|
... | ... | |
43 |
45 |
|
44 |
46 |
class JsonDataStore(BaseResource):
|
45 |
47 |
category = _('Data Sources')
|
|
48 |
text_key_template = models.CharField(_('Template for text key'),
|
|
49 |
max_length=256, blank=True)
|
46 |
50 |
|
47 |
51 |
class Meta:
|
48 |
52 |
verbose_name = _('JSON Data Store')
|
49 |
53 |
|
|
54 |
def update_text(self, data):
|
|
55 |
if not self.text_key_template:
|
|
56 |
return
|
|
57 |
template = Template(self.text_key_template)
|
|
58 |
context = Context({'data': data})
|
|
59 |
data.text = template.render(context).strip()
|
|
60 |
data.save()
|
|
61 |
|
50 |
62 |
@endpoint(perm='can_access', name='data', pattern=r'$')
|
51 |
63 |
def list(self, request, name_id=None, **kwargs):
|
52 |
64 |
objects = JsonData.objects.all()
|
53 |
65 |
if name_id:
|
54 |
66 |
objects = objects.filter(name_id=name_id)
|
55 |
|
return {'data': [{'id': x.uuid, 'content': x.content} for x in objects]}
|
|
67 |
return {'data': [{'id': x.uuid, 'text': x.text, 'content': x.content} for x in objects]}
|
56 |
68 |
|
57 |
69 |
@endpoint(perm='can_access', methods=['post'], name='data', pattern=r'create$')
|
58 |
70 |
def create(self, request, name_id=None, **kwargs):
|
... | ... | |
60 |
72 |
if name_id:
|
61 |
73 |
attrs['name_id'] = name_id
|
62 |
74 |
data = JsonData(**attrs)
|
|
75 |
self.update_text(data)
|
63 |
76 |
data.save()
|
64 |
|
return {'id': data.uuid}
|
|
77 |
return {'id': data.uuid, 'text': data.text}
|
65 |
78 |
|
66 |
79 |
@endpoint(perm='can_access', methods=['get', 'post'], name='data', pattern=r'(?P<uuid>\w+)/$',)
|
67 |
80 |
def get_or_replace(self, request, uuid):
|
68 |
81 |
data = get_object_or_404(JsonData, uuid=uuid)
|
69 |
82 |
if request.method == 'POST':
|
70 |
83 |
data.content = json.loads(request.body)
|
|
84 |
self.update_text(data)
|
71 |
85 |
data.save()
|
72 |
|
return {'id': data.uuid, 'content': data.content}
|
|
86 |
return {'id': data.uuid, 'text': data.text, 'content': data.content}
|
73 |
87 |
|
74 |
88 |
@endpoint(perm='can_access', methods=['post'], name='data', pattern=r'(?P<uuid>\w+)/delete$')
|
75 |
89 |
def delete(self, request, uuid):
|