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
|
... | ... | |
38 |
39 |
default=get_hex_uuid, editable=False, unique=True)
|
39 |
40 |
name_id = models.CharField(max_length=256, blank=True)
|
40 |
41 |
content = JSONField(_('Content'))
|
|
42 |
text = models.CharField(max_length=256, blank=True)
|
41 |
43 |
|
42 |
44 |
creation_datetime = models.DateTimeField(auto_now_add=True)
|
43 |
45 |
last_update_datetime = models.DateTimeField(auto_now=True)
|
44 |
46 |
|
|
47 |
def save(self, *args, **kwargs):
|
|
48 |
text_value_template = self.datastore.text_value_template
|
|
49 |
if text_value_template:
|
|
50 |
template = Template(text_value_template)
|
|
51 |
context = Context(self.content)
|
|
52 |
self.text = template.render(context).strip()
|
|
53 |
return super(JsonData, self).save(*args, **kwargs)
|
|
54 |
|
45 |
55 |
|
46 |
56 |
class JsonDataStore(BaseResource):
|
47 |
57 |
category = _('Data Sources')
|
|
58 |
text_value_template = models.CharField(_('Template for "text" key value'),
|
|
59 |
max_length=256, blank=True)
|
48 |
60 |
|
49 |
61 |
class Meta:
|
50 |
62 |
verbose_name = _('JSON Data Store')
|
... | ... | |
54 |
66 |
objects = JsonData.objects.filter(datastore=self)
|
55 |
67 |
if name_id:
|
56 |
68 |
objects = objects.filter(name_id=name_id)
|
57 |
|
return {'data': [{'id': x.uuid, 'content': x.content} for x in objects]}
|
|
69 |
return {'data': [{'id': x.uuid, 'text': x.text, 'content': x.content} for x in objects]}
|
58 |
70 |
|
59 |
71 |
@endpoint(perm='can_access', methods=['post'], name='data', pattern=r'create$')
|
60 |
72 |
def create(self, request, name_id=None, **kwargs):
|
... | ... | |
66 |
78 |
attrs['name_id'] = name_id
|
67 |
79 |
data = JsonData(**attrs)
|
68 |
80 |
data.save()
|
69 |
|
return {'id': data.uuid}
|
|
81 |
return {'id': data.uuid, 'text': data.text}
|
70 |
82 |
|
71 |
83 |
@endpoint(perm='can_access', methods=['get', 'post'], name='data', pattern=r'(?P<uuid>\w+)/$',)
|
72 |
84 |
def get_or_replace(self, request, uuid):
|
... | ... | |
74 |
86 |
if request.method == 'POST':
|
75 |
87 |
data.content = json.loads(request.body)
|
76 |
88 |
data.save()
|
77 |
|
return {'id': data.uuid, 'content': data.content}
|
|
89 |
return {'id': data.uuid, 'text': data.text, 'content': data.content}
|
78 |
90 |
|
79 |
91 |
@endpoint(perm='can_access', methods=['post'], name='data', pattern=r'(?P<uuid>\w+)/delete$')
|
80 |
92 |
def delete(self, request, uuid):
|