python-dateutil 2.9.0__py2.py3-none-any.whl → 3.0.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dateutil/__init__.py +7 -5
- dateutil/_tzdata_impl.py +147 -0
- dateutil/_version.py +2 -14
- dateutil/relativedelta.py +0 -3
- dateutil/rrule.py +28 -1
- dateutil/tz/__init__.py +52 -4
- dateutil/tz/_tzfile.py +1428 -0
- dateutil/tz/_tzpath.py +104 -0
- dateutil/tz/tz.py +201 -578
- dateutil/zoneinfo/__init__.py +107 -41
- dateutil/zoneinfo/rebuild.py +31 -64
- {python_dateutil-2.9.0.dist-info → python_dateutil-3.0.0.dist-info}/METADATA +16 -16
- python_dateutil-3.0.0.dist-info/RECORD +27 -0
- {python_dateutil-2.9.0.dist-info → python_dateutil-3.0.0.dist-info}/WHEEL +1 -1
- dateutil/zoneinfo/dateutil-zoneinfo.tar.gz +0 -0
- python_dateutil-2.9.0.dist-info/RECORD +0 -25
- {python_dateutil-2.9.0.dist-info → python_dateutil-3.0.0.dist-info/licenses}/LICENSE +0 -0
- {python_dateutil-2.9.0.dist-info → python_dateutil-3.0.0.dist-info}/top_level.txt +0 -0
- {python_dateutil-2.9.0.dist-info → python_dateutil-3.0.0.dist-info}/zip-safe +0 -0
dateutil/tz/_tzpath.py
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
try:
|
|
2
|
+
import zoneinfo
|
|
3
|
+
|
|
4
|
+
reset_tzpath = zoneinfo.reset_tzpath
|
|
5
|
+
InvalidTZPathWarning = zoneinfo.InvalidTZPathWarning
|
|
6
|
+
|
|
7
|
+
def __getattr__(name):
|
|
8
|
+
if name == "TZPATH":
|
|
9
|
+
return zoneinfo.TZPATH
|
|
10
|
+
else:
|
|
11
|
+
raise AttributeError(
|
|
12
|
+
"Module %s has no attribute %s" % (repr(__name__), repr(name))
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
except ImportError:
|
|
16
|
+
import os
|
|
17
|
+
import sys
|
|
18
|
+
import warnings
|
|
19
|
+
|
|
20
|
+
import six
|
|
21
|
+
|
|
22
|
+
class InvalidTZPathWarning(RuntimeWarning):
|
|
23
|
+
"""Warning raised if an invalid path is specified in PYTHONTZPATH."""
|
|
24
|
+
|
|
25
|
+
def _parse_python_tzpath(env_var, stacklevel):
|
|
26
|
+
if not env_var:
|
|
27
|
+
return ()
|
|
28
|
+
|
|
29
|
+
raw_tzpath = env_var.split(os.pathsep)
|
|
30
|
+
new_tzpath = tuple(filter(os.path.isabs, raw_tzpath))
|
|
31
|
+
|
|
32
|
+
# If anything has been filtered out, we will warn about it
|
|
33
|
+
if len(new_tzpath) != len(raw_tzpath):
|
|
34
|
+
msg = _get_invalid_paths_message(raw_tzpath)
|
|
35
|
+
|
|
36
|
+
warnings.warn(
|
|
37
|
+
"Invalid paths specified in PYTHONTZPATH environment variable. "
|
|
38
|
+
+ msg,
|
|
39
|
+
InvalidTZPathWarning,
|
|
40
|
+
stacklevel=stacklevel,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
return new_tzpath
|
|
44
|
+
|
|
45
|
+
def _get_invalid_paths_message(tzpaths):
|
|
46
|
+
invalid_paths = (path for path in tzpaths if not os.path.isabs(path))
|
|
47
|
+
|
|
48
|
+
prefix = "\n "
|
|
49
|
+
indented_str = prefix + prefix.join(invalid_paths)
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
"Paths should be absolute but found the following relative paths:"
|
|
53
|
+
+ indented_str
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def _reset_tzpath(to=None, stacklevel=4):
|
|
57
|
+
global TZPATH
|
|
58
|
+
tzpaths = to
|
|
59
|
+
if tzpaths is not None:
|
|
60
|
+
if isinstance(tzpaths, six.string_types + (bytes,)):
|
|
61
|
+
raise TypeError(
|
|
62
|
+
"tzpaths must be a sequence, not %s: %s"
|
|
63
|
+
% (
|
|
64
|
+
type(tzpaths),
|
|
65
|
+
repr(tzpaths),
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Path-like objects not supported by os.path operations before 3.6
|
|
70
|
+
if sys.version_info < (3, 6):
|
|
71
|
+
tzpaths = tuple(map(str, tzpaths))
|
|
72
|
+
|
|
73
|
+
if not all(map(os.path.isabs, tzpaths)):
|
|
74
|
+
raise ValueError(_get_invalid_paths_message(tzpaths))
|
|
75
|
+
base_tzpath = tzpaths
|
|
76
|
+
else:
|
|
77
|
+
env_var = os.environ.get("PYTHONTZPATH", None)
|
|
78
|
+
if env_var is not None:
|
|
79
|
+
base_tzpath = _parse_python_tzpath(env_var, stacklevel)
|
|
80
|
+
elif sys.platform != "win32":
|
|
81
|
+
base_tzpath = (
|
|
82
|
+
"/usr/share/zoneinfo",
|
|
83
|
+
"/usr/lib/zoneinfo",
|
|
84
|
+
"/usr/share/lib/zoneinfo",
|
|
85
|
+
"/etc/zoneinfo",
|
|
86
|
+
)
|
|
87
|
+
else:
|
|
88
|
+
base_tzpath = ()
|
|
89
|
+
|
|
90
|
+
TZPATH = tuple(base_tzpath)
|
|
91
|
+
if TZPATH_CALLBACKS:
|
|
92
|
+
for callback in TZPATH_CALLBACKS:
|
|
93
|
+
callback(TZPATH)
|
|
94
|
+
|
|
95
|
+
def reset_tzpath(to=None):
|
|
96
|
+
# As in CPython, the warning about PYTHONTZPATH is raised from a
|
|
97
|
+
# helper that is used both at import time and by this function, so
|
|
98
|
+
# that each can pass the stacklevel that points at its caller.
|
|
99
|
+
_reset_tzpath(to)
|
|
100
|
+
|
|
101
|
+
TZPATH = ()
|
|
102
|
+
TZPATH_CALLBACKS = []
|
|
103
|
+
|
|
104
|
+
_reset_tzpath(stacklevel=5)
|