"
@@ -616,6 +619,7 @@ def _test():
'America/Coral_Harbour',
'America/Cordoba',
'America/Costa_Rica',
+ 'America/Creston',
'America/Cuiaba',
'America/Curacao',
'America/Danmarkshavn',
@@ -1187,6 +1191,7 @@ def _test():
'America/Chicago',
'America/Chihuahua',
'America/Costa_Rica',
+ 'America/Creston',
'America/Cuiaba',
'America/Curacao',
'America/Danmarkshavn',
diff --git a/lib/pytz/tests/test_tzinfo.py b/lib/pytz/tests/test_tzinfo.py
index d8e5ddf33397..24abb91ee844 100644
--- a/lib/pytz/tests/test_tzinfo.py
+++ b/lib/pytz/tests/test_tzinfo.py
@@ -17,11 +17,11 @@
import pytz
from pytz import reference
from pytz.tzfile import _byte_string
-from pytz.tzinfo import StaticTzInfo
+from pytz.tzinfo import DstTzInfo, StaticTzInfo
# I test for expected version to ensure the correct version of pytz is
# actually being tested.
-EXPECTED_VERSION='2011k'
+EXPECTED_VERSION='2012d'
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
@@ -533,6 +533,24 @@ class TahitiTestCase(USEasternDSTStartTestCase):
}
+class SamoaInternationalDateLineChange(USEasternDSTStartTestCase):
+ # At the end of 2011, Samoa will switch from being east of the
+ # international dateline to the west. There will be no Dec 30th
+ # 2011 and it will switch from UTC-10 to UTC+14.
+ tzinfo = pytz.timezone('Pacific/Apia')
+ transition_time = datetime(2011, 12, 30, 10, 0, 0, tzinfo=UTC)
+ before = {
+ 'tzname': 'WSDT',
+ 'utcoffset': timedelta(hours=-10),
+ 'dst': timedelta(hours=1),
+ }
+ after = {
+ 'tzname': 'WSDT',
+ 'utcoffset': timedelta(hours=14),
+ 'dst': timedelta(hours=1),
+ }
+
+
class ReferenceUSEasternDSTStartTestCase(USEasternDSTStartTestCase):
tzinfo = reference.Eastern
def test_arithmetic(self):
@@ -701,6 +719,85 @@ def test_belfast(self):
self.assertFalse('Europe/Belfast' in pytz.common_timezones_set)
+class BaseTzInfoTestCase:
+ '''Ensure UTC, StaticTzInfo and DstTzInfo work consistently.
+
+ These tests are run for each type of tzinfo.
+ '''
+ tz = None # override
+ tz_class = None # override
+
+ def test_expectedclass(self):
+ self.assertTrue(isinstance(self.tz, self.tz_class))
+
+ def test_fromutc(self):
+ # naive datetime.
+ dt1 = datetime(2011, 10, 31)
+
+ # localized datetime, same timezone.
+ dt2 = self.tz.localize(dt1)
+
+ # Both should give the same results. Note that the standard
+ # Python tzinfo.fromutc() only supports the second.
+ for dt in [dt1, dt2]:
+ loc_dt = self.tz.fromutc(dt)
+ loc_dt2 = pytz.utc.localize(dt1).astimezone(self.tz)
+ self.assertEqual(loc_dt, loc_dt2)
+
+ # localized datetime, different timezone.
+ new_tz = pytz.timezone('Europe/Paris')
+ self.assertTrue(self.tz is not new_tz)
+ dt3 = new_tz.localize(dt1)
+ self.assertRaises(ValueError, self.tz.fromutc, dt3)
+
+ def test_normalize(self):
+ other_tz = pytz.timezone('Europe/Paris')
+ self.assertTrue(self.tz is not other_tz)
+
+ dt = datetime(2012, 3, 26, 12, 0)
+ other_dt = other_tz.localize(dt)
+
+ local_dt = self.tz.normalize(other_dt)
+
+ self.assertTrue(local_dt.tzinfo is not other_dt.tzinfo)
+ self.assertNotEqual(
+ local_dt.replace(tzinfo=None), other_dt.replace(tzinfo=None))
+
+ def test_astimezone(self):
+ other_tz = pytz.timezone('Europe/Paris')
+ self.assertTrue(self.tz is not other_tz)
+
+ dt = datetime(2012, 3, 26, 12, 0)
+ other_dt = other_tz.localize(dt)
+
+ local_dt = other_dt.astimezone(self.tz)
+
+ self.assertTrue(local_dt.tzinfo is not other_dt.tzinfo)
+ self.assertNotEqual(
+ local_dt.replace(tzinfo=None), other_dt.replace(tzinfo=None))
+
+
+class OptimizedUTCTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ tz = pytz.utc
+ tz_class = tz.__class__
+
+
+class LegacyUTCTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ # Deprecated timezone, but useful for comparison tests.
+ tz = pytz.timezone('Etc/UTC')
+ tz_class = StaticTzInfo
+
+
+class StaticTzInfoTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ tz = pytz.timezone('GMT')
+ tz_class = StaticTzInfo
+
+
+class DstTzInfoTestCase(unittest.TestCase, BaseTzInfoTestCase):
+ tz = pytz.timezone('Australia/Melbourne')
+ tz_class = DstTzInfo
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite('pytz'))
diff --git a/lib/pytz/tzfile.py b/lib/pytz/tzfile.py
index 05944daf22e0..9c007c80995a 100644
--- a/lib/pytz/tzfile.py
+++ b/lib/pytz/tzfile.py
@@ -97,7 +97,9 @@ def build_tzinfo(zone, fp):
break
dst = inf[0] - prev_inf[0] # dst offset
- if dst <= 0: # Bad dst? Look further.
+ # Bad dst? Look further. DST > 24 hours happens when
+ # a timzone has moved across the international dateline.
+ if dst <= 0 or dst > 3600*3:
for j in range(i+1, len(transitions)):
stdinf = ttinfo[lindexes[j]]
if not stdinf[1]:
diff --git a/lib/pytz/tzinfo.py b/lib/pytz/tzinfo.py
index 1bb57c250039..a1e43cdf0c01 100644
--- a/lib/pytz/tzinfo.py
+++ b/lib/pytz/tzinfo.py
@@ -74,6 +74,8 @@ class StaticTzInfo(BaseTzInfo):
'''
def fromutc(self, dt):
'''See datetime.tzinfo.fromutc'''
+ if dt.tzinfo is not None and dt.tzinfo is not self:
+ raise ValueError('fromutc: dt.tzinfo is not self')
return (dt + self._utcoffset).replace(tzinfo=self)
def utcoffset(self, dt, is_dst=None):
@@ -176,6 +178,9 @@ def __init__(self, _inf=None, _tzinfos=None):
def fromutc(self, dt):
'''See datetime.tzinfo.fromutc'''
+ if (dt.tzinfo is not None
+ and getattr(dt.tzinfo, '_tzinfos', None) is not self._tzinfos):
+ raise ValueError('fromutc: dt.tzinfo is not self')
dt = dt.replace(tzinfo=None)
idx = max(0, bisect_right(self._utc_transition_times, dt) - 1)
inf = self._transition_info[idx]
diff --git a/lib/pytz/zoneinfo/Africa/Casablanca b/lib/pytz/zoneinfo/Africa/Casablanca
index 77b88cffa389..d3d6da917d16 100644
Binary files a/lib/pytz/zoneinfo/Africa/Casablanca and b/lib/pytz/zoneinfo/Africa/Casablanca differ
diff --git a/lib/pytz/zoneinfo/America/Atikokan b/lib/pytz/zoneinfo/America/Atikokan
index c63a32a2a171..1b49e37c943b 100644
Binary files a/lib/pytz/zoneinfo/America/Atikokan and b/lib/pytz/zoneinfo/America/Atikokan differ
diff --git a/lib/pytz/zoneinfo/America/Bahia b/lib/pytz/zoneinfo/America/Bahia
index 34b2d7a304b9..9735a14a6eab 100644
Binary files a/lib/pytz/zoneinfo/America/Bahia and b/lib/pytz/zoneinfo/America/Bahia differ
diff --git a/lib/pytz/zoneinfo/America/Blanc-Sablon b/lib/pytz/zoneinfo/America/Blanc-Sablon
index 8526259c7a5a..8a33789afcbb 100644
Binary files a/lib/pytz/zoneinfo/America/Blanc-Sablon and b/lib/pytz/zoneinfo/America/Blanc-Sablon differ
diff --git a/lib/pytz/zoneinfo/America/Coral_Harbour b/lib/pytz/zoneinfo/America/Coral_Harbour
index c63a32a2a171..1b49e37c943b 100644
Binary files a/lib/pytz/zoneinfo/America/Coral_Harbour and b/lib/pytz/zoneinfo/America/Coral_Harbour differ
diff --git a/lib/pytz/zoneinfo/America/Creston b/lib/pytz/zoneinfo/America/Creston
new file mode 100644
index 000000000000..1cf719ae8374
Binary files /dev/null and b/lib/pytz/zoneinfo/America/Creston differ
diff --git a/lib/pytz/zoneinfo/America/Dawson_Creek b/lib/pytz/zoneinfo/America/Dawson_Creek
index 01ed5354f840..c3fb166b0887 100644
Binary files a/lib/pytz/zoneinfo/America/Dawson_Creek and b/lib/pytz/zoneinfo/America/Dawson_Creek differ
diff --git a/lib/pytz/zoneinfo/America/Edmonton b/lib/pytz/zoneinfo/America/Edmonton
index ba6dbb46cfab..3fa0579891a9 100644
Binary files a/lib/pytz/zoneinfo/America/Edmonton and b/lib/pytz/zoneinfo/America/Edmonton differ
diff --git a/lib/pytz/zoneinfo/America/Glace_Bay b/lib/pytz/zoneinfo/America/Glace_Bay
index 199f0b030447..48412a4cbf92 100644
Binary files a/lib/pytz/zoneinfo/America/Glace_Bay and b/lib/pytz/zoneinfo/America/Glace_Bay differ
diff --git a/lib/pytz/zoneinfo/America/Goose_Bay b/lib/pytz/zoneinfo/America/Goose_Bay
index f2a981849d1d..83e5a9b398fd 100644
Binary files a/lib/pytz/zoneinfo/America/Goose_Bay and b/lib/pytz/zoneinfo/America/Goose_Bay differ
diff --git a/lib/pytz/zoneinfo/America/Halifax b/lib/pytz/zoneinfo/America/Halifax
index b98c3a77340f..756099abe6ce 100644
Binary files a/lib/pytz/zoneinfo/America/Halifax and b/lib/pytz/zoneinfo/America/Halifax differ
diff --git a/lib/pytz/zoneinfo/America/Havana b/lib/pytz/zoneinfo/America/Havana
index b519c0947008..96eaf81ee9e4 100644
Binary files a/lib/pytz/zoneinfo/America/Havana and b/lib/pytz/zoneinfo/America/Havana differ
diff --git a/lib/pytz/zoneinfo/America/Moncton b/lib/pytz/zoneinfo/America/Moncton
index 33125756544b..b51125ebf112 100644
Binary files a/lib/pytz/zoneinfo/America/Moncton and b/lib/pytz/zoneinfo/America/Moncton differ
diff --git a/lib/pytz/zoneinfo/America/Montreal b/lib/pytz/zoneinfo/America/Montreal
index 0ddffb2f299a..47633bd49f89 100644
Binary files a/lib/pytz/zoneinfo/America/Montreal and b/lib/pytz/zoneinfo/America/Montreal differ
diff --git a/lib/pytz/zoneinfo/America/Nipigon b/lib/pytz/zoneinfo/America/Nipigon
index fced633dcae5..619f1f75905e 100644
Binary files a/lib/pytz/zoneinfo/America/Nipigon and b/lib/pytz/zoneinfo/America/Nipigon differ
diff --git a/lib/pytz/zoneinfo/America/Port-au-Prince b/lib/pytz/zoneinfo/America/Port-au-Prince
index cd104790f9cd..189fd5252cf4 100644
Binary files a/lib/pytz/zoneinfo/America/Port-au-Prince and b/lib/pytz/zoneinfo/America/Port-au-Prince differ
diff --git a/lib/pytz/zoneinfo/America/Rainy_River b/lib/pytz/zoneinfo/America/Rainy_River
index a5288ed9e075..e006a30dbf35 100644
Binary files a/lib/pytz/zoneinfo/America/Rainy_River and b/lib/pytz/zoneinfo/America/Rainy_River differ
diff --git a/lib/pytz/zoneinfo/America/Regina b/lib/pytz/zoneinfo/America/Regina
index fa9c6eec2fcd..20c9c84df491 100644
Binary files a/lib/pytz/zoneinfo/America/Regina and b/lib/pytz/zoneinfo/America/Regina differ
diff --git a/lib/pytz/zoneinfo/America/Santiago b/lib/pytz/zoneinfo/America/Santiago
index a8cafe6a8899..de74ddf1a095 100644
Binary files a/lib/pytz/zoneinfo/America/Santiago and b/lib/pytz/zoneinfo/America/Santiago differ
diff --git a/lib/pytz/zoneinfo/America/Sitka b/lib/pytz/zoneinfo/America/Sitka
index d2f43a2fd50b..f2ae47a323e7 100644
Binary files a/lib/pytz/zoneinfo/America/Sitka and b/lib/pytz/zoneinfo/America/Sitka differ
diff --git a/lib/pytz/zoneinfo/America/St_Johns b/lib/pytz/zoneinfo/America/St_Johns
index 27416c379732..e7a18d601d02 100644
Binary files a/lib/pytz/zoneinfo/America/St_Johns and b/lib/pytz/zoneinfo/America/St_Johns differ
diff --git a/lib/pytz/zoneinfo/America/Swift_Current b/lib/pytz/zoneinfo/America/Swift_Current
index 8224028413ef..8e9ef255eeb1 100644
Binary files a/lib/pytz/zoneinfo/America/Swift_Current and b/lib/pytz/zoneinfo/America/Swift_Current differ
diff --git a/lib/pytz/zoneinfo/America/Toronto b/lib/pytz/zoneinfo/America/Toronto
index b126bc641119..1698477a4877 100644
Binary files a/lib/pytz/zoneinfo/America/Toronto and b/lib/pytz/zoneinfo/America/Toronto differ
diff --git a/lib/pytz/zoneinfo/America/Vancouver b/lib/pytz/zoneinfo/America/Vancouver
index b69358c4502e..0c1fa5269049 100644
Binary files a/lib/pytz/zoneinfo/America/Vancouver and b/lib/pytz/zoneinfo/America/Vancouver differ
diff --git a/lib/pytz/zoneinfo/America/Winnipeg b/lib/pytz/zoneinfo/America/Winnipeg
index 5f9e35c391b5..2d22791686e8 100644
Binary files a/lib/pytz/zoneinfo/America/Winnipeg and b/lib/pytz/zoneinfo/America/Winnipeg differ
diff --git a/lib/pytz/zoneinfo/Antarctica/Casey b/lib/pytz/zoneinfo/Antarctica/Casey
index 76d0794e9565..8ebf0598ff90 100644
Binary files a/lib/pytz/zoneinfo/Antarctica/Casey and b/lib/pytz/zoneinfo/Antarctica/Casey differ
diff --git a/lib/pytz/zoneinfo/Antarctica/Davis b/lib/pytz/zoneinfo/Antarctica/Davis
index d773c541275a..cd7acad690b6 100644
Binary files a/lib/pytz/zoneinfo/Antarctica/Davis and b/lib/pytz/zoneinfo/Antarctica/Davis differ
diff --git a/lib/pytz/zoneinfo/Antarctica/Palmer b/lib/pytz/zoneinfo/Antarctica/Palmer
index 614c9b97b40d..c51d91e64ccf 100644
Binary files a/lib/pytz/zoneinfo/Antarctica/Palmer and b/lib/pytz/zoneinfo/Antarctica/Palmer differ
diff --git a/lib/pytz/zoneinfo/Asia/Damascus b/lib/pytz/zoneinfo/Asia/Damascus
index d272a351040b..4b610b5a0836 100644
Binary files a/lib/pytz/zoneinfo/Asia/Damascus and b/lib/pytz/zoneinfo/Asia/Damascus differ
diff --git a/lib/pytz/zoneinfo/Asia/Gaza b/lib/pytz/zoneinfo/Asia/Gaza
index 063ed39e8d8c..6f1cabc29150 100644
Binary files a/lib/pytz/zoneinfo/Asia/Gaza and b/lib/pytz/zoneinfo/Asia/Gaza differ
diff --git a/lib/pytz/zoneinfo/Asia/Hebron b/lib/pytz/zoneinfo/Asia/Hebron
index 841779271fe0..a073e06ef72e 100644
Binary files a/lib/pytz/zoneinfo/Asia/Hebron and b/lib/pytz/zoneinfo/Asia/Hebron differ
diff --git a/lib/pytz/zoneinfo/Asia/Yerevan b/lib/pytz/zoneinfo/Asia/Yerevan
index 3b4fb193e331..c4ab2197f803 100644
Binary files a/lib/pytz/zoneinfo/Asia/Yerevan and b/lib/pytz/zoneinfo/Asia/Yerevan differ
diff --git a/lib/pytz/zoneinfo/Atlantic/Stanley b/lib/pytz/zoneinfo/Atlantic/Stanley
index d7da723f7ec8..34f9d022cd5a 100644
Binary files a/lib/pytz/zoneinfo/Atlantic/Stanley and b/lib/pytz/zoneinfo/Atlantic/Stanley differ
diff --git a/lib/pytz/zoneinfo/Canada/Atlantic b/lib/pytz/zoneinfo/Canada/Atlantic
index b98c3a77340f..756099abe6ce 100644
Binary files a/lib/pytz/zoneinfo/Canada/Atlantic and b/lib/pytz/zoneinfo/Canada/Atlantic differ
diff --git a/lib/pytz/zoneinfo/Canada/Central b/lib/pytz/zoneinfo/Canada/Central
index 5f9e35c391b5..2d22791686e8 100644
Binary files a/lib/pytz/zoneinfo/Canada/Central and b/lib/pytz/zoneinfo/Canada/Central differ
diff --git a/lib/pytz/zoneinfo/Canada/East-Saskatchewan b/lib/pytz/zoneinfo/Canada/East-Saskatchewan
index fa9c6eec2fcd..20c9c84df491 100644
Binary files a/lib/pytz/zoneinfo/Canada/East-Saskatchewan and b/lib/pytz/zoneinfo/Canada/East-Saskatchewan differ
diff --git a/lib/pytz/zoneinfo/Canada/Eastern b/lib/pytz/zoneinfo/Canada/Eastern
index b126bc641119..1698477a4877 100644
Binary files a/lib/pytz/zoneinfo/Canada/Eastern and b/lib/pytz/zoneinfo/Canada/Eastern differ
diff --git a/lib/pytz/zoneinfo/Canada/Mountain b/lib/pytz/zoneinfo/Canada/Mountain
index ba6dbb46cfab..3fa0579891a9 100644
Binary files a/lib/pytz/zoneinfo/Canada/Mountain and b/lib/pytz/zoneinfo/Canada/Mountain differ
diff --git a/lib/pytz/zoneinfo/Canada/Newfoundland b/lib/pytz/zoneinfo/Canada/Newfoundland
index 27416c379732..e7a18d601d02 100644
Binary files a/lib/pytz/zoneinfo/Canada/Newfoundland and b/lib/pytz/zoneinfo/Canada/Newfoundland differ
diff --git a/lib/pytz/zoneinfo/Canada/Pacific b/lib/pytz/zoneinfo/Canada/Pacific
index b69358c4502e..0c1fa5269049 100644
Binary files a/lib/pytz/zoneinfo/Canada/Pacific and b/lib/pytz/zoneinfo/Canada/Pacific differ
diff --git a/lib/pytz/zoneinfo/Canada/Saskatchewan b/lib/pytz/zoneinfo/Canada/Saskatchewan
index fa9c6eec2fcd..20c9c84df491 100644
Binary files a/lib/pytz/zoneinfo/Canada/Saskatchewan and b/lib/pytz/zoneinfo/Canada/Saskatchewan differ
diff --git a/lib/pytz/zoneinfo/Chile/Continental b/lib/pytz/zoneinfo/Chile/Continental
index a8cafe6a8899..de74ddf1a095 100644
Binary files a/lib/pytz/zoneinfo/Chile/Continental and b/lib/pytz/zoneinfo/Chile/Continental differ
diff --git a/lib/pytz/zoneinfo/Chile/EasterIsland b/lib/pytz/zoneinfo/Chile/EasterIsland
index 1f7bae5373b9..de6b8ff5839f 100644
Binary files a/lib/pytz/zoneinfo/Chile/EasterIsland and b/lib/pytz/zoneinfo/Chile/EasterIsland differ
diff --git a/lib/pytz/zoneinfo/Cuba b/lib/pytz/zoneinfo/Cuba
index b519c0947008..96eaf81ee9e4 100644
Binary files a/lib/pytz/zoneinfo/Cuba and b/lib/pytz/zoneinfo/Cuba differ
diff --git a/lib/pytz/zoneinfo/Europe/Kiev b/lib/pytz/zoneinfo/Europe/Kiev
index 1255e67fb6d1..075cc02fd893 100644
Binary files a/lib/pytz/zoneinfo/Europe/Kiev and b/lib/pytz/zoneinfo/Europe/Kiev differ
diff --git a/lib/pytz/zoneinfo/Europe/Simferopol b/lib/pytz/zoneinfo/Europe/Simferopol
index 08efa510178f..ebb63b4450b0 100644
Binary files a/lib/pytz/zoneinfo/Europe/Simferopol and b/lib/pytz/zoneinfo/Europe/Simferopol differ
diff --git a/lib/pytz/zoneinfo/Europe/Uzhgorod b/lib/pytz/zoneinfo/Europe/Uzhgorod
index 00584c1fca22..7032ab9b34f9 100644
Binary files a/lib/pytz/zoneinfo/Europe/Uzhgorod and b/lib/pytz/zoneinfo/Europe/Uzhgorod differ
diff --git a/lib/pytz/zoneinfo/Europe/Zaporozhye b/lib/pytz/zoneinfo/Europe/Zaporozhye
index 899fa88b6311..2ccf8998b24f 100644
Binary files a/lib/pytz/zoneinfo/Europe/Zaporozhye and b/lib/pytz/zoneinfo/Europe/Zaporozhye differ
diff --git a/lib/pytz/zoneinfo/Pacific/Easter b/lib/pytz/zoneinfo/Pacific/Easter
index 1f7bae5373b9..de6b8ff5839f 100644
Binary files a/lib/pytz/zoneinfo/Pacific/Easter and b/lib/pytz/zoneinfo/Pacific/Easter differ
diff --git a/lib/pytz/zoneinfo/Pacific/Fakaofo b/lib/pytz/zoneinfo/Pacific/Fakaofo
index b3991ee56dee..2a4e7afa5ea5 100644
Binary files a/lib/pytz/zoneinfo/Pacific/Fakaofo and b/lib/pytz/zoneinfo/Pacific/Fakaofo differ
diff --git a/lib/pytz/zoneinfo/Pacific/Fiji b/lib/pytz/zoneinfo/Pacific/Fiji
index b2f6cac9c242..797842aa3e1e 100644
Binary files a/lib/pytz/zoneinfo/Pacific/Fiji and b/lib/pytz/zoneinfo/Pacific/Fiji differ
diff --git a/lib/pytz/zoneinfo/iso3166.tab b/lib/pytz/zoneinfo/iso3166.tab
index 950c40f1db66..b952ca1c5900 100644
--- a/lib/pytz/zoneinfo/iso3166.tab
+++ b/lib/pytz/zoneinfo/iso3166.tab
@@ -1,5 +1,4 @@
#
-# @(#)iso3166.tab 8.11
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
# ISO 3166 alpha-2 country codes
diff --git a/lib/pytz/zoneinfo/zone.tab b/lib/pytz/zoneinfo/zone.tab
index f197b948dd97..6bda8266ba97 100644
--- a/lib/pytz/zoneinfo/zone.tab
+++ b/lib/pytz/zoneinfo/zone.tab
@@ -1,5 +1,4 @@
#
-# @(#)zone.tab 8.49
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
#
@@ -131,6 +130,7 @@ CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia &
CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
+CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
@@ -333,7 +333,7 @@ RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow - Samara, Udmurtia
+RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
diff --git a/setup.py b/setup.py
index 62a8888d4fab..6340514b5619 100644
--- a/setup.py
+++ b/setup.py
@@ -48,7 +48,7 @@
check_for_qt, check_for_qt4, check_for_pyside, check_for_cairo, \
check_provide_pytz, check_provide_dateutil,\
check_for_dvipng, check_for_ghostscript, check_for_latex, \
- check_for_pdftops, check_for_datetime, options, build_png, build_tri
+ check_for_pdftops, options, build_png, build_tri
# jdh
packages = [
@@ -108,6 +108,8 @@
'backends/Matplotlib.nib/*',
]}
+package_dir = {'': 'lib'}
+
if 1:
# TODO: exclude these when making release?
baseline_images = glob.glob(os.path.join('lib','matplotlib','tests',
@@ -187,46 +189,46 @@ def chop_package(fname):
print_raw("")
print_raw("OPTIONAL DATE/TIMEZONE DEPENDENCIES")
-hasdatetime = check_for_datetime()
-provide_dateutil = check_provide_dateutil(hasdatetime)
-provide_pytz = check_provide_pytz(hasdatetime)
-
-if hasdatetime: # dates require python23 datetime
- # only install pytz and dateutil if the user hasn't got them
-
- def add_pytz():
- packages.append('pytz')
-
- resources = ['zone.tab', 'locales/pytz.pot']
- for dirpath, dirnames, filenames in os.walk(
- os.path.join('lib', 'pytz', 'zoneinfo')
- ):
-
- # remove the 'pytz' part of the path
- basepath = os.path.join(*dirpath.split(os.path.sep)[2:])
- #print dirpath, basepath
- resources.extend([os.path.join(basepath, filename)
- for filename in filenames])
- package_data['pytz'] = resources
- #print resources
- assert len(resources) > 10, 'zoneinfo files not found!'
-
-
- def add_dateutil():
- packages.append('dateutil')
- packages.append('dateutil.zoneinfo')
- package_data['dateutil'] = ['zoneinfo/zoneinfo*.tar.*']
+provide_dateutil = check_provide_dateutil()
+provide_pytz = check_provide_pytz()
+
+def add_pytz():
+ packages.append('pytz')
+
+ resources = ['zone.tab', 'locales/pytz.pot']
+ for dirpath, dirnames, filenames in os.walk(
+ os.path.join('lib', 'pytz', 'zoneinfo')
+ ):
+
+ # remove the 'pytz' part of the path
+ basepath = os.path.join(*dirpath.split(os.path.sep)[2:])
+ #print dirpath, basepath
+ resources.extend([os.path.join(basepath, filename)
+ for filename in filenames])
+ package_data['pytz'] = resources
+ #print resources
+ assert len(resources) > 10, 'zoneinfo files not found!'
+
+def add_dateutil():
+ packages.append('dateutil')
+ packages.append('dateutil.zoneinfo')
+ package_data['dateutil'] = ['zoneinfo/zoneinfo*.tar.*']
+ if sys.version_info[0] >= 3:
+ package_dir['dateutil'] = 'lib/dateutil_py3'
+ else:
+ package_dir['dateutil'] = 'lib/dateutil_py2'
- if sys.platform=='win32':
- # always add these to the win32 installer
+if sys.platform=='win32':
+ # always add these to the win32 installer
+ add_pytz()
+ add_dateutil()
+else:
+ # only add them if we need them
+ if provide_pytz:
add_pytz()
+ print_raw("adding pytz")
+ if provide_dateutil:
add_dateutil()
- else:
- # only add them if we need them
- if provide_pytz:
- add_pytz()
- print_raw("adding pytz")
- if provide_dateutil: add_dateutil()
print_raw("")
print_raw("OPTIONAL USETEX DEPENDENCIES")
@@ -259,8 +261,15 @@ def add_dateutil():
mod.extra_compile_args.append('-DVERBOSE')
if sys.version_info[0] >= 3:
+ def should_2to3(file, root):
+ file = os.path.abspath(file)[len(os.path.abspath(root)):]
+ if ('py3' in file or
+ file.startswith('pytz') or
+ file.startswith('dateutil')):
+ return False
+ return True
+
import multiprocessing
- from distutils import util
def refactor(x):
from lib2to3.refactor import RefactoringTool, get_fixers_from_package
class DistutilsRefactoringTool(RefactoringTool):
@@ -276,7 +285,7 @@ class build_py(original_build_py):
def run_2to3(self, files):
# We need to skip certain files that have already been
# converted to Python 3.x
- filtered = [x for x in files if 'py3' not in x]
+ filtered = [x for x in files if should_2to3(x, self.build_lib)]
if sys.platform.startswith('win'):
# doing this in parallel on windows may crash your computer
[refactor(f) for f in filtered]
@@ -306,7 +315,7 @@ def run_2to3(self, files):
platforms='any',
py_modules = py_modules,
ext_modules = ext_modules,
- package_dir = {'': 'lib'},
+ package_dir = package_dir,
package_data = package_data,
cmdclass = {'build_py': build_py},
**additional_params
diff --git a/setupext.py b/setupext.py
index 7dc1e2a9285b..b5d8c0c7d200 100644
--- a/setupext.py
+++ b/setupext.py
@@ -431,24 +431,14 @@ def check_for_cairo():
print_status("Cairo", cairo.version)
return True
-def check_for_datetime():
- try:
- import datetime
- except ImportError:
- print_status("datetime", "no")
- return False
- else:
- print_status("datetime", "present, version unknown")
- return True
-
-def check_provide_pytz(hasdatetime=True):
- if hasdatetime and (options['provide_pytz'] is True):
+def check_provide_pytz():
+ if options['provide_pytz'] is True:
print_status("pytz", "matplotlib will provide")
return True
try:
import pytz
except ImportError:
- if hasdatetime and options['provide_pytz']:
+ if options['provide_pytz']:
print_status("pytz", "matplotlib will provide")
return True
else:
@@ -462,14 +452,14 @@ def check_provide_pytz(hasdatetime=True):
print_status("pytz", pytz.__version__)
return False
-def check_provide_dateutil(hasdatetime=True):
- if hasdatetime and (options['provide_dateutil'] is True):
+def check_provide_dateutil():
+ if options['provide_dateutil'] is True:
print_status("dateutil", "matplotlib will provide")
return True
try:
import dateutil
except ImportError:
- if hasdatetime and options['provide_dateutil']:
+ if options['provide_dateutil']:
print_status("dateutil", "matplotlib will provide")
return True
else: