From 1e05a1cd727fac75d9df04cd5f852b551f792529 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 10 Jan 2024 11:36:11 +0100 Subject: [PATCH] Fix @available-slots view performance --- CHANGES.rst | 3 +++ src/redturtle/prenotazioni/adapters/booking_code.py | 7 ++++--- src/redturtle/prenotazioni/utilities/dateutils.py | 9 ++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 4f8676ae..23cb833a 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,6 +5,9 @@ Changelog 2.4.0 (unreleased) ------------------ +- Perfomance refactoring for @available-slots view + [folix-01] + - Split booking notification gateways to 'App IO', 'Email' and 'SMS' [folix-01] diff --git a/src/redturtle/prenotazioni/adapters/booking_code.py b/src/redturtle/prenotazioni/adapters/booking_code.py index 1c6ec0e0..dfaaecdb 100644 --- a/src/redturtle/prenotazioni/adapters/booking_code.py +++ b/src/redturtle/prenotazioni/adapters/booking_code.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -from redturtle.prenotazioni.content.prenotazione import IPrenotazione -from zope.component import adapter +import hashlib + from zope.component import Interface +from zope.component import adapter from zope.interface import implementer -import hashlib +from redturtle.prenotazioni.content.prenotazione import IPrenotazione class IBookingCodeGenerator(Interface): diff --git a/src/redturtle/prenotazioni/utilities/dateutils.py b/src/redturtle/prenotazioni/utilities/dateutils.py index 7f721f71..60605ddb 100644 --- a/src/redturtle/prenotazioni/utilities/dateutils.py +++ b/src/redturtle/prenotazioni/utilities/dateutils.py @@ -4,11 +4,18 @@ from datetime import timedelta import six +from cachetools import TTLCache +from cachetools import cached from plone.app.event.base import default_timezone from redturtle.prenotazioni import tznow +@cached(cache=TTLCache(maxsize=10, ttl=timedelta(hours=1), timer=datetime.now)) +def get_default_timezone(as_tzinfo): + return default_timezone(as_tzinfo=as_tzinfo) + + def hm2handm(hm): """This is a utility function that will return the hour and date of day to the value passed in the string hm @@ -33,7 +40,7 @@ def hm2DT(day, hm, tzinfo=None): :param tzinfo: a timezone object (default: the default local timezone as in plone) """ if tzinfo is None: - tzinfo = default_timezone(as_tzinfo=True) + tzinfo = get_default_timezone(as_tzinfo=True) if not hm or hm == "--NOVALUE--" or hm == ("--NOVALUE--",): return None