Projet

Général

Profil

0001-plone_restapi-adapt-record-id-field-57904.patch

Nicolas Roche, 16 octobre 2021 22:45

Télécharger (4,87 ko)

Voir les différences:

Subject: [PATCH 1/5] plone_restapi: adapt record id field (#57904)

 passerelle/apps/plone_restapi/models.py | 33 +++++++++++++------------
 tests/test_plone_restapi.py             |  5 ++--
 2 files changed, 20 insertions(+), 18 deletions(-)
passerelle/apps/plone_restapi/models.py
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'],
tests/test_plone_restapi.py
185 185
    connector.adapt_id_and_type_plone_attributes(plone_response)
186 186
    assert plone_response == {
187 187
        'PLONE_type': '@value',
188 188
        '@dict': {'@array': [{'PLONE_id': '123', 'PLONE_type': '@value'}]},
189 189
    }
190 190

  
191 191

  
192 192
def test_adapt_record(connector, token):
193
    data = {
193
    record = {
194 194
        '@id': 'plone id',
195 195
        'UID': 'plone uid',
196 196
        'id': 'foo',
197 197
        'text': 'bar',
198 198
    }
199 199
    template = '{{ PLONE_id }}, {{ id }}, {{original_id }}, {{ original_text }}'
200
    assert connector.adapt_record(template, data) == {
200
    connector.adapt_record(record, template)
201
    assert record == {
201 202
        'PLONE_id': 'plone id',
202 203
        'UID': 'plone uid',
203 204
        'id': 'plone uid',
204 205
        'text': 'plone id, plone uid, foo, bar',
205 206
        'original_id': 'foo',
206 207
        'original_text': 'bar',
207 208
    }
208 209

  
209
-