__init__.py 1.21 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
__all__ = [
    "ZoneInfo",
    "reset_tzpath",
    "available_timezones",
    "TZPATH",
    "ZoneInfoNotFoundError",
    "InvalidTZPathWarning",
]
import sys

from . import _tzpath
from ._common import ZoneInfoNotFoundError
from ._version import __version__

try:
    from ._czoneinfo import ZoneInfo
except ImportError:  # pragma: nocover
    from ._zoneinfo import ZoneInfo

reset_tzpath = _tzpath.reset_tzpath
available_timezones = _tzpath.available_timezones
InvalidTZPathWarning = _tzpath.InvalidTZPathWarning

if sys.version_info < (3, 7):
    # Module-level __getattr__ was added in Python 3.7, so instead of lazily
    # populating TZPATH on every access, we will register a callback with
    # reset_tzpath to update the top-level tuple.
    TZPATH = _tzpath.TZPATH

    def _tzpath_callback(new_tzpath):
        global TZPATH
        TZPATH = new_tzpath

    _tzpath.TZPATH_CALLBACKS.append(_tzpath_callback)
    del _tzpath_callback

else:

    def __getattr__(name):
        if name == "TZPATH":
            return _tzpath.TZPATH
        else:
            raise AttributeError(
                f"module {__name__!r} has no attribute {name!r}"
            )


def __dir__():
    return sorted(list(globals()) + ["TZPATH"])