diff --git a/src/pretix/helpers/compat.py b/src/pretix/helpers/compat.py new file mode 100644 index 000000000..344d02ddd --- /dev/null +++ b/src/pretix/helpers/compat.py @@ -0,0 +1,9 @@ +import datetime +import sys + + +def date_fromisocalendar(isoyear, isoweek, isoday): + if sys.version_info < (3, 8): + return datetime.datetime.strptime(f'{isoyear}-W{isoweek}-{isoday}', "%G-W%V-%u") + else: + return datetime.datetime.fromisocalendar(isoyear, isoweek, isoday) diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index 58fef2b86..80f642afd 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -29,6 +29,7 @@ from pretix.base.models.items import ( ItemBundle, SubEventItem, SubEventItemVariation, ) from pretix.base.services.quotas import QuotaAvailability +from pretix.helpers.compat import date_fromisocalendar from pretix.multidomain.urlreverse import eventreverse from pretix.presale.ical import get_ical from pretix.presale.signals import item_description @@ -466,7 +467,7 @@ class EventIndex(EventViewMixin, EventListMixin, CartMixin, TemplateView): ) < 2 context['days'] = days_for_template(ebd, week) context['weeks'] = [ - (date.fromisocalendar(self.year, i + 1, 1), date.fromisocalendar(self.year, i + 1, 7)) + (date_fromisocalendar(self.year, i + 1, 1), date_fromisocalendar(self.year, i + 1, 7)) for i in range(53 if date(self.year, 12, 31).isocalendar()[1] == 53 else 52) ] context['years'] = range(now().year - 2, now().year + 3) diff --git a/src/pretix/presale/views/organizer.py b/src/pretix/presale/views/organizer.py index 6a082d972..f108419d6 100644 --- a/src/pretix/presale/views/organizer.py +++ b/src/pretix/presale/views/organizer.py @@ -21,6 +21,7 @@ from pretix.base.models import ( Event, EventMetaValue, SubEvent, SubEventMetaValue, ) from pretix.base.services.quotas import QuotaAvailability +from pretix.helpers.compat import date_fromisocalendar from pretix.helpers.daterange import daterange from pretix.helpers.formats.de.formats import WEEK_FORMAT from pretix.multidomain.urlreverse import eventreverse @@ -524,7 +525,7 @@ class WeekCalendarView(OrganizerViewMixin, EventListMixin, TemplateView): ctx['days'] = days_for_template(ebd, week) ctx['weeks'] = [ - (date.fromisocalendar(self.year, i + 1, 1), date.fromisocalendar(self.year, i + 1, 7)) + (date_fromisocalendar(self.year, i + 1, 1), date_fromisocalendar(self.year, i + 1, 7)) for i in range(53 if date(self.year, 12, 31).isocalendar()[1] == 53 else 52) ] ctx['years'] = range(now().year - 2, now().year + 3)