forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dev-python/python-dateutil: Use system tzdata correctly
Closes: https://bugs.gentoo.org/652226
- Loading branch information
Showing
2 changed files
with
153 additions
and
0 deletions.
There are no files selected for viewing
104 changes: 104 additions & 0 deletions
104
dev-python/python-dateutil/files/0001-zoneinfo-Get-timezone-data-from-system-tzdata.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
From f48e70ae846c161dfbfe6ddb36e4bcad4427ac8c Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <[email protected]> | ||
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 | ||
|
49 changes: 49 additions & 0 deletions
49
dev-python/python-dateutil/python-dateutil-2.7.2-r1.ebuild
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# Copyright 1999-2018 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=6 | ||
|
||
PYTHON_COMPAT=( python2_7 python3_{4,5,6} pypy pypy3 ) | ||
|
||
inherit distutils-r1 | ||
|
||
DESCRIPTION="Extensions to the standard Python datetime module" | ||
HOMEPAGE=" | ||
https://dateutil.readthedocs.org/ | ||
https://pypi.org/project/python-dateutil | ||
https://github.com/dateutil/dateutil/ | ||
" | ||
SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" | ||
|
||
LICENSE="BSD" | ||
SLOT="0" | ||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos" | ||
IUSE="test" | ||
|
||
RDEPEND=" | ||
>=dev-python/six-1.5[${PYTHON_USEDEP}] | ||
sys-libs/timezone-data | ||
" | ||
DEPEND="${RDEPEND} | ||
dev-python/setuptools_scm[${PYTHON_USEDEP}] | ||
dev-python/setuptools[${PYTHON_USEDEP}] | ||
test? ( | ||
dev-python/pytest[${PYTHON_USEDEP}] | ||
dev-python/freezegun[${PYTHON_USEDEP}] | ||
) | ||
" | ||
|
||
python_prepare_all() { | ||
local PATCHES=( | ||
"${FILESDIR}"/0001-zoneinfo-Get-timezone-data-from-system-tzdata.patch | ||
) | ||
|
||
# don't install zoneinfo tarball | ||
sed -i '/package_data=/d' setup.py || die | ||
|
||
distutils-r1_python_prepare_all | ||
} | ||
|
||
python_test() { | ||
py.test -v || die "Tests failed under ${EPYTHON}" | ||
} |