98 |
98 |
self.adapt_id_and_type_plone_attributes(value)
|
99 |
99 |
elif isinstance(data, dict):
|
100 |
100 |
for key, value in list(data.items()):
|
101 |
101 |
self.adapt_id_and_type_plone_attributes(value)
|
102 |
102 |
if key in self.plone_keys_to_rename and key[0] == '@':
|
103 |
103 |
data['PLONE_%s' % key[1:]] = value
|
104 |
104 |
del data[key]
|
105 |
105 |
|
106 |
|
def adapt_record(self, text_template, record):
|
|
106 |
def adapt_record(
|
|
107 |
self,
|
|
108 |
record,
|
|
109 |
text_template='{{ id }}',
|
|
110 |
id_key='UID',
|
|
111 |
):
|
107 |
112 |
self.adapt_id_and_type_plone_attributes(record)
|
108 |
|
data = {}
|
109 |
|
for key, value in record.items():
|
|
113 |
for key, value in list(record.items()):
|
110 |
114 |
# backup original id and text fields
|
111 |
115 |
if key in ('id', 'text'):
|
112 |
116 |
key = 'original_%s' % key
|
113 |
|
data[key] = value
|
114 |
|
data['id'] = record.get('UID')
|
115 |
|
data['text'] = render_to_string(text_template, data).strip()
|
116 |
|
return data
|
|
117 |
record[key] = value
|
|
118 |
record['id'] = record.get(id_key)
|
|
119 |
record['text'] = render_to_string(text_template, record).strip()
|
117 |
120 |
|
118 |
121 |
def get_token(self, renew=False):
|
119 |
122 |
token_key = 'plone-restapi-%s-token' % self.id
|
120 |
123 |
if not renew and cache.get(token_key):
|
121 |
124 |
return cache.get(token_key)
|
122 |
125 |
payload = {
|
123 |
126 |
'grant_type': 'password',
|
124 |
127 |
'client_id': str(self.client_id),
|
... | ... | |
187 |
190 |
if order:
|
188 |
191 |
params['sort_order'] = 'ascending'
|
189 |
192 |
else:
|
190 |
193 |
params['sort_order'] = 'descending'
|
191 |
194 |
if limit:
|
192 |
195 |
params['b_size'] = limit
|
193 |
196 |
params.update(parse_qsl(filter_expression))
|
194 |
197 |
params['fullobjects'] = 'y'
|
195 |
|
json_response = self.request(uri=uri, uid='@search', method='GET', params=params)
|
|
198 |
response = self.request(uri=uri, uid='@search', method='GET', params=params)
|
196 |
199 |
|
197 |
|
result = []
|
198 |
|
for record in json_response.get('items'):
|
199 |
|
data = self.adapt_record(text_template, record)
|
200 |
|
result.append(data)
|
201 |
|
return result
|
|
200 |
for record in response.get('items') or []:
|
|
201 |
self.adapt_record(record, text_template)
|
|
202 |
return response.get('items') or []
|
202 |
203 |
|
203 |
204 |
@endpoint(
|
204 |
205 |
perm='can_access',
|
205 |
206 |
description=_('Fetch'),
|
206 |
207 |
parameters={
|
207 |
208 |
'uri': {'description': _('Uri')},
|
208 |
209 |
'uid': {'description': _('Uid')},
|
209 |
210 |
'text_template': {'description': _('Text template')},
|
210 |
211 |
},
|
211 |
212 |
display_order=1,
|
212 |
213 |
)
|
213 |
214 |
def fetch(self, request, uid, uri='', text_template=''):
|
214 |
|
json_response = self.request(uri=uri, uid=uid, method='GET')
|
215 |
|
data = self.adapt_record(text_template, json_response)
|
216 |
|
return {'data': data}
|
|
215 |
response = self.request(uri=uri, uid=uid, method='GET')
|
|
216 |
self.adapt_record(response, text_template)
|
|
217 |
return {'data': response}
|
217 |
218 |
|
218 |
219 |
@endpoint(
|
219 |
220 |
perm='can_access',
|
220 |
221 |
description=_('Creates'),
|
221 |
222 |
parameters={
|
222 |
223 |
'uri': {'description': _('Uri')},
|
223 |
224 |
},
|
224 |
225 |
methods=['post'],
|