From 97294964159ae488107ef59c9b9347904b62b1a3 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Wed, 14 May 2025 12:13:38 +0200 Subject: [PATCH] CartManager: expect reservation_time parameter instead of expiry date --- src/pretix/base/services/cart.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/pretix/base/services/cart.py b/src/pretix/base/services/cart.py index d3e359013d..3723a060eb 100644 --- a/src/pretix/base/services/cart.py +++ b/src/pretix/base/services/cart.py @@ -33,6 +33,7 @@ # License for the specific language governing permissions and limitations under the License. import re import uuid +import warnings from collections import Counter, defaultdict, namedtuple from datetime import datetime, time, timedelta from decimal import Decimal @@ -275,7 +276,10 @@ class CartManager: } def __init__(self, event: Event, cart_id: str, sales_channel: SalesChannel, - invoice_address: InvoiceAddress=None, widget_data=None, expiry=None): + invoice_address: InvoiceAddress=None, widget_data=None, expiry=None, reservation_time: timedelta=None): + """ + Creates a new CartManager for an event. + """ self.event = event self.cart_id = cart_id self.real_now_dt = now() @@ -286,12 +290,21 @@ class CartManager: self._subevents_cache = {} self._variations_cache = {} self._seated_cache = {} - self._expiry = None - self._explicit_expiry = expiry self.invoice_address = invoice_address self._widget_data = widget_data or {} self._sales_channel = sales_channel + if expiry and reservation_time: + raise TypeError('Cannot specify both expiry and reservation_time') + elif expiry: + warnings.warn('CartManager(expiry=...) is deprecated, use reservation_time=... instead') + self._reservation_time = expiry - now() + elif reservation_time: + self._reservation_time = reservation_time + else: + self._reservation_time = timedelta(minutes=self.event.settings.get('reservation_time', as_type=int)) + self._expiry = self.real_now_dt + self._reservation_time + @property def positions(self): return self.event.cartposition_set.filter( @@ -1416,7 +1429,6 @@ class CartManager: def commit(self): self._check_presale_dates() self._check_max_cart_size() - self._calculate_expiry() err = self._delete_out_of_timeframe() err = self.extend_expired_positions() or err