Projet

Général

Profil

0001-api-use-custom-digest-for-carddata-view-if-defined-5.patch

Lauréline Guérin, 05 août 2021 16:40

Télécharger (7,64 ko)

Voir les différences:

Subject: [PATCH] api: use custom digest for carddata view if defined (#55173)

 tests/api/test_carddef.py    | 52 ++++++++++++++++++++++++++++++++++++
 wcs/backoffice/management.py | 15 ++++++++---
 wcs/carddata.py              |  4 +--
 wcs/formdata.py              | 11 ++++----
 4 files changed, 71 insertions(+), 11 deletions(-)
tests/api/test_carddef.py
91 91
    formdata.data = {'0': 'blah'}
92 92
    formdata.just_created()
93 93
    formdata.store()
94
    assert formdata.digests == {'default': 'bla blah xxx'}
94 95

  
95 96
    custom_view = pub.custom_view_class()
96 97
    custom_view.title = 'shared carddef custom view'
......
156 157
    assert resp.json['data'][0]['digest'] == formdata.digests['default']
157 158
    assert resp.json['data'][0]['text'] == formdata.digests['default']
158 159

  
160
    resp = get_app(pub).get(
161
        sign_uri(
162
            '/api/cards/test/list/datasource-carddef-custom-view?NameID=%s' % local_user.name_identifiers[0]
163
        )
164
    )
165
    assert len(resp.json['data']) == 1
166
    assert resp.json['data'][0]['display_id'] == formdata.get_display_id()
167
    assert resp.json['data'][0]['display_name'] == formdata.get_display_name()
168
    assert resp.json['data'][0]['digest'] == formdata.digests['default']
169
    assert resp.json['data'][0]['text'] == formdata.digests['default']
170
    resp = get_app(pub).get(
171
        sign_uri(
172
            '/api/cards/test/list/datasource-carddef-custom-view?NameID=%s&full=on'
173
            % local_user.name_identifiers[0]
174
        )
175
    )
176
    assert resp.json['data'][0]['fields']['foo'] == 'blah'
177
    assert resp.json['data'][0]['digest'] == formdata.digests['default']
178
    assert resp.json['data'][0]['text'] == formdata.digests['default']
179

  
180
    # with custom digest template
181
    carddef.digest_templates = {
182
        'default': 'bla {{ form_var_foo }} xxx',
183
        'custom-view:datasource-carddef-custom-view': '{{ form_var_foo }}',
184
    }
185
    carddef.store()
186
    formdata.store()
187
    assert formdata.digests == {
188
        'default': 'bla blah xxx',
189
        'custom-view:datasource-carddef-custom-view': 'blah',
190
    }
191
    resp = get_app(pub).get(
192
        sign_uri(
193
            '/api/cards/test/list/datasource-carddef-custom-view?NameID=%s' % local_user.name_identifiers[0]
194
        )
195
    )
196
    assert len(resp.json['data']) == 1
197
    assert resp.json['data'][0]['display_id'] == formdata.get_display_id()
198
    assert resp.json['data'][0]['display_name'] == formdata.get_display_name()
199
    assert resp.json['data'][0]['digest'] == formdata.digests['custom-view:datasource-carddef-custom-view']
200
    assert resp.json['data'][0]['text'] == formdata.digests['custom-view:datasource-carddef-custom-view']
201
    resp = get_app(pub).get(
202
        sign_uri(
203
            '/api/cards/test/list/datasource-carddef-custom-view?NameID=%s&full=on'
204
            % local_user.name_identifiers[0]
205
        )
206
    )
207
    assert resp.json['data'][0]['fields']['foo'] == 'blah'
208
    assert resp.json['data'][0]['digest'] == formdata.digests['custom-view:datasource-carddef-custom-view']
209
    assert resp.json['data'][0]['text'] == formdata.digests['custom-view:datasource-carddef-custom-view']
210

  
159 211
    # get single carddata (as signed request without any user specified, so
160 212
    # no check for permissions)
161 213
    resp = get_app(pub).get(sign_uri('/api/cards/test/%s/' % formdata.id))
wcs/backoffice/management.py
2386 2386
        )[0]
2387 2387
        if get_publisher().is_using_postgresql():
2388 2388
            self.formdef.data_class().load_all_evolutions(items)
2389
        digest_key = 'default'
2390
        if self.view and isinstance(self.formdef, CardDef):
2391
            view_digest_key = 'custom-view:%s' % self.view.get_url_slug()
2392
            if view_digest_key in (self.formdef.digest_templates or {}):
2393
                digest_key = view_digest_key
2389 2394
        if get_request().form.get('full') == 'on':
2390 2395
            output = []
2391 2396
            for filled in items:
2392
                data = filled.get_json_export_dict(include_files=False, anonymise=anonymise, user=user)
2397
                data = filled.get_json_export_dict(
2398
                    include_files=False, anonymise=anonymise, user=user, digest_key=digest_key
2399
                )
2393 2400
                data.pop('digests')
2394
                data['digest'] = filled.default_digest
2401
                data['digest'] = (filled.digests or {}).get(digest_key)
2395 2402
                output.append(data)
2396 2403
        else:
2397 2404
            output = [
......
2399 2406
                    'id': filled.id,
2400 2407
                    'display_id': filled.get_display_id(),
2401 2408
                    'display_name': filled.get_display_name(),
2402
                    'digest': filled.default_digest,
2403
                    'text': filled.get_display_label(),
2409
                    'digest': (filled.digests or {}).get(digest_key),
2410
                    'text': filled.get_display_label(digest_key=digest_key),
2404 2411
                    'url': filled.get_url(),
2405 2412
                    'receipt_time': datetime.datetime(*filled.receipt_time[:6]),
2406 2413
                    'last_update_time': datetime.datetime(*filled.last_update_time[:6]),
wcs/carddata.py
45 45
                item[field.varname] = value
46 46
        return item
47 47

  
48
    def get_display_label(self):
49
        return self.default_digest or self.get_display_name()
48
    def get_display_label(self, digest_key='default'):
49
        return (self.digests or {}).get(digest_key) or self.get_display_name()
50 50

  
51 51
    def get_author_qualification(self):
52 52
        return None
wcs/formdata.py
1129 1129
    def default_digest(self):
1130 1130
        return (self.digests or {}).get('default')
1131 1131

  
1132
    def get_display_label(self):
1133
        if self.default_digest:
1134
            return '%s (%s)' % (self.get_display_name(), self.default_digest)
1132
    def get_display_label(self, digest_key='default'):
1133
        digest = (self.digests or {}).get(digest_key)
1134
        if digest:
1135
            return '%s (%s)' % (self.get_display_name(), digest)
1135 1136
        return self.get_display_name()
1136 1137

  
1137 1138
    def get_auto_geoloc(self):
......
1182 1183
            self.data, fields, formdata=self, include_files=include_files, anonymise=anonymise
1183 1184
        )
1184 1185

  
1185
    def get_json_export_dict(self, include_files=True, anonymise=False, user=None):
1186
    def get_json_export_dict(self, include_files=True, anonymise=False, user=None, digest_key='default'):
1186 1187
        data = {}
1187 1188
        data['id'] = str(self.id)
1188 1189
        data['digests'] = self.digests
1189 1190
        data['display_id'] = self.get_display_id()
1190 1191
        data['display_name'] = self.get_display_name()
1191
        data['text'] = self.get_display_label()
1192
        data['text'] = self.get_display_label(digest_key=digest_key)
1192 1193
        data['receipt_time'] = datetime.datetime(*self.receipt_time[:6])
1193 1194
        data['last_update_time'] = datetime.datetime(*self.last_update_time[:6])
1194 1195
        data['criticality_level'] = self.criticality_level
1195
-