summaryrefslogtreecommitdiffstats
path: root/src/pendulum/utils
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-12-17 14:32:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-12-17 14:32:20 +0000
commitdb51f7f103bbbd6c91c8f47d75b3482ef8939691 (patch)
treeab59b1147bd0cd39f31a48073cff236ede4ec1df /src/pendulum/utils
parentAdding upstream version 3.0.0~a1. (diff)
downloadpendulum-upstream.tar.xz
pendulum-upstream.zip
Adding upstream version 3.0.0.upstream/3.0.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pendulum/utils')
-rw-r--r--src/pendulum/utils/__init__.py0
-rw-r--r--src/pendulum/utils/_compat.py15
-rw-r--r--src/pendulum/utils/_zoneinfo.py80
3 files changed, 95 insertions, 0 deletions
diff --git a/src/pendulum/utils/__init__.py b/src/pendulum/utils/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/pendulum/utils/__init__.py
diff --git a/src/pendulum/utils/_compat.py b/src/pendulum/utils/_compat.py
new file mode 100644
index 0000000..e4dfedf
--- /dev/null
+++ b/src/pendulum/utils/_compat.py
@@ -0,0 +1,15 @@
+from __future__ import annotations
+
+import sys
+
+from pendulum.utils import _zoneinfo as zoneinfo
+
+
+PYPY = hasattr(sys, "pypy_version_info")
+
+if sys.version_info < (3, 9):
+ import importlib_resources as resources
+else:
+ from importlib import resources
+
+__all__ = ["resources", "zoneinfo"]
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",
+]