From f48e70ae846c161dfbfe6ddb36e4bcad4427ac8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Tue, 3 Apr 2018 22:03:32 +0200
Subject: [PATCH] zoneinfo: Get timezone data from system tzdata

---
 dateutil/test/test_imports.py |  3 +--
 dateutil/zoneinfo/__init__.py | 25 ++++++++++++++-----------
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/dateutil/test/test_imports.py b/dateutil/test/test_imports.py
index 2a19b62..97d07e4 100644
--- a/dateutil/test/test_imports.py
+++ b/dateutil/test/test_imports.py
@@ -158,9 +158,8 @@ class ImportZoneInfoTest(unittest.TestCase):
     def testZoneinfoStar(self):
         from dateutil.zoneinfo import gettz
         from dateutil.zoneinfo import gettz_db_metadata
-        from dateutil.zoneinfo import rebuild
 
-        zi_all = (gettz, gettz_db_metadata, rebuild)
+        zi_all = (gettz, gettz_db_metadata)
 
         for var in zi_all:
             self.assertIsNot(var, None)
diff --git a/dateutil/zoneinfo/__init__.py b/dateutil/zoneinfo/__init__.py
index 34f11ad..e9870ca 100644
--- a/dateutil/zoneinfo/__init__.py
+++ b/dateutil/zoneinfo/__init__.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 import warnings
 import json
+import os
 
 from tarfile import TarFile
 from pkgutil import get_data
@@ -10,7 +11,7 @@ from dateutil.tz import tzfile as _tzfile
 
 __all__ = ["get_zonefile_instance", "gettz", "gettz_db_metadata"]
 
-ZONEFILENAME = "dateutil-zoneinfo.tar.gz"
+ZONEDIRECTORY = "/usr/share/zoneinfo"
 METADATA_FN = 'METADATA'
 
 
@@ -19,12 +20,14 @@ class tzfile(_tzfile):
         return (gettz, (self._filename,))
 
 
-def getzoneinfofile_stream():
-    try:
-        return BytesIO(get_data(__name__, ZONEFILENAME))
-    except IOError as e:  # TODO  switch to FileNotFoundError?
-        warnings.warn("I/O error({0}): {1}".format(e.errno, e.strerror))
-        return None
+def iter_zones(topdir):
+    for dirpath, dirnames, filenames in os.walk(topdir):
+        for f in filenames:
+            if f.endswith('.tab'):
+                continue
+            fpath = os.path.join(dirpath, f)
+            relpath = os.path.relpath(fpath, topdir)
+            yield (relpath, tzfile(fpath, filename=relpath))
 
 
 class ZoneInfoFile(object):
@@ -48,7 +51,7 @@ class ZoneInfoFile(object):
                     # no metadata in tar file
                     self.metadata = None
         else:
-            self.zones = {}
+            self.zones = dict(iter_zones(ZONEDIRECTORY))
             self.metadata = None
 
     def get(self, name, default=None):
@@ -99,7 +102,7 @@ def get_zonefile_instance(new_instance=False):
         zif = getattr(get_zonefile_instance, '_cached_instance', None)
 
     if zif is None:
-        zif = ZoneInfoFile(getzoneinfofile_stream())
+        zif = ZoneInfoFile()
 
         get_zonefile_instance._cached_instance = zif
 
@@ -140,7 +143,7 @@ def gettz(name):
                   DeprecationWarning)
 
     if len(_CLASS_ZONE_INSTANCE) == 0:
-        _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream()))
+        _CLASS_ZONE_INSTANCE.append(ZoneInfoFile())
     return _CLASS_ZONE_INSTANCE[0].zones.get(name)
 
 
@@ -163,5 +166,5 @@ def gettz_db_metadata():
                   DeprecationWarning)
 
     if len(_CLASS_ZONE_INSTANCE) == 0:
-        _CLASS_ZONE_INSTANCE.append(ZoneInfoFile(getzoneinfofile_stream()))
+        _CLASS_ZONE_INSTANCE.append(ZoneInfoFile())
     return _CLASS_ZONE_INSTANCE[0].metadata
-- 
2.17.0

