Bump metadata version to 2.0, add support for tzdata mirrors.
diff --git a/updatezinfo.py b/updatezinfo.py
index 591118e..e767366 100644
--- a/updatezinfo.py
+++ b/updatezinfo.py
@@ -5,6 +5,7 @@
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 @@
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())