Projet

Général

Profil

0003-formdata-prefetch-also-users-from-evolutions-71303.patch

Lauréline Guérin, 15 novembre 2022 11:51

Télécharger (3,36 ko)

Voir les différences:

Subject: [PATCH 3/3] formdata: prefetch also users from evolutions (#71303)

 wcs/backoffice/management.py | 18 ++++++++++++------
 wcs/formdata.py              | 12 ++++++++----
 2 files changed, 20 insertions(+), 10 deletions(-)
wcs/backoffice/management.py
4334 4334
        formdef = self.kwargs['formdef_class'].get(self.kwargs['formdef_id'])
4335 4335
        prefetched_users = None
4336 4336
        prefetched_roles = None
4337
        user_ids = list(
4338
            set(
4339
                [x.user_id for x in items if x.user_id]
4340
                + [x.submission_agent_id for x in items if x.submission_agent_id]
4341
            )
4337
        user_ids = set(
4338
            [x.user_id for x in items if x.user_id]
4339
            + [x.submission_agent_id for x in items if x.submission_agent_id]
4342 4340
        )
4341
        if include_evolution:
4342
            for item in items:
4343
                if not item.evolution:
4344
                    continue
4345
                for evo in item.evolution:
4346
                    if not evo.who or evo.who.startswith('_'):
4347
                        continue
4348
                    user_ids.add(evo.who)
4343 4349
        prefetched_users = {
4344 4350
            str(x.id): x
4345
            for x in get_publisher().user_class.get_ids(user_ids, ignore_errors=True)
4351
            for x in get_publisher().user_class.get_ids(list(user_ids), ignore_errors=True)
4346 4352
            if x is not None
4347 4353
        }
4348 4354
        if include_roles:
wcs/formdata.py
202 202
                return part.get_as_plain_text()
203 203
        return self.comment
204 204

  
205
    def get_json_export_dict(self, formdata_user, anonymise=False, include_files=True):
205
    def get_json_export_dict(self, formdata_user, anonymise=False, include_files=True, prefetched_users=None):
206 206
        data = {
207 207
            'time': datetime.datetime(*self.time[:6]) if self.time else None,
208 208
            'last_jump_datetime': self.last_jump_datetime,
......
211 211
            data['status'] = self.status[3:]
212 212
        if self.who != '_submitter':
213 213
            try:
214
                user = get_publisher().user_class.get(self.who)
214
                if prefetched_users is not None:
215
                    user = prefetched_users.get(str(self.who))
216
                else:
217
                    user = get_publisher().user_class.get(self.who)
215 218
            except KeyError:
216
                pass
217
            else:
219
                user = None
220
            if user is not None:
218 221
                data['who'] = user.get_json_export_dict()
219 222
        elif not anonymise and formdata_user:
220 223
            data['who'] = formdata_user.get_json_export_dict()
......
1478 1481
                        formdata_user=formdata_user,
1479 1482
                        anonymise=anonymise,
1480 1483
                        include_files=include_files,
1484
                        prefetched_users=prefetched_users,
1481 1485
                    )
1482 1486
                )
1483 1487

  
1484
-