diff options
author | Paul Ganssle <paul@ganssle.io> | 2016-02-20 10:22:46 -0500 |
---|---|---|
committer | Paul Ganssle <paul@ganssle.io> | 2016-02-20 10:23:16 -0500 |
commit | 9271514ebfcaf76fd79c1cb7477a6842a57bbe32 (patch) | |
tree | bc6b4adaa38473bfda40b2cee4dc786a0fb55205 /updatezinfo.py | |
parent | 51bdf812bb3f8b5530f742fbf1d0ff93b4cfbc14 (diff) | |
download | dateutil-9271514ebfcaf76fd79c1cb7477a6842a57bbe32.tar.gz |
Bump metadata version to 2.0, add support for tzdata mirrors.
Diffstat (limited to 'updatezinfo.py')
-rw-r--r-- | updatezinfo.py | 28 |
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()) |