From b7fb27061d7cfab352dad8eb41f985d15e704514 Mon Sep 17 00:00:00 2001 From: Jean-Marie Favreau Date: Fri, 31 Jan 2025 20:02:52 +0100 Subject: [PATCH] Petites optimisations See #294 --- src/agenda_culturel/calendar.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/agenda_culturel/calendar.py b/src/agenda_culturel/calendar.py index 139fcff..bb9cf47 100644 --- a/src/agenda_culturel/calendar.py +++ b/src/agenda_culturel/calendar.py @@ -89,9 +89,9 @@ class DayInCalendar: def _add_event_internal(self, event): from .models import Category - from copy import deepcopy + from copy import copy # copy event - local_event = deepcopy(event) + local_event = copy(event) # set values if local_event.start_day != self.date: @@ -264,7 +264,7 @@ class CalendarList: | Q(recurrence_dtend__lt=startdatetime) ) ) - | (Q(start_day__lte=self.c_firstdate) & (Q(end_day__isnull=True) | Q(end_day__gte=self.c_firstdate))) + | (Q(start_day__lte=self.c_lastdate) & ((Q(end_day__isnull=True) & Q(start_day__gte=self.c_firstdate)) | Q(end_day__gte=self.c_firstdate))) ).filter( Q(other_versions__isnull=True) | Q(other_versions__representative=F('pk')) | @@ -283,10 +283,18 @@ class CalendarList: lastdate = timezone.make_aware(lastdate, timezone.get_default_timezone()) for e in self.events: - for e_rec in e.get_recurrences_between(firstdate, lastdate): - end = e_rec.start_day if e_rec.end_day is None else e_rec.end_day - for d in daterange(max(e_rec.start_day, self.firstdate), min(end, self.lastdate)): - self.calendar_days[d.__str__()].add_event(e_rec) + if e.recurrences is None: + if e.end_day is None: + if e.start_day >= self.firstdate and e.start_day < self.lastdate: + self.calendar_days[e.start_day.__str__()].add_event(e) + else: + for d in daterange(max(e.start_day, self.firstdate), min(e.end_day, self.lastdate)): + self.calendar_days[d.__str__()].add_event(e) + else: + for e_rec in e.get_recurrences_between(firstdate, lastdate): + end = e_rec.start_day if e_rec.end_day is None else e_rec.end_day + for d in daterange(max(e_rec.start_day, self.firstdate), min(end, self.lastdate)): + self.calendar_days[d.__str__()].add_event(e_rec) def create_calendar_days(self): # create daylist