Files
pretix_original/doc/development/implementation/timemachine.rst
2024-04-30 21:49:58 +02:00

37 lines
1.2 KiB
ReStructuredText

Time machine mode
=================
In test mode, pretix provides a time machine feature which allows event organizers
to test their shop as if it were a different date and time. This time machine mode
is implemented by calling our custom :py:meth:`time_machine_now()` function instead of
:py:meth:`django.utils.timezone.now()` in all places where the time should be
modifiable. If you add code that uses the current date and time for checking whether some
product can be bought, you should use :py:meth:`time_machine_now`.
.. autofunction:: pretix.base.timemachine.time_machine_now
Background tasks
----------------
The time machine datetime is passed through the request flow via a thread-local variable (ContextVar).
Therefore, if you call a background task in the order process, where time_machine_now should be
respected, you need to pass it through manually as shown in the example below:
.. code-block:: python
@app.task()
def my_task(self, override_now_dt: datetime=None) -> None:
with time_machine_now_assigned(override_now_dt):
# ...do something that uses time_machine_now()
my_task.apply_async(kwargs={'override_now_dt': time_machine_now(default=None)})