21 lines
634 B
Python
21 lines
634 B
Python
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')
|