diff --git a/src/pretix/base/timemachine.py b/src/pretix/base/timemachine.py index c8ba4c2c2..f86cd7fc6 100644 --- a/src/pretix/base/timemachine.py +++ b/src/pretix/base/timemachine.py @@ -21,8 +21,8 @@ # import contextvars from contextlib import contextmanager +from datetime import datetime -from dateutil.parser import parse from django.utils.timezone import now from pretix.base.auth import has_event_access_permission @@ -34,7 +34,7 @@ timemachine_now_var = contextvars.ContextVar('timemachine_now', default=None) def time_machine_now_assigned_from_request(request): if hasattr(request, 'event') and f'timemachine_now_dt:{request.event.pk}' in request.session and \ request.event.testmode and has_event_access_permission(request): - request.now_dt = parse(request.session[f'timemachine_now_dt:{request.event.pk}']) + request.now_dt = datetime.fromisoformat(request.session[f'timemachine_now_dt:{request.event.pk}']) request.now_dt_is_fake = True else: request.now_dt = now() diff --git a/src/pretix/presale/views/event.py b/src/pretix/presale/views/event.py index e924ddfe2..b533db755 100644 --- a/src/pretix/presale/views/event.py +++ b/src/pretix/presale/views/event.py @@ -41,7 +41,6 @@ from importlib import import_module from urllib.parse import urlencode import isoweek -from dateutil import parser from django import forms from django.conf import settings from django.contrib import messages @@ -589,7 +588,9 @@ class EventAuth(View): class TimemachineForm(forms.Form): now_dt = forms.SplitDateTimeField( label=_('Fake date time'), - widget=SplitDateTimePickerWidget(), + widget=SplitDateTimePickerWidget( + min_date=date(2000, 1, 1), + ), initial=lambda: now().astimezone(get_current_timezone()), ) @@ -603,12 +604,14 @@ class EventTimeMachine(EventViewMixin, TemplateView): raise PermissionDenied(_('You are not allowed to access time machine mode.')) if not request.event.testmode: raise PermissionDenied(_('This feature is only available in test mode.')) + + initial = {} + if now_dt := request.session.get(f'timemachine_now_dt:{request.event.pk}', None): + initial['now_dt'] = datetime.fromisoformat(now_dt) + self.timemachine_form = TimemachineForm( data=request.method == 'POST' and request.POST or None, - initial=( - {'now_dt': parser.parse(request.session.get(f'timemachine_now_dt:{request.event.pk}', None))} - if request.session.get(f'timemachine_now_dt:{request.event.pk}', None) else {} - ) + initial=initial ) def get_context_data(self, **kwargs): @@ -622,7 +625,7 @@ class EventTimeMachine(EventViewMixin, TemplateView): messages.success(self.request, _('Time machine disabled!')) return redirect(self.get_success_url()) elif self.timemachine_form.is_valid(): - request.session[f'timemachine_now_dt:{request.event.pk}'] = str(self.timemachine_form.cleaned_data['now_dt']) + request.session[f'timemachine_now_dt:{request.event.pk}'] = self.timemachine_form.cleaned_data['now_dt'].isoformat() return redirect(eventreverse(request.event, "presale:event.index")) else: return self.get(request)