__init__.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from __future__ import annotations
  2. from pathlib import Path
  3. from typing import cast
  4. from pendulum.tz.local_timezone import get_local_timezone
  5. from pendulum.tz.local_timezone import set_local_timezone
  6. from pendulum.tz.local_timezone import test_local_timezone
  7. from pendulum.tz.timezone import UTC
  8. from pendulum.tz.timezone import FixedTimezone
  9. from pendulum.tz.timezone import Timezone
  10. from pendulum.utils._compat import resources
  11. PRE_TRANSITION = "pre"
  12. POST_TRANSITION = "post"
  13. TRANSITION_ERROR = "error"
  14. _timezones = None
  15. _tz_cache: dict[int, FixedTimezone] = {}
  16. def timezones() -> tuple[str, ...]:
  17. global _timezones
  18. if _timezones is None:
  19. with cast(Path, resources.files("tzdata").joinpath("zones")).open() as f:
  20. _timezones = tuple(tz.strip() for tz in f.readlines())
  21. return _timezones
  22. def fixed_timezone(offset: int) -> FixedTimezone:
  23. """
  24. Return a Timezone instance given its offset in seconds.
  25. """
  26. if offset in _tz_cache:
  27. return _tz_cache[offset]
  28. tz = FixedTimezone(offset)
  29. _tz_cache[offset] = tz
  30. return tz
  31. def local_timezone() -> Timezone | FixedTimezone:
  32. """
  33. Return the local timezone.
  34. """
  35. return get_local_timezone()
  36. __all__ = [
  37. "UTC",
  38. "Timezone",
  39. "FixedTimezone",
  40. "set_local_timezone",
  41. "get_local_timezone",
  42. "test_local_timezone",
  43. "fixed_timezone",
  44. "local_timezone",
  45. "timezones",
  46. ]