summaryrefslogtreecommitdiff
blob: 85b639f0e615c994137c06303887842f4291b230 (plain)
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
50
51
52
Inspired by the Fedora patch:
https://src.fedoraproject.org/rpms/pytz/blob/rawhide/f/pytz-zoneinfo.patch

_allzones() is based on code in gen_tzinfo.py in upstream repo.

diff --git a/pytz/__init__.py b/pytz/__init__.py
index f89d0eb..d00f3bb 100644
--- a/pytz/__init__.py
+++ b/pytz/__init__.py
@@ -75,6 +75,21 @@ else:  # Python 2.x
         return s.encode('ASCII')
 
 
+def _allzones():
+    for dirpath, dirnames, filenames in os.walk(_PYTZ_TZDATADIR):
+        for f in filenames:
+            p = os.path.join(dirpath, f)
+            with open(p, 'rb') as tzfile:
+                if tzfile.read(4) == b'TZif':
+                    yield os.path.relpath(p, _PYTZ_TZDATADIR)
+
+
+_PYTZ_TZDATADIR = os.environ.get('PYTZ_TZDATADIR', '/usr/share/zoneinfo')
+_all_timezones_unchecked = LazyList(x for x in _allzones())
+all_timezones = _all_timezones_unchecked
+all_timezones_set = LazySet(all_timezones)
+
+
 def open_resource(name):
     """Open a resource from the zoneinfo subdir for reading.
 
@@ -88,7 +102,7 @@ def open_resource(name):
     for part in name_parts:
         if part == os.path.pardir or os.sep in part:
             raise ValueError('Bad path segment: %r' % part)
-    zoneinfo_dir = os.environ.get('PYTZ_TZDATADIR', None)
+    zoneinfo_dir = _PYTZ_TZDATADIR
     if zoneinfo_dir is not None:
         filename = os.path.join(zoneinfo_dir, *name_parts)
     else:
diff --git a/setup.py b/setup.py
index 24f7f37..b03592c 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,6 @@ for dirpath, dirnames, filenames in os.walk(os.path.join('pytz', 'zoneinfo')):
     resources.extend([os.path.join(basepath, filename) for filename in filenames])
 package_data = {'pytz': resources}
 
-assert len(resources) > 10, 'zoneinfo files not found!'
 
 setup(
     name='pytz',