aboutsummaryrefslogtreecommitdiff
path: root/updatezinfo.py
diff options
context:
space:
mode:
authorPaul Ganssle <paul@ganssle.io>2016-02-20 10:22:46 -0500
committerPaul Ganssle <paul@ganssle.io>2016-02-20 10:23:16 -0500
commit9271514ebfcaf76fd79c1cb7477a6842a57bbe32 (patch)
treebc6b4adaa38473bfda40b2cee4dc786a0fb55205 /updatezinfo.py
parent51bdf812bb3f8b5530f742fbf1d0ff93b4cfbc14 (diff)
downloaddateutil-9271514ebfcaf76fd79c1cb7477a6842a57bbe32.tar.gz
Bump metadata version to 2.0, add support for tzdata mirrors.
Diffstat (limited to 'updatezinfo.py')
-rw-r--r--updatezinfo.py28
1 files changed, 24 insertions, 4 deletions
diff --git a/updatezinfo.py b/updatezinfo.py
index 591118e..e767366 100644
--- a/updatezinfo.py
+++ b/updatezinfo.py
@@ -5,6 +5,7 @@ import json
import io
from six.moves.urllib import request
+from six.moves.urllib import error as urllib_error
from dateutil.zoneinfo import rebuild
@@ -15,11 +16,30 @@ def main():
with io.open(METADATA_FILE, 'r') as f:
metadata = json.load(f)
+ releases_urls = metadata['releases_url']
+ if metadata['metadata_version'] < 2.0:
+ # In later versions the releases URL is a mirror URL
+ releases_urls = [releases_urls]
+
if not os.path.isfile(metadata['tzdata_file']):
- print("Downloading tz file from iana")
- request.urlretrieve(os.path.join(metadata['releases_url'],
- metadata['tzdata_file']),
- metadata['tzdata_file'])
+
+ for ii, releases_url in enumerate(releases_urls):
+ print("Downloading tz file from mirror {ii}".format(ii=ii))
+ try:
+ request.urlretrieve(os.path.join(releases_url,
+ metadata['tzdata_file']),
+ metadata['tzdata_file'])
+ except urllib_error.URLError as e:
+ print("Download failed, trying next mirror.")
+ last_error = e
+ continue
+
+ last_error = None
+ break
+
+ if last_error is not None:
+ raise last_error
+
with open(metadata['tzdata_file'], 'rb') as tzfile:
sha_hasher = hashlib.sha512()
sha_hasher.update(tzfile.read())