Projet

Général

Profil

0001-agendas-move-desks-prefetch-code-from-view-to-model-.patch

Valentin Deniaud, 10 décembre 2020 15:37

Télécharger (2,74 ko)

Voir les différences:

Subject: [PATCH 1/2] agendas: move desks prefetch code from view to model
 (#48306)

 chrono/agendas/models.py | 17 +++++++++++++++++
 chrono/manager/views.py  | 15 +--------------
 2 files changed, 18 insertions(+), 14 deletions(-)
chrono/agendas/models.py
529 529
        except (VariableDoesNotExist, TemplateSyntaxError):
530 530
            return
531 531

  
532
    def prefetch_desks_and_exceptions(self):
533
        assert self.kind != 'events'
534

  
535
        self.prefetched_desks = self.desk_set.all().prefetch_related(
536
            'timeperiod_set', 'unavailability_calendars',
537
        )
538
        all_desks_exceptions = TimePeriodException.objects.filter(
539
            Q(desk__in=self.prefetched_desks) | Q(unavailability_calendar__desks__in=self.prefetched_desks)
540
        ).select_related('source')
541
        for desk in self.prefetched_desks:
542
            uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()]
543
            desk.prefetched_exceptions = [
544
                e
545
                for e in all_desks_exceptions
546
                if e.desk_id == desk.pk or e.unavailability_calendar_id in uc_ids
547
            ]
548

  
532 549

  
533 550
class VirtualMember(models.Model):
534 551
    '''Trough model to link virtual agendas to their real agendas.
chrono/manager/views.py
1353 1353

  
1354 1354
    def get_object(self, *args, **kwargs):
1355 1355
        if self.agenda.kind == 'meetings':
1356
            self.agenda.prefetched_desks = self.agenda.desk_set.all().prefetch_related(
1357
                'timeperiod_set', 'unavailability_calendars',
1358
            )
1359
            all_desks_exceptions = TimePeriodException.objects.filter(
1360
                Q(desk__in=self.agenda.prefetched_desks)
1361
                | Q(unavailability_calendar__desks__in=self.agenda.prefetched_desks)
1362
            ).select_related('source')
1363
            for desk in self.agenda.prefetched_desks:
1364
                uc_ids = [uc.pk for uc in desk.unavailability_calendars.all()]
1365
                desk.prefetched_exceptions = [
1366
                    e
1367
                    for e in all_desks_exceptions
1368
                    if e.desk_id == desk.pk or e.unavailability_calendar_id in uc_ids
1369
                ]
1356
            self.agenda.prefetch_desks_and_exceptions()
1370 1357
        return self.agenda
1371 1358

  
1372 1359
    def get_context_data(self, **kwargs):
1373
-