mysteriendrama/lib/python3.11/site-packages/psycopg/_tz.py
2023-07-26 21:33:29 +02:00

45 lines
1.2 KiB
Python

"""
Timezone utility functions.
"""
# Copyright (C) 2020 The Psycopg Team
import logging
from typing import Dict, Optional, Union
from datetime import timezone, tzinfo
from .pq.abc import PGconn
from ._compat import ZoneInfo
logger = logging.getLogger("psycopg")
_timezones: Dict[Union[None, bytes], tzinfo] = {
None: timezone.utc,
b"UTC": timezone.utc,
}
def get_tzinfo(pgconn: Optional[PGconn]) -> tzinfo:
"""Return the Python timezone info of the connection's timezone."""
tzname = pgconn.parameter_status(b"TimeZone") if pgconn else None
try:
return _timezones[tzname]
except KeyError:
sname = tzname.decode() if tzname else "UTC"
try:
zi: tzinfo = ZoneInfo(sname)
except (KeyError, OSError):
logger.warning("unknown PostgreSQL timezone: %r; will use UTC", sname)
zi = timezone.utc
except Exception as ex:
logger.warning(
"error handling PostgreSQL timezone: %r; will use UTC (%s - %s)",
sname,
type(ex).__name__,
ex,
)
zi = timezone.utc
_timezones[tzname] = zi
return zi