summaryrefslogtreecommitdiffstats
path: root/src/pendulum/utils/_zoneinfo.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pendulum/utils/_zoneinfo.py')
-rw-r--r--src/pendulum/utils/_zoneinfo.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/pendulum/utils/_zoneinfo.py b/src/pendulum/utils/_zoneinfo.py
new file mode 100644
index 0000000..e9f0251
--- /dev/null
+++ b/src/pendulum/utils/_zoneinfo.py
@@ -0,0 +1,80 @@
+from __future__ import annotations
+
+import sys
+
+from typing import TYPE_CHECKING
+
+
+if sys.version_info < (3, 9):
+ # Works around https://github.com/pganssle/zoneinfo/issues/125
+ from backports.zoneinfo import TZPATH
+ from backports.zoneinfo import InvalidTZPathWarning
+ from backports.zoneinfo import ZoneInfoNotFoundError
+ from backports.zoneinfo import available_timezones
+ from backports.zoneinfo import reset_tzpath
+
+ if TYPE_CHECKING:
+ from collections.abc import Iterable
+ from datetime import datetime
+ from datetime import timedelta
+ from datetime import tzinfo
+ from typing import Any
+ from typing import Protocol
+
+ from typing_extensions import Self
+
+ class _IOBytes(Protocol):
+ def read(self, __size: int) -> bytes:
+ ...
+
+ def seek(self, __size: int, __whence: int = ...) -> Any:
+ ...
+
+ class ZoneInfo(tzinfo):
+ @property
+ def key(self) -> str:
+ ...
+
+ def __init__(self, key: str) -> None:
+ ...
+
+ @classmethod
+ def no_cache(cls, key: str) -> Self:
+ ...
+
+ @classmethod
+ def from_file(cls, __fobj: _IOBytes, key: str | None = ...) -> Self:
+ ...
+
+ @classmethod
+ def clear_cache(cls, *, only_keys: Iterable[str] | None = ...) -> None:
+ ...
+
+ def tzname(self, __dt: datetime | None) -> str | None:
+ ...
+
+ def utcoffset(self, __dt: datetime | None) -> timedelta | None:
+ ...
+
+ def dst(self, __dt: datetime | None) -> timedelta | None:
+ ...
+
+ else:
+ from backports.zoneinfo import ZoneInfo
+
+else:
+ from zoneinfo import TZPATH
+ from zoneinfo import InvalidTZPathWarning
+ from zoneinfo import ZoneInfo
+ from zoneinfo import ZoneInfoNotFoundError
+ from zoneinfo import available_timezones
+ from zoneinfo import reset_tzpath
+
+__all__ = [
+ "ZoneInfo",
+ "reset_tzpath",
+ "available_timezones",
+ "TZPATH",
+ "ZoneInfoNotFoundError",
+ "InvalidTZPathWarning",
+]