From 752137ad84491d8870c12a76c56c3e6516e46208 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Mon, 11 Mar 2024 11:18:09 +0100 Subject: [PATCH] timemachine --- src/pretix/base/models/items.py | 21 +++++++++++---------- src/pretix/presale/timemachine.py | 4 +--- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/pretix/base/models/items.py b/src/pretix/base/models/items.py index 8e8bf7070e..b07c6b9e55 100644 --- a/src/pretix/base/models/items.py +++ b/src/pretix/base/models/items.py @@ -69,6 +69,7 @@ from pretix.base.models.tax import TaxedPrice from ...helpers.images import ImageSizeValidator from ..media import MEDIA_TYPES from .event import Event, SubEvent +from pretix.presale.timemachine import time_machine_now class ItemCategory(LoggedModel): @@ -192,7 +193,7 @@ class SubEventItem(models.Model): self.subevent.event.cache.clear() def is_available(self, now_dt: datetime=None) -> bool: - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() if self.disabled: return False if self.available_from and self.available_from > now_dt: @@ -248,7 +249,7 @@ class SubEventItemVariation(models.Model): self.subevent.event.cache.clear() def is_available(self, now_dt: datetime=None) -> bool: - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() if self.disabled: return False if self.available_from and self.available_from > now_dt: @@ -263,8 +264,8 @@ def filter_available(qs, channel='web', voucher=None, allow_addons=False): # IMPORTANT: If this is updated, also update the ItemVariation query # in models/event.py: EventMixin.annotated() Q(active=True) - & Q(Q(available_from__isnull=True) | Q(available_from__lte=now()) | Q(available_from_mode='info')) - & Q(Q(available_until__isnull=True) | Q(available_until__gte=now()) | Q(available_until_mode='info')) + & Q(Q(available_from__isnull=True) | Q(available_from__lte=time_machine_now()) | Q(available_from_mode='info')) + & Q(Q(available_until__isnull=True) | Q(available_until__gte=time_machine_now()) | Q(available_until_mode='info')) & Q(sales_channels__contains=channel) & Q(require_bundling=False) ) if not allow_addons: @@ -782,7 +783,7 @@ class Item(LoggedModel): return t def is_available_by_time(self, now_dt: datetime=None) -> bool: - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() if self.available_from and self.available_from > now_dt: return False if self.available_until and self.available_until < now_dt: @@ -794,13 +795,13 @@ class Item(LoggedModel): Returns whether this item is available according to its ``active`` flag and its ``available_from`` and ``available_until`` fields """ - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() if not self.active or not self.is_available_by_time(now_dt): return False return True def unavailability_reason(self, now_dt: datetime=None, has_voucher=False, subevent=None) -> Optional[str]: - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() subevent_item = subevent and subevent.item_overrides.get(self.pk) if not self.active: return 'active' @@ -1290,7 +1291,7 @@ class ItemVariation(models.Model): return ItemVariation.objects.filter(item=self.item).count() == 1 def is_available_by_time(self, now_dt: datetime=None) -> bool: - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() if self.available_from and self.available_from > now_dt: return False if self.available_until and self.available_until < now_dt: @@ -1302,13 +1303,13 @@ class ItemVariation(models.Model): Returns whether this item is available according to its ``active`` flag and its ``available_from`` and ``available_until`` fields """ - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() if not self.active or not self.is_available_by_time(now_dt): return False return True def unavailability_reason(self, now_dt: datetime=None, has_voucher=False, subevent=None) -> Optional[str]: - now_dt = now_dt or now() + now_dt = now_dt or time_machine_now() subevent_var = subevent and subevent.var_overrides.get(self.pk) if not self.active: return 'active' diff --git a/src/pretix/presale/timemachine.py b/src/pretix/presale/timemachine.py index 30d8fc3eca..1df78a1659 100644 --- a/src/pretix/presale/timemachine.py +++ b/src/pretix/presale/timemachine.py @@ -61,14 +61,12 @@ class TimeMachineMiddleware: try: TimeMachineMiddleware.tls.now_dt = request.now_dt - TimeMachineMiddleware.tls.now_dt_is_fake = request.now_dt_is_fake return self.get_response(request) finally: TimeMachineMiddleware.tls.now_dt = None - TimeMachineMiddleware.tls.now_dt_is_fake = None def time_machine_now(): - return TimeMachineMiddleware.tls.now_dt or now() + return getattr(TimeMachineMiddleware.tls, 'now_dt', None) or now()