from datetime import datetime from zoneinfo import ZoneInfo, available_timezones ALLOWED_TIMEZONES = available_timezones() DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' def tz_aware_now(zone: str) -> datetime: """ :param str zone: Zone name in DB :return: A timezone aware datetime object :raises: ValueError When zone name is not supported """ # ZoneInfo uses a weak cache, no need to implement a local cache if zone not in ALLOWED_TIMEZONES: raise ValueError(f'Unsupported timezone "{zone}"') return datetime.now(tz=ZoneInfo(zone)) def real_utc_now() -> datetime: return tz_aware_now('UTC')