diff --git a/wakatime/__init__.py b/wakatime/__init__.py index 301a22c..1158fc1 100644 --- a/wakatime/__init__.py +++ b/wakatime/__init__.py @@ -34,6 +34,7 @@ from .project import find_project from .stats import get_file_stats from .packages import argparse from .packages import simplejson as json +from .packages import tzlocal try: from urllib2 import HTTPError, Request, urlopen except ImportError: @@ -146,6 +147,12 @@ def send_action(project=None, branch=None, stats={}, key=None, targetFile=None, auth = 'Basic %s' % bytes.decode(base64.b64encode(str.encode(key))) request.add_header('Authorization', auth) + # add Olson timezone to request + tz = tzlocal.get_localzone() + if tz: + request.add_header('TimeZone', str(tz.zone)) + print(tz.zone) + # log time to api response = None try: diff --git a/wakatime/packages/pytz/__init__.py b/wakatime/packages/pytz/__init__.py new file mode 100644 index 0000000..08c2ff7 --- /dev/null +++ b/wakatime/packages/pytz/__init__.py @@ -0,0 +1,1512 @@ +''' +datetime.tzinfo timezone definitions generated from the +Olson timezone database: + + ftp://elsie.nci.nih.gov/pub/tz*.tar.gz + +See the datetime section of the Python Library Reference for information +on how to use these modules. +''' + +# The Olson database is updated several times a year. +OLSON_VERSION = '2013d' +VERSION = OLSON_VERSION +# Version format for a patch release - only one so far. +#VERSION = OLSON_VERSION + '.2' +__version__ = OLSON_VERSION + +OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling + +__all__ = [ + 'timezone', 'utc', 'country_timezones', 'country_names', + 'AmbiguousTimeError', 'InvalidTimeError', + 'NonExistentTimeError', 'UnknownTimeZoneError', + 'all_timezones', 'all_timezones_set', + 'common_timezones', 'common_timezones_set', + ] + +import sys, datetime, os.path, gettext + +try: + from pkg_resources import resource_stream +except ImportError: + resource_stream = None + +from pytz.exceptions import AmbiguousTimeError +from pytz.exceptions import InvalidTimeError +from pytz.exceptions import NonExistentTimeError +from pytz.exceptions import UnknownTimeZoneError +from pytz.lazy import LazyDict, LazyList, LazySet +from pytz.tzinfo import unpickler +from pytz.tzfile import build_tzinfo, _byte_string + + +try: + unicode + +except NameError: # Python 3.x + + # Python 3.x doesn't have unicode(), making writing code + # for Python 2.3 and Python 3.x a pain. + unicode = str + + def ascii(s): + r""" + >>> ascii('Hello') + 'Hello' + >>> ascii('\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL + Traceback (most recent call last): + ... + UnicodeEncodeError: ... + """ + s.encode('US-ASCII') # Raise an exception if not ASCII + return s # But return the original string - not a byte string. + +else: # Python 2.x + + def ascii(s): + r""" + >>> ascii('Hello') + 'Hello' + >>> ascii(u'Hello') + 'Hello' + >>> ascii(u'\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL + Traceback (most recent call last): + ... + UnicodeEncodeError: ... + """ + return s.encode('US-ASCII') + + +def open_resource(name): + """Open a resource from the zoneinfo subdir for reading. + + Uses the pkg_resources module if available and no standard file + found at the calculated location. + """ + name_parts = name.lstrip('/').split('/') + for part in name_parts: + if part == os.path.pardir or os.path.sep in part: + raise ValueError('Bad path segment: %r' % part) + filename = os.path.join(os.path.dirname(__file__), + 'zoneinfo', *name_parts) + if not os.path.exists(filename) and resource_stream is not None: + # http://bugs.launchpad.net/bugs/383171 - we avoid using this + # unless absolutely necessary to help when a broken version of + # pkg_resources is installed. + return resource_stream(__name__, 'zoneinfo/' + name) + return open(filename, 'rb') + + +def resource_exists(name): + """Return true if the given resource exists""" + try: + open_resource(name).close() + return True + except IOError: + return False + + +# Enable this when we get some translations? +# We want an i18n API that is useful to programs using Python's gettext +# module, as well as the Zope3 i18n package. Perhaps we should just provide +# the POT file and translations, and leave it up to callers to make use +# of them. +# +# t = gettext.translation( +# 'pytz', os.path.join(os.path.dirname(__file__), 'locales'), +# fallback=True +# ) +# def _(timezone_name): +# """Translate a timezone name using the current locale, returning Unicode""" +# return t.ugettext(timezone_name) + + +_tzinfo_cache = {} + +def timezone(zone): + r''' Return a datetime.tzinfo implementation for the given timezone + + >>> from datetime import datetime, timedelta + >>> utc = timezone('UTC') + >>> eastern = timezone('US/Eastern') + >>> eastern.zone + 'US/Eastern' + >>> timezone(unicode('US/Eastern')) is eastern + True + >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) + >>> loc_dt = utc_dt.astimezone(eastern) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> loc_dt.strftime(fmt) + '2002-10-27 01:00:00 EST (-0500)' + >>> (loc_dt - timedelta(minutes=10)).strftime(fmt) + '2002-10-27 00:50:00 EST (-0500)' + >>> eastern.normalize(loc_dt - timedelta(minutes=10)).strftime(fmt) + '2002-10-27 01:50:00 EDT (-0400)' + >>> (loc_dt + timedelta(minutes=10)).strftime(fmt) + '2002-10-27 01:10:00 EST (-0500)' + + Raises UnknownTimeZoneError if passed an unknown zone. + + >>> try: + ... timezone('Asia/Shangri-La') + ... except UnknownTimeZoneError: + ... print('Unknown') + Unknown + + >>> try: + ... timezone(unicode('\N{TRADE MARK SIGN}')) + ... except UnknownTimeZoneError: + ... print('Unknown') + Unknown + + ''' + if zone.upper() == 'UTC': + return utc + + try: + zone = ascii(zone) + except UnicodeEncodeError: + # All valid timezones are ASCII + raise UnknownTimeZoneError(zone) + + zone = _unmunge_zone(zone) + if zone not in _tzinfo_cache: + if zone in all_timezones_set: + fp = open_resource(zone) + try: + _tzinfo_cache[zone] = build_tzinfo(zone, fp) + finally: + fp.close() + else: + raise UnknownTimeZoneError(zone) + + return _tzinfo_cache[zone] + + +def _unmunge_zone(zone): + """Undo the time zone name munging done by older versions of pytz.""" + return zone.replace('_plus_', '+').replace('_minus_', '-') + + +ZERO = datetime.timedelta(0) +HOUR = datetime.timedelta(hours=1) + + +class UTC(datetime.tzinfo): + """UTC + + Optimized UTC implementation. It unpickles using the single module global + instance defined beneath this class declaration. + """ + zone = "UTC" + + _utcoffset = ZERO + _dst = ZERO + _tzname = zone + + def fromutc(self, dt): + if dt.tzinfo is None: + return self.localize(dt) + return super(utc.__class__, self).fromutc(dt) + + def utcoffset(self, dt): + return ZERO + + def tzname(self, dt): + return "UTC" + + def dst(self, dt): + return ZERO + + def __reduce__(self): + return _UTC, () + + def localize(self, dt, is_dst=False): + '''Convert naive time to local time''' + if dt.tzinfo is not None: + raise ValueError('Not naive datetime (tzinfo is already set)') + return dt.replace(tzinfo=self) + + def normalize(self, dt, is_dst=False): + '''Correct the timezone information on the given datetime''' + if dt.tzinfo is self: + return dt + if dt.tzinfo is None: + raise ValueError('Naive time - no tzinfo set') + return dt.astimezone(self) + + def __repr__(self): + return "" + + def __str__(self): + return "UTC" + + +UTC = utc = UTC() # UTC is a singleton + + +def _UTC(): + """Factory function for utc unpickling. + + Makes sure that unpickling a utc instance always returns the same + module global. + + These examples belong in the UTC class above, but it is obscured; or in + the README.txt, but we are not depending on Python 2.4 so integrating + the README.txt examples with the unit tests is not trivial. + + >>> import datetime, pickle + >>> dt = datetime.datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc) + >>> naive = dt.replace(tzinfo=None) + >>> p = pickle.dumps(dt, 1) + >>> naive_p = pickle.dumps(naive, 1) + >>> len(p) - len(naive_p) + 17 + >>> new = pickle.loads(p) + >>> new == dt + True + >>> new is dt + False + >>> new.tzinfo is dt.tzinfo + True + >>> utc is UTC is timezone('UTC') + True + >>> utc is timezone('GMT') + False + """ + return utc +_UTC.__safe_for_unpickling__ = True + + +def _p(*args): + """Factory function for unpickling pytz tzinfo instances. + + Just a wrapper around tzinfo.unpickler to save a few bytes in each pickle + by shortening the path. + """ + return unpickler(*args) +_p.__safe_for_unpickling__ = True + + + +class _CountryTimezoneDict(LazyDict): + """Map ISO 3166 country code to a list of timezone names commonly used + in that country. + + iso3166_code is the two letter code used to identify the country. + + >>> def print_list(list_of_strings): + ... 'We use a helper so doctests work under Python 2.3 -> 3.x' + ... for s in list_of_strings: + ... print(s) + + >>> print_list(country_timezones['nz']) + Pacific/Auckland + Pacific/Chatham + >>> print_list(country_timezones['ch']) + Europe/Zurich + >>> print_list(country_timezones['CH']) + Europe/Zurich + >>> print_list(country_timezones[unicode('ch')]) + Europe/Zurich + >>> print_list(country_timezones['XXX']) + Traceback (most recent call last): + ... + KeyError: 'XXX' + + Previously, this information was exposed as a function rather than a + dictionary. This is still supported:: + + >>> print_list(country_timezones('nz')) + Pacific/Auckland + Pacific/Chatham + """ + def __call__(self, iso3166_code): + """Backwards compatibility.""" + return self[iso3166_code] + + def _fill(self): + data = {} + zone_tab = open_resource('zone.tab') + try: + for line in zone_tab: + line = line.decode('US-ASCII') + if line.startswith('#'): + continue + code, coordinates, zone = line.split(None, 4)[:3] + if zone not in all_timezones_set: + continue + try: + data[code].append(zone) + except KeyError: + data[code] = [zone] + self.data = data + finally: + zone_tab.close() + +country_timezones = _CountryTimezoneDict() + + +class _CountryNameDict(LazyDict): + '''Dictionary proving ISO3166 code -> English name. + + >>> print(country_names['au']) + Australia + ''' + def _fill(self): + data = {} + zone_tab = open_resource('iso3166.tab') + try: + for line in zone_tab.readlines(): + line = line.decode('US-ASCII') + if line.startswith('#'): + continue + code, name = line.split(None, 1) + data[code] = name.strip() + self.data = data + finally: + zone_tab.close() + +country_names = _CountryNameDict() + + +# Time-zone info based solely on fixed offsets + +class _FixedOffset(datetime.tzinfo): + + zone = None # to match the standard pytz API + + def __init__(self, minutes): + if abs(minutes) >= 1440: + raise ValueError("absolute offset is too large", minutes) + self._minutes = minutes + self._offset = datetime.timedelta(minutes=minutes) + + def utcoffset(self, dt): + return self._offset + + def __reduce__(self): + return FixedOffset, (self._minutes, ) + + def dst(self, dt): + return ZERO + + def tzname(self, dt): + return None + + def __repr__(self): + return 'pytz.FixedOffset(%d)' % self._minutes + + def localize(self, dt, is_dst=False): + '''Convert naive time to local time''' + if dt.tzinfo is not None: + raise ValueError('Not naive datetime (tzinfo is already set)') + return dt.replace(tzinfo=self) + + def normalize(self, dt, is_dst=False): + '''Correct the timezone information on the given datetime''' + if dt.tzinfo is None: + raise ValueError('Naive time - no tzinfo set') + return dt.replace(tzinfo=self) + + +def FixedOffset(offset, _tzinfos = {}): + """return a fixed-offset timezone based off a number of minutes. + + >>> one = FixedOffset(-330) + >>> one + pytz.FixedOffset(-330) + >>> one.utcoffset(datetime.datetime.now()) + datetime.timedelta(-1, 66600) + >>> one.dst(datetime.datetime.now()) + datetime.timedelta(0) + + >>> two = FixedOffset(1380) + >>> two + pytz.FixedOffset(1380) + >>> two.utcoffset(datetime.datetime.now()) + datetime.timedelta(0, 82800) + >>> two.dst(datetime.datetime.now()) + datetime.timedelta(0) + + The datetime.timedelta must be between the range of -1 and 1 day, + non-inclusive. + + >>> FixedOffset(1440) + Traceback (most recent call last): + ... + ValueError: ('absolute offset is too large', 1440) + + >>> FixedOffset(-1440) + Traceback (most recent call last): + ... + ValueError: ('absolute offset is too large', -1440) + + An offset of 0 is special-cased to return UTC. + + >>> FixedOffset(0) is UTC + True + + There should always be only one instance of a FixedOffset per timedelta. + This should be true for multiple creation calls. + + >>> FixedOffset(-330) is one + True + >>> FixedOffset(1380) is two + True + + It should also be true for pickling. + + >>> import pickle + >>> pickle.loads(pickle.dumps(one)) is one + True + >>> pickle.loads(pickle.dumps(two)) is two + True + """ + if offset == 0: + return UTC + + info = _tzinfos.get(offset) + if info is None: + # We haven't seen this one before. we need to save it. + + # Use setdefault to avoid a race condition and make sure we have + # only one + info = _tzinfos.setdefault(offset, _FixedOffset(offset)) + + return info + +FixedOffset.__safe_for_unpickling__ = True + + +def _test(): + import doctest, os, sys + sys.path.insert(0, os.pardir) + import pytz + return doctest.testmod(pytz) + +if __name__ == '__main__': + _test() + +all_timezones = \ +['Africa/Abidjan', + 'Africa/Accra', + 'Africa/Addis_Ababa', + 'Africa/Algiers', + 'Africa/Asmara', + 'Africa/Asmera', + 'Africa/Bamako', + 'Africa/Bangui', + 'Africa/Banjul', + 'Africa/Bissau', + 'Africa/Blantyre', + 'Africa/Brazzaville', + 'Africa/Bujumbura', + 'Africa/Cairo', + 'Africa/Casablanca', + 'Africa/Ceuta', + 'Africa/Conakry', + 'Africa/Dakar', + 'Africa/Dar_es_Salaam', + 'Africa/Djibouti', + 'Africa/Douala', + 'Africa/El_Aaiun', + 'Africa/Freetown', + 'Africa/Gaborone', + 'Africa/Harare', + 'Africa/Johannesburg', + 'Africa/Juba', + 'Africa/Kampala', + 'Africa/Khartoum', + 'Africa/Kigali', + 'Africa/Kinshasa', + 'Africa/Lagos', + 'Africa/Libreville', + 'Africa/Lome', + 'Africa/Luanda', + 'Africa/Lubumbashi', + 'Africa/Lusaka', + 'Africa/Malabo', + 'Africa/Maputo', + 'Africa/Maseru', + 'Africa/Mbabane', + 'Africa/Mogadishu', + 'Africa/Monrovia', + 'Africa/Nairobi', + 'Africa/Ndjamena', + 'Africa/Niamey', + 'Africa/Nouakchott', + 'Africa/Ouagadougou', + 'Africa/Porto-Novo', + 'Africa/Sao_Tome', + 'Africa/Timbuktu', + 'Africa/Tripoli', + 'Africa/Tunis', + 'Africa/Windhoek', + 'America/Adak', + 'America/Anchorage', + 'America/Anguilla', + 'America/Antigua', + 'America/Araguaina', + 'America/Argentina/Buenos_Aires', + 'America/Argentina/Catamarca', + 'America/Argentina/ComodRivadavia', + 'America/Argentina/Cordoba', + 'America/Argentina/Jujuy', + 'America/Argentina/La_Rioja', + 'America/Argentina/Mendoza', + 'America/Argentina/Rio_Gallegos', + 'America/Argentina/Salta', + 'America/Argentina/San_Juan', + 'America/Argentina/San_Luis', + 'America/Argentina/Tucuman', + 'America/Argentina/Ushuaia', + 'America/Aruba', + 'America/Asuncion', + 'America/Atikokan', + 'America/Atka', + 'America/Bahia', + 'America/Bahia_Banderas', + 'America/Barbados', + 'America/Belem', + 'America/Belize', + 'America/Blanc-Sablon', + 'America/Boa_Vista', + 'America/Bogota', + 'America/Boise', + 'America/Buenos_Aires', + 'America/Cambridge_Bay', + 'America/Campo_Grande', + 'America/Cancun', + 'America/Caracas', + 'America/Catamarca', + 'America/Cayenne', + 'America/Cayman', + 'America/Chicago', + 'America/Chihuahua', + 'America/Coral_Harbour', + 'America/Cordoba', + 'America/Costa_Rica', + 'America/Creston', + 'America/Cuiaba', + 'America/Curacao', + 'America/Danmarkshavn', + 'America/Dawson', + 'America/Dawson_Creek', + 'America/Denver', + 'America/Detroit', + 'America/Dominica', + 'America/Edmonton', + 'America/Eirunepe', + 'America/El_Salvador', + 'America/Ensenada', + 'America/Fort_Wayne', + 'America/Fortaleza', + 'America/Glace_Bay', + 'America/Godthab', + 'America/Goose_Bay', + 'America/Grand_Turk', + 'America/Grenada', + 'America/Guadeloupe', + 'America/Guatemala', + 'America/Guayaquil', + 'America/Guyana', + 'America/Halifax', + 'America/Havana', + 'America/Hermosillo', + 'America/Indiana/Indianapolis', + 'America/Indiana/Knox', + 'America/Indiana/Marengo', + 'America/Indiana/Petersburg', + 'America/Indiana/Tell_City', + 'America/Indiana/Vevay', + 'America/Indiana/Vincennes', + 'America/Indiana/Winamac', + 'America/Indianapolis', + 'America/Inuvik', + 'America/Iqaluit', + 'America/Jamaica', + 'America/Jujuy', + 'America/Juneau', + 'America/Kentucky/Louisville', + 'America/Kentucky/Monticello', + 'America/Knox_IN', + 'America/Kralendijk', + 'America/La_Paz', + 'America/Lima', + 'America/Los_Angeles', + 'America/Louisville', + 'America/Lower_Princes', + 'America/Maceio', + 'America/Managua', + 'America/Manaus', + 'America/Marigot', + 'America/Martinique', + 'America/Matamoros', + 'America/Mazatlan', + 'America/Mendoza', + 'America/Menominee', + 'America/Merida', + 'America/Metlakatla', + 'America/Mexico_City', + 'America/Miquelon', + 'America/Moncton', + 'America/Monterrey', + 'America/Montevideo', + 'America/Montreal', + 'America/Montserrat', + 'America/Nassau', + 'America/New_York', + 'America/Nipigon', + 'America/Nome', + 'America/Noronha', + 'America/North_Dakota/Beulah', + 'America/North_Dakota/Center', + 'America/North_Dakota/New_Salem', + 'America/Ojinaga', + 'America/Panama', + 'America/Pangnirtung', + 'America/Paramaribo', + 'America/Phoenix', + 'America/Port-au-Prince', + 'America/Port_of_Spain', + 'America/Porto_Acre', + 'America/Porto_Velho', + 'America/Puerto_Rico', + 'America/Rainy_River', + 'America/Rankin_Inlet', + 'America/Recife', + 'America/Regina', + 'America/Resolute', + 'America/Rio_Branco', + 'America/Rosario', + 'America/Santa_Isabel', + 'America/Santarem', + 'America/Santiago', + 'America/Santo_Domingo', + 'America/Sao_Paulo', + 'America/Scoresbysund', + 'America/Shiprock', + 'America/Sitka', + 'America/St_Barthelemy', + 'America/St_Johns', + 'America/St_Kitts', + 'America/St_Lucia', + 'America/St_Thomas', + 'America/St_Vincent', + 'America/Swift_Current', + 'America/Tegucigalpa', + 'America/Thule', + 'America/Thunder_Bay', + 'America/Tijuana', + 'America/Toronto', + 'America/Tortola', + 'America/Vancouver', + 'America/Virgin', + 'America/Whitehorse', + 'America/Winnipeg', + 'America/Yakutat', + 'America/Yellowknife', + 'Antarctica/Casey', + 'Antarctica/Davis', + 'Antarctica/DumontDUrville', + 'Antarctica/Macquarie', + 'Antarctica/Mawson', + 'Antarctica/McMurdo', + 'Antarctica/Palmer', + 'Antarctica/Rothera', + 'Antarctica/South_Pole', + 'Antarctica/Syowa', + 'Antarctica/Vostok', + 'Arctic/Longyearbyen', + 'Asia/Aden', + 'Asia/Almaty', + 'Asia/Amman', + 'Asia/Anadyr', + 'Asia/Aqtau', + 'Asia/Aqtobe', + 'Asia/Ashgabat', + 'Asia/Ashkhabad', + 'Asia/Baghdad', + 'Asia/Bahrain', + 'Asia/Baku', + 'Asia/Bangkok', + 'Asia/Beirut', + 'Asia/Bishkek', + 'Asia/Brunei', + 'Asia/Calcutta', + 'Asia/Choibalsan', + 'Asia/Chongqing', + 'Asia/Chungking', + 'Asia/Colombo', + 'Asia/Dacca', + 'Asia/Damascus', + 'Asia/Dhaka', + 'Asia/Dili', + 'Asia/Dubai', + 'Asia/Dushanbe', + 'Asia/Gaza', + 'Asia/Harbin', + 'Asia/Hebron', + 'Asia/Ho_Chi_Minh', + 'Asia/Hong_Kong', + 'Asia/Hovd', + 'Asia/Irkutsk', + 'Asia/Istanbul', + 'Asia/Jakarta', + 'Asia/Jayapura', + 'Asia/Jerusalem', + 'Asia/Kabul', + 'Asia/Kamchatka', + 'Asia/Karachi', + 'Asia/Kashgar', + 'Asia/Kathmandu', + 'Asia/Katmandu', + 'Asia/Khandyga', + 'Asia/Kolkata', + 'Asia/Krasnoyarsk', + 'Asia/Kuala_Lumpur', + 'Asia/Kuching', + 'Asia/Kuwait', + 'Asia/Macao', + 'Asia/Macau', + 'Asia/Magadan', + 'Asia/Makassar', + 'Asia/Manila', + 'Asia/Muscat', + 'Asia/Nicosia', + 'Asia/Novokuznetsk', + 'Asia/Novosibirsk', + 'Asia/Omsk', + 'Asia/Oral', + 'Asia/Phnom_Penh', + 'Asia/Pontianak', + 'Asia/Pyongyang', + 'Asia/Qatar', + 'Asia/Qyzylorda', + 'Asia/Rangoon', + 'Asia/Riyadh', + 'Asia/Saigon', + 'Asia/Sakhalin', + 'Asia/Samarkand', + 'Asia/Seoul', + 'Asia/Shanghai', + 'Asia/Singapore', + 'Asia/Taipei', + 'Asia/Tashkent', + 'Asia/Tbilisi', + 'Asia/Tehran', + 'Asia/Tel_Aviv', + 'Asia/Thimbu', + 'Asia/Thimphu', + 'Asia/Tokyo', + 'Asia/Ujung_Pandang', + 'Asia/Ulaanbaatar', + 'Asia/Ulan_Bator', + 'Asia/Urumqi', + 'Asia/Ust-Nera', + 'Asia/Vientiane', + 'Asia/Vladivostok', + 'Asia/Yakutsk', + 'Asia/Yekaterinburg', + 'Asia/Yerevan', + 'Atlantic/Azores', + 'Atlantic/Bermuda', + 'Atlantic/Canary', + 'Atlantic/Cape_Verde', + 'Atlantic/Faeroe', + 'Atlantic/Faroe', + 'Atlantic/Jan_Mayen', + 'Atlantic/Madeira', + 'Atlantic/Reykjavik', + 'Atlantic/South_Georgia', + 'Atlantic/St_Helena', + 'Atlantic/Stanley', + 'Australia/ACT', + 'Australia/Adelaide', + 'Australia/Brisbane', + 'Australia/Broken_Hill', + 'Australia/Canberra', + 'Australia/Currie', + 'Australia/Darwin', + 'Australia/Eucla', + 'Australia/Hobart', + 'Australia/LHI', + 'Australia/Lindeman', + 'Australia/Lord_Howe', + 'Australia/Melbourne', + 'Australia/NSW', + 'Australia/North', + 'Australia/Perth', + 'Australia/Queensland', + 'Australia/South', + 'Australia/Sydney', + 'Australia/Tasmania', + 'Australia/Victoria', + 'Australia/West', + 'Australia/Yancowinna', + 'Brazil/Acre', + 'Brazil/DeNoronha', + 'Brazil/East', + 'Brazil/West', + 'CET', + 'CST6CDT', + 'Canada/Atlantic', + 'Canada/Central', + 'Canada/East-Saskatchewan', + 'Canada/Eastern', + 'Canada/Mountain', + 'Canada/Newfoundland', + 'Canada/Pacific', + 'Canada/Saskatchewan', + 'Canada/Yukon', + 'Chile/Continental', + 'Chile/EasterIsland', + 'Cuba', + 'EET', + 'EST', + 'EST5EDT', + 'Egypt', + 'Eire', + 'Etc/GMT', + 'Etc/GMT+0', + 'Etc/GMT+1', + 'Etc/GMT+10', + 'Etc/GMT+11', + 'Etc/GMT+12', + 'Etc/GMT+2', + 'Etc/GMT+3', + 'Etc/GMT+4', + 'Etc/GMT+5', + 'Etc/GMT+6', + 'Etc/GMT+7', + 'Etc/GMT+8', + 'Etc/GMT+9', + 'Etc/GMT-0', + 'Etc/GMT-1', + 'Etc/GMT-10', + 'Etc/GMT-11', + 'Etc/GMT-12', + 'Etc/GMT-13', + 'Etc/GMT-14', + 'Etc/GMT-2', + 'Etc/GMT-3', + 'Etc/GMT-4', + 'Etc/GMT-5', + 'Etc/GMT-6', + 'Etc/GMT-7', + 'Etc/GMT-8', + 'Etc/GMT-9', + 'Etc/GMT0', + 'Etc/Greenwich', + 'Etc/UCT', + 'Etc/UTC', + 'Etc/Universal', + 'Etc/Zulu', + 'Europe/Amsterdam', + 'Europe/Andorra', + 'Europe/Athens', + 'Europe/Belfast', + 'Europe/Belgrade', + 'Europe/Berlin', + 'Europe/Bratislava', + 'Europe/Brussels', + 'Europe/Bucharest', + 'Europe/Budapest', + 'Europe/Busingen', + 'Europe/Chisinau', + 'Europe/Copenhagen', + 'Europe/Dublin', + 'Europe/Gibraltar', + 'Europe/Guernsey', + 'Europe/Helsinki', + 'Europe/Isle_of_Man', + 'Europe/Istanbul', + 'Europe/Jersey', + 'Europe/Kaliningrad', + 'Europe/Kiev', + 'Europe/Lisbon', + 'Europe/Ljubljana', + 'Europe/London', + 'Europe/Luxembourg', + 'Europe/Madrid', + 'Europe/Malta', + 'Europe/Mariehamn', + 'Europe/Minsk', + 'Europe/Monaco', + 'Europe/Moscow', + 'Europe/Nicosia', + 'Europe/Oslo', + 'Europe/Paris', + 'Europe/Podgorica', + 'Europe/Prague', + 'Europe/Riga', + 'Europe/Rome', + 'Europe/Samara', + 'Europe/San_Marino', + 'Europe/Sarajevo', + 'Europe/Simferopol', + 'Europe/Skopje', + 'Europe/Sofia', + 'Europe/Stockholm', + 'Europe/Tallinn', + 'Europe/Tirane', + 'Europe/Tiraspol', + 'Europe/Uzhgorod', + 'Europe/Vaduz', + 'Europe/Vatican', + 'Europe/Vienna', + 'Europe/Vilnius', + 'Europe/Volgograd', + 'Europe/Warsaw', + 'Europe/Zagreb', + 'Europe/Zaporozhye', + 'Europe/Zurich', + 'GB', + 'GB-Eire', + 'GMT', + 'GMT+0', + 'GMT-0', + 'GMT0', + 'Greenwich', + 'HST', + 'Hongkong', + 'Iceland', + 'Indian/Antananarivo', + 'Indian/Chagos', + 'Indian/Christmas', + 'Indian/Cocos', + 'Indian/Comoro', + 'Indian/Kerguelen', + 'Indian/Mahe', + 'Indian/Maldives', + 'Indian/Mauritius', + 'Indian/Mayotte', + 'Indian/Reunion', + 'Iran', + 'Israel', + 'Jamaica', + 'Japan', + 'Kwajalein', + 'Libya', + 'MET', + 'MST', + 'MST7MDT', + 'Mexico/BajaNorte', + 'Mexico/BajaSur', + 'Mexico/General', + 'NZ', + 'NZ-CHAT', + 'Navajo', + 'PRC', + 'PST8PDT', + 'Pacific/Apia', + 'Pacific/Auckland', + 'Pacific/Chatham', + 'Pacific/Chuuk', + 'Pacific/Easter', + 'Pacific/Efate', + 'Pacific/Enderbury', + 'Pacific/Fakaofo', + 'Pacific/Fiji', + 'Pacific/Funafuti', + 'Pacific/Galapagos', + 'Pacific/Gambier', + 'Pacific/Guadalcanal', + 'Pacific/Guam', + 'Pacific/Honolulu', + 'Pacific/Johnston', + 'Pacific/Kiritimati', + 'Pacific/Kosrae', + 'Pacific/Kwajalein', + 'Pacific/Majuro', + 'Pacific/Marquesas', + 'Pacific/Midway', + 'Pacific/Nauru', + 'Pacific/Niue', + 'Pacific/Norfolk', + 'Pacific/Noumea', + 'Pacific/Pago_Pago', + 'Pacific/Palau', + 'Pacific/Pitcairn', + 'Pacific/Pohnpei', + 'Pacific/Ponape', + 'Pacific/Port_Moresby', + 'Pacific/Rarotonga', + 'Pacific/Saipan', + 'Pacific/Samoa', + 'Pacific/Tahiti', + 'Pacific/Tarawa', + 'Pacific/Tongatapu', + 'Pacific/Truk', + 'Pacific/Wake', + 'Pacific/Wallis', + 'Pacific/Yap', + 'Poland', + 'Portugal', + 'ROC', + 'ROK', + 'Singapore', + 'Turkey', + 'UCT', + 'US/Alaska', + 'US/Aleutian', + 'US/Arizona', + 'US/Central', + 'US/East-Indiana', + 'US/Eastern', + 'US/Hawaii', + 'US/Indiana-Starke', + 'US/Michigan', + 'US/Mountain', + 'US/Pacific', + 'US/Pacific-New', + 'US/Samoa', + 'UTC', + 'Universal', + 'W-SU', + 'WET', + 'Zulu'] +all_timezones = LazyList( + tz for tz in all_timezones if resource_exists(tz)) + +all_timezones_set = LazySet(all_timezones) +common_timezones = \ +['Africa/Abidjan', + 'Africa/Accra', + 'Africa/Addis_Ababa', + 'Africa/Algiers', + 'Africa/Asmara', + 'Africa/Bamako', + 'Africa/Bangui', + 'Africa/Banjul', + 'Africa/Bissau', + 'Africa/Blantyre', + 'Africa/Brazzaville', + 'Africa/Bujumbura', + 'Africa/Cairo', + 'Africa/Casablanca', + 'Africa/Ceuta', + 'Africa/Conakry', + 'Africa/Dakar', + 'Africa/Dar_es_Salaam', + 'Africa/Djibouti', + 'Africa/Douala', + 'Africa/El_Aaiun', + 'Africa/Freetown', + 'Africa/Gaborone', + 'Africa/Harare', + 'Africa/Johannesburg', + 'Africa/Juba', + 'Africa/Kampala', + 'Africa/Khartoum', + 'Africa/Kigali', + 'Africa/Kinshasa', + 'Africa/Lagos', + 'Africa/Libreville', + 'Africa/Lome', + 'Africa/Luanda', + 'Africa/Lubumbashi', + 'Africa/Lusaka', + 'Africa/Malabo', + 'Africa/Maputo', + 'Africa/Maseru', + 'Africa/Mbabane', + 'Africa/Mogadishu', + 'Africa/Monrovia', + 'Africa/Nairobi', + 'Africa/Ndjamena', + 'Africa/Niamey', + 'Africa/Nouakchott', + 'Africa/Ouagadougou', + 'Africa/Porto-Novo', + 'Africa/Sao_Tome', + 'Africa/Tripoli', + 'Africa/Tunis', + 'Africa/Windhoek', + 'America/Adak', + 'America/Anchorage', + 'America/Anguilla', + 'America/Antigua', + 'America/Araguaina', + 'America/Argentina/Buenos_Aires', + 'America/Argentina/Catamarca', + 'America/Argentina/Cordoba', + 'America/Argentina/Jujuy', + 'America/Argentina/La_Rioja', + 'America/Argentina/Mendoza', + 'America/Argentina/Rio_Gallegos', + 'America/Argentina/Salta', + 'America/Argentina/San_Juan', + 'America/Argentina/San_Luis', + 'America/Argentina/Tucuman', + 'America/Argentina/Ushuaia', + 'America/Aruba', + 'America/Asuncion', + 'America/Atikokan', + 'America/Bahia', + 'America/Bahia_Banderas', + 'America/Barbados', + 'America/Belem', + 'America/Belize', + 'America/Blanc-Sablon', + 'America/Boa_Vista', + 'America/Bogota', + 'America/Boise', + 'America/Cambridge_Bay', + 'America/Campo_Grande', + 'America/Cancun', + 'America/Caracas', + 'America/Cayenne', + 'America/Cayman', + 'America/Chicago', + 'America/Chihuahua', + 'America/Costa_Rica', + 'America/Creston', + 'America/Cuiaba', + 'America/Curacao', + 'America/Danmarkshavn', + 'America/Dawson', + 'America/Dawson_Creek', + 'America/Denver', + 'America/Detroit', + 'America/Dominica', + 'America/Edmonton', + 'America/Eirunepe', + 'America/El_Salvador', + 'America/Fortaleza', + 'America/Glace_Bay', + 'America/Godthab', + 'America/Goose_Bay', + 'America/Grand_Turk', + 'America/Grenada', + 'America/Guadeloupe', + 'America/Guatemala', + 'America/Guayaquil', + 'America/Guyana', + 'America/Halifax', + 'America/Havana', + 'America/Hermosillo', + 'America/Indiana/Indianapolis', + 'America/Indiana/Knox', + 'America/Indiana/Marengo', + 'America/Indiana/Petersburg', + 'America/Indiana/Tell_City', + 'America/Indiana/Vevay', + 'America/Indiana/Vincennes', + 'America/Indiana/Winamac', + 'America/Inuvik', + 'America/Iqaluit', + 'America/Jamaica', + 'America/Juneau', + 'America/Kentucky/Louisville', + 'America/Kentucky/Monticello', + 'America/Kralendijk', + 'America/La_Paz', + 'America/Lima', + 'America/Los_Angeles', + 'America/Lower_Princes', + 'America/Maceio', + 'America/Managua', + 'America/Manaus', + 'America/Marigot', + 'America/Martinique', + 'America/Matamoros', + 'America/Mazatlan', + 'America/Menominee', + 'America/Merida', + 'America/Metlakatla', + 'America/Mexico_City', + 'America/Miquelon', + 'America/Moncton', + 'America/Monterrey', + 'America/Montevideo', + 'America/Montreal', + 'America/Montserrat', + 'America/Nassau', + 'America/New_York', + 'America/Nipigon', + 'America/Nome', + 'America/Noronha', + 'America/North_Dakota/Beulah', + 'America/North_Dakota/Center', + 'America/North_Dakota/New_Salem', + 'America/Ojinaga', + 'America/Panama', + 'America/Pangnirtung', + 'America/Paramaribo', + 'America/Phoenix', + 'America/Port-au-Prince', + 'America/Port_of_Spain', + 'America/Porto_Velho', + 'America/Puerto_Rico', + 'America/Rainy_River', + 'America/Rankin_Inlet', + 'America/Recife', + 'America/Regina', + 'America/Resolute', + 'America/Rio_Branco', + 'America/Santa_Isabel', + 'America/Santarem', + 'America/Santiago', + 'America/Santo_Domingo', + 'America/Sao_Paulo', + 'America/Scoresbysund', + 'America/Shiprock', + 'America/Sitka', + 'America/St_Barthelemy', + 'America/St_Johns', + 'America/St_Kitts', + 'America/St_Lucia', + 'America/St_Thomas', + 'America/St_Vincent', + 'America/Swift_Current', + 'America/Tegucigalpa', + 'America/Thule', + 'America/Thunder_Bay', + 'America/Tijuana', + 'America/Toronto', + 'America/Tortola', + 'America/Vancouver', + 'America/Whitehorse', + 'America/Winnipeg', + 'America/Yakutat', + 'America/Yellowknife', + 'Antarctica/Casey', + 'Antarctica/Davis', + 'Antarctica/DumontDUrville', + 'Antarctica/Macquarie', + 'Antarctica/Mawson', + 'Antarctica/McMurdo', + 'Antarctica/Palmer', + 'Antarctica/Rothera', + 'Antarctica/South_Pole', + 'Antarctica/Syowa', + 'Antarctica/Vostok', + 'Arctic/Longyearbyen', + 'Asia/Aden', + 'Asia/Almaty', + 'Asia/Amman', + 'Asia/Anadyr', + 'Asia/Aqtau', + 'Asia/Aqtobe', + 'Asia/Ashgabat', + 'Asia/Baghdad', + 'Asia/Bahrain', + 'Asia/Baku', + 'Asia/Bangkok', + 'Asia/Beirut', + 'Asia/Bishkek', + 'Asia/Brunei', + 'Asia/Choibalsan', + 'Asia/Chongqing', + 'Asia/Colombo', + 'Asia/Damascus', + 'Asia/Dhaka', + 'Asia/Dili', + 'Asia/Dubai', + 'Asia/Dushanbe', + 'Asia/Gaza', + 'Asia/Harbin', + 'Asia/Hebron', + 'Asia/Ho_Chi_Minh', + 'Asia/Hong_Kong', + 'Asia/Hovd', + 'Asia/Irkutsk', + 'Asia/Jakarta', + 'Asia/Jayapura', + 'Asia/Jerusalem', + 'Asia/Kabul', + 'Asia/Kamchatka', + 'Asia/Karachi', + 'Asia/Kashgar', + 'Asia/Kathmandu', + 'Asia/Khandyga', + 'Asia/Kolkata', + 'Asia/Krasnoyarsk', + 'Asia/Kuala_Lumpur', + 'Asia/Kuching', + 'Asia/Kuwait', + 'Asia/Macau', + 'Asia/Magadan', + 'Asia/Makassar', + 'Asia/Manila', + 'Asia/Muscat', + 'Asia/Nicosia', + 'Asia/Novokuznetsk', + 'Asia/Novosibirsk', + 'Asia/Omsk', + 'Asia/Oral', + 'Asia/Phnom_Penh', + 'Asia/Pontianak', + 'Asia/Pyongyang', + 'Asia/Qatar', + 'Asia/Qyzylorda', + 'Asia/Rangoon', + 'Asia/Riyadh', + 'Asia/Sakhalin', + 'Asia/Samarkand', + 'Asia/Seoul', + 'Asia/Shanghai', + 'Asia/Singapore', + 'Asia/Taipei', + 'Asia/Tashkent', + 'Asia/Tbilisi', + 'Asia/Tehran', + 'Asia/Thimphu', + 'Asia/Tokyo', + 'Asia/Ulaanbaatar', + 'Asia/Urumqi', + 'Asia/Ust-Nera', + 'Asia/Vientiane', + 'Asia/Vladivostok', + 'Asia/Yakutsk', + 'Asia/Yekaterinburg', + 'Asia/Yerevan', + 'Atlantic/Azores', + 'Atlantic/Bermuda', + 'Atlantic/Canary', + 'Atlantic/Cape_Verde', + 'Atlantic/Faroe', + 'Atlantic/Madeira', + 'Atlantic/Reykjavik', + 'Atlantic/South_Georgia', + 'Atlantic/St_Helena', + 'Atlantic/Stanley', + 'Australia/Adelaide', + 'Australia/Brisbane', + 'Australia/Broken_Hill', + 'Australia/Currie', + 'Australia/Darwin', + 'Australia/Eucla', + 'Australia/Hobart', + 'Australia/Lindeman', + 'Australia/Lord_Howe', + 'Australia/Melbourne', + 'Australia/Perth', + 'Australia/Sydney', + 'Canada/Atlantic', + 'Canada/Central', + 'Canada/Eastern', + 'Canada/Mountain', + 'Canada/Newfoundland', + 'Canada/Pacific', + 'Europe/Amsterdam', + 'Europe/Andorra', + 'Europe/Athens', + 'Europe/Belgrade', + 'Europe/Berlin', + 'Europe/Bratislava', + 'Europe/Brussels', + 'Europe/Bucharest', + 'Europe/Budapest', + 'Europe/Busingen', + 'Europe/Chisinau', + 'Europe/Copenhagen', + 'Europe/Dublin', + 'Europe/Gibraltar', + 'Europe/Guernsey', + 'Europe/Helsinki', + 'Europe/Isle_of_Man', + 'Europe/Istanbul', + 'Europe/Jersey', + 'Europe/Kaliningrad', + 'Europe/Kiev', + 'Europe/Lisbon', + 'Europe/Ljubljana', + 'Europe/London', + 'Europe/Luxembourg', + 'Europe/Madrid', + 'Europe/Malta', + 'Europe/Mariehamn', + 'Europe/Minsk', + 'Europe/Monaco', + 'Europe/Moscow', + 'Europe/Oslo', + 'Europe/Paris', + 'Europe/Podgorica', + 'Europe/Prague', + 'Europe/Riga', + 'Europe/Rome', + 'Europe/Samara', + 'Europe/San_Marino', + 'Europe/Sarajevo', + 'Europe/Simferopol', + 'Europe/Skopje', + 'Europe/Sofia', + 'Europe/Stockholm', + 'Europe/Tallinn', + 'Europe/Tirane', + 'Europe/Uzhgorod', + 'Europe/Vaduz', + 'Europe/Vatican', + 'Europe/Vienna', + 'Europe/Vilnius', + 'Europe/Volgograd', + 'Europe/Warsaw', + 'Europe/Zagreb', + 'Europe/Zaporozhye', + 'Europe/Zurich', + 'GMT', + 'Indian/Antananarivo', + 'Indian/Chagos', + 'Indian/Christmas', + 'Indian/Cocos', + 'Indian/Comoro', + 'Indian/Kerguelen', + 'Indian/Mahe', + 'Indian/Maldives', + 'Indian/Mauritius', + 'Indian/Mayotte', + 'Indian/Reunion', + 'Pacific/Apia', + 'Pacific/Auckland', + 'Pacific/Chatham', + 'Pacific/Chuuk', + 'Pacific/Easter', + 'Pacific/Efate', + 'Pacific/Enderbury', + 'Pacific/Fakaofo', + 'Pacific/Fiji', + 'Pacific/Funafuti', + 'Pacific/Galapagos', + 'Pacific/Gambier', + 'Pacific/Guadalcanal', + 'Pacific/Guam', + 'Pacific/Honolulu', + 'Pacific/Johnston', + 'Pacific/Kiritimati', + 'Pacific/Kosrae', + 'Pacific/Kwajalein', + 'Pacific/Majuro', + 'Pacific/Marquesas', + 'Pacific/Midway', + 'Pacific/Nauru', + 'Pacific/Niue', + 'Pacific/Norfolk', + 'Pacific/Noumea', + 'Pacific/Pago_Pago', + 'Pacific/Palau', + 'Pacific/Pitcairn', + 'Pacific/Pohnpei', + 'Pacific/Port_Moresby', + 'Pacific/Rarotonga', + 'Pacific/Saipan', + 'Pacific/Tahiti', + 'Pacific/Tarawa', + 'Pacific/Tongatapu', + 'Pacific/Wake', + 'Pacific/Wallis', + 'US/Alaska', + 'US/Arizona', + 'US/Central', + 'US/Eastern', + 'US/Hawaii', + 'US/Mountain', + 'US/Pacific', + 'UTC'] +common_timezones = LazyList( + tz for tz in common_timezones if tz in all_timezones) + +common_timezones_set = LazySet(common_timezones) diff --git a/wakatime/packages/pytz/exceptions.py b/wakatime/packages/pytz/exceptions.py new file mode 100644 index 0000000..0376108 --- /dev/null +++ b/wakatime/packages/pytz/exceptions.py @@ -0,0 +1,48 @@ +''' +Custom exceptions raised by pytz. +''' + +__all__ = [ + 'UnknownTimeZoneError', 'InvalidTimeError', 'AmbiguousTimeError', + 'NonExistentTimeError', + ] + + +class UnknownTimeZoneError(KeyError): + '''Exception raised when pytz is passed an unknown timezone. + + >>> isinstance(UnknownTimeZoneError(), LookupError) + True + + This class is actually a subclass of KeyError to provide backwards + compatibility with code relying on the undocumented behavior of earlier + pytz releases. + + >>> isinstance(UnknownTimeZoneError(), KeyError) + True + ''' + pass + + +class InvalidTimeError(Exception): + '''Base class for invalid time exceptions.''' + + +class AmbiguousTimeError(InvalidTimeError): + '''Exception raised when attempting to create an ambiguous wallclock time. + + At the end of a DST transition period, a particular wallclock time will + occur twice (once before the clocks are set back, once after). Both + possibilities may be correct, unless further information is supplied. + + See DstTzInfo.normalize() for more info + ''' + + +class NonExistentTimeError(InvalidTimeError): + '''Exception raised when attempting to create a wallclock time that + cannot exist. + + At the start of a DST transition period, the wallclock time jumps forward. + The instants jumped over never occur. + ''' diff --git a/wakatime/packages/pytz/lazy.py b/wakatime/packages/pytz/lazy.py new file mode 100644 index 0000000..0ce052d --- /dev/null +++ b/wakatime/packages/pytz/lazy.py @@ -0,0 +1,148 @@ +from threading import RLock +try: + from UserDict import DictMixin +except ImportError: + from collections import Mapping as DictMixin + + +_fill_lock = RLock() + + +class LazyDict(DictMixin): + """Dictionary populated on first use.""" + data = None + def __getitem__(self, key): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return self.data[key.upper()] + + def __contains__(self, key): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock_release() + return key in self.data + + def __iter__(self): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return iter(self.data) + + def __len__(self): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return len(self.data) + + def keys(self): + if self.data is None: + _fill_lock.acquire() + try: + if self.data is None: + self._fill() + finally: + _fill_lock.release() + return self.data.keys() + + +class LazyList(list): + """List populated on first use.""" + def __new__(cls, fill_iter): + + class LazyList(list): + _fill_iter = None + + _props = ( + '__str__', '__repr__', '__unicode__', + '__hash__', '__sizeof__', '__cmp__', '__nonzero__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', + 'append', 'count', 'index', 'extend', 'insert', 'pop', 'remove', + 'reverse', 'sort', '__add__', '__radd__', '__iadd__', '__mul__', + '__rmul__', '__imul__', '__contains__', '__len__', '__nonzero__', + '__getitem__', '__setitem__', '__delitem__', '__iter__', + '__reversed__', '__getslice__', '__setslice__', '__delslice__') + + def lazy(name): + def _lazy(self, *args, **kw): + if self._fill_iter is not None: + _fill_lock.acquire() + try: + if self._fill_iter is not None: + list.extend(self, self._fill_iter) + self._fill_iter = None + finally: + _fill_lock.release() + real = getattr(list, name) + setattr(self.__class__, name, real) + return real(self, *args, **kw) + return _lazy + + for name in _props: + setattr(LazyList, name, lazy(name)) + + new_list = LazyList() + new_list._fill_iter = fill_iter + return new_list + + +class LazySet(set): + """Set populated on first use.""" + def __new__(cls, fill_iter): + + class LazySet(set): + _fill_iter = None + + _props = ( + '__str__', '__repr__', '__unicode__', + '__hash__', '__sizeof__', '__cmp__', '__nonzero__', + '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', + '__contains__', '__len__', '__nonzero__', + '__getitem__', '__setitem__', '__delitem__', '__iter__', + '__sub__', '__and__', '__xor__', '__or__', + '__rsub__', '__rand__', '__rxor__', '__ror__', + '__isub__', '__iand__', '__ixor__', '__ior__', + 'add', 'clear', 'copy', 'difference', 'difference_update', + 'discard', 'intersection', 'intersection_update', 'isdisjoint', + 'issubset', 'issuperset', 'pop', 'remove', + 'symmetric_difference', 'symmetric_difference_update', + 'union', 'update') + + def lazy(name): + def _lazy(self, *args, **kw): + if self._fill_iter is not None: + _fill_lock.acquire() + try: + if self._fill_iter is not None: + for i in self._fill_iter: + set.add(self, i) + self._fill_iter = None + finally: + _fill_lock.release() + real = getattr(set, name) + setattr(self.__class__, name, real) + return real(self, *args, **kw) + return _lazy + + for name in _props: + setattr(LazySet, name, lazy(name)) + + new_set = LazySet() + new_set._fill_iter = fill_iter + return new_set diff --git a/wakatime/packages/pytz/reference.py b/wakatime/packages/pytz/reference.py new file mode 100644 index 0000000..3dda13e --- /dev/null +++ b/wakatime/packages/pytz/reference.py @@ -0,0 +1,127 @@ +''' +Reference tzinfo implementations from the Python docs. +Used for testing against as they are only correct for the years +1987 to 2006. Do not use these for real code. +''' + +from datetime import tzinfo, timedelta, datetime +from pytz import utc, UTC, HOUR, ZERO + +# A class building tzinfo objects for fixed-offset time zones. +# Note that FixedOffset(0, "UTC") is a different way to build a +# UTC tzinfo object. + +class FixedOffset(tzinfo): + """Fixed offset in minutes east from UTC.""" + + def __init__(self, offset, name): + self.__offset = timedelta(minutes = offset) + self.__name = name + + def utcoffset(self, dt): + return self.__offset + + def tzname(self, dt): + return self.__name + + def dst(self, dt): + return ZERO + +# A class capturing the platform's idea of local time. + +import time as _time + +STDOFFSET = timedelta(seconds = -_time.timezone) +if _time.daylight: + DSTOFFSET = timedelta(seconds = -_time.altzone) +else: + DSTOFFSET = STDOFFSET + +DSTDIFF = DSTOFFSET - STDOFFSET + +class LocalTimezone(tzinfo): + + def utcoffset(self, dt): + if self._isdst(dt): + return DSTOFFSET + else: + return STDOFFSET + + def dst(self, dt): + if self._isdst(dt): + return DSTDIFF + else: + return ZERO + + def tzname(self, dt): + return _time.tzname[self._isdst(dt)] + + def _isdst(self, dt): + tt = (dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second, + dt.weekday(), 0, -1) + stamp = _time.mktime(tt) + tt = _time.localtime(stamp) + return tt.tm_isdst > 0 + +Local = LocalTimezone() + +# A complete implementation of current DST rules for major US time zones. + +def first_sunday_on_or_after(dt): + days_to_go = 6 - dt.weekday() + if days_to_go: + dt += timedelta(days_to_go) + return dt + +# In the US, DST starts at 2am (standard time) on the first Sunday in April. +DSTSTART = datetime(1, 4, 1, 2) +# and ends at 2am (DST time; 1am standard time) on the last Sunday of Oct. +# which is the first Sunday on or after Oct 25. +DSTEND = datetime(1, 10, 25, 1) + +class USTimeZone(tzinfo): + + def __init__(self, hours, reprname, stdname, dstname): + self.stdoffset = timedelta(hours=hours) + self.reprname = reprname + self.stdname = stdname + self.dstname = dstname + + def __repr__(self): + return self.reprname + + def tzname(self, dt): + if self.dst(dt): + return self.dstname + else: + return self.stdname + + def utcoffset(self, dt): + return self.stdoffset + self.dst(dt) + + def dst(self, dt): + if dt is None or dt.tzinfo is None: + # An exception may be sensible here, in one or both cases. + # It depends on how you want to treat them. The default + # fromutc() implementation (called by the default astimezone() + # implementation) passes a datetime with dt.tzinfo is self. + return ZERO + assert dt.tzinfo is self + + # Find first Sunday in April & the last in October. + start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) + end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) + + # Can't compare naive to aware objects, so strip the timezone from + # dt first. + if start <= dt.replace(tzinfo=None) < end: + return HOUR + else: + return ZERO + +Eastern = USTimeZone(-5, "Eastern", "EST", "EDT") +Central = USTimeZone(-6, "Central", "CST", "CDT") +Mountain = USTimeZone(-7, "Mountain", "MST", "MDT") +Pacific = USTimeZone(-8, "Pacific", "PST", "PDT") + diff --git a/wakatime/packages/pytz/tests/test_docs.py b/wakatime/packages/pytz/tests/test_docs.py new file mode 100644 index 0000000..4302dca --- /dev/null +++ b/wakatime/packages/pytz/tests/test_docs.py @@ -0,0 +1,36 @@ +# -*- coding: ascii -*- + +from doctest import DocTestSuite +import unittest, os, os.path, sys +import warnings + +# We test the documentation this way instead of using DocFileSuite so +# we can run the tests under Python 2.3 +def test_README(): + pass + +this_dir = os.path.dirname(__file__) +locs = [ + os.path.join(this_dir, os.pardir, 'README.txt'), + os.path.join(this_dir, os.pardir, os.pardir, 'README.txt'), + ] +for loc in locs: + if os.path.exists(loc): + test_README.__doc__ = open(loc).read() + break +if test_README.__doc__ is None: + raise RuntimeError('README.txt not found') + + +def test_suite(): + "For the Z3 test runner" + return DocTestSuite() + + +if __name__ == '__main__': + sys.path.insert(0, os.path.abspath(os.path.join( + this_dir, os.pardir, os.pardir + ))) + unittest.main(defaultTest='test_suite') + + diff --git a/wakatime/packages/pytz/tests/test_tzinfo.py b/wakatime/packages/pytz/tests/test_tzinfo.py new file mode 100644 index 0000000..c97b530 --- /dev/null +++ b/wakatime/packages/pytz/tests/test_tzinfo.py @@ -0,0 +1,813 @@ +# -*- coding: ascii -*- + +import sys, os, os.path +import unittest, doctest +try: + import cPickle as pickle +except ImportError: + import pickle +from datetime import datetime, time, timedelta, tzinfo +import warnings + +if __name__ == '__main__': + # Only munge path if invoked as a script. Testrunners should have setup + # the paths already + sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir))) + +import pytz +from pytz import reference +from pytz.tzfile import _byte_string +from pytz.tzinfo import DstTzInfo, StaticTzInfo + +# I test for expected version to ensure the correct version of pytz is +# actually being tested. +EXPECTED_VERSION='2013d' + +fmt = '%Y-%m-%d %H:%M:%S %Z%z' + +NOTIME = timedelta(0) + +# GMT is a tzinfo.StaticTzInfo--the class we primarily want to test--while +# UTC is reference implementation. They both have the same timezone meaning. +UTC = pytz.timezone('UTC') +GMT = pytz.timezone('GMT') +assert isinstance(GMT, StaticTzInfo), 'GMT is no longer a StaticTzInfo' + +def prettydt(dt): + """datetime as a string using a known format. + + We don't use strftime as it doesn't handle years earlier than 1900 + per http://bugs.python.org/issue1777412 + """ + if dt.utcoffset() >= timedelta(0): + offset = '+%s' % (dt.utcoffset(),) + else: + offset = '-%s' % (-1 * dt.utcoffset(),) + return '%04d-%02d-%02d %02d:%02d:%02d %s %s' % ( + dt.year, dt.month, dt.day, + dt.hour, dt.minute, dt.second, + dt.tzname(), offset) + + +try: + unicode +except NameError: + # Python 3.x doesn't have unicode(), making writing code + # for Python 2.3 and Python 3.x a pain. + unicode = str + + +class BasicTest(unittest.TestCase): + + def testVersion(self): + # Ensuring the correct version of pytz has been loaded + self.assertEqual(EXPECTED_VERSION, pytz.__version__, + 'Incorrect pytz version loaded. Import path is stuffed ' + 'or this test needs updating. (Wanted %s, got %s)' + % (EXPECTED_VERSION, pytz.__version__) + ) + + def testGMT(self): + now = datetime.now(tz=GMT) + self.assertTrue(now.utcoffset() == NOTIME) + self.assertTrue(now.dst() == NOTIME) + self.assertTrue(now.timetuple() == now.utctimetuple()) + self.assertTrue(now==now.replace(tzinfo=UTC)) + + def testReferenceUTC(self): + now = datetime.now(tz=UTC) + self.assertTrue(now.utcoffset() == NOTIME) + self.assertTrue(now.dst() == NOTIME) + self.assertTrue(now.timetuple() == now.utctimetuple()) + + def testUnknownOffsets(self): + # This tzinfo behavior is required to make + # datetime.time.{utcoffset, dst, tzname} work as documented. + + dst_tz = pytz.timezone('US/Eastern') + + # This information is not known when we don't have a date, + # so return None per API. + self.assertTrue(dst_tz.utcoffset(None) is None) + self.assertTrue(dst_tz.dst(None) is None) + # We don't know the abbreviation, but this is still a valid + # tzname per the Python documentation. + self.assertEqual(dst_tz.tzname(None), 'US/Eastern') + + def clearCache(self): + pytz._tzinfo_cache.clear() + + def testUnicodeTimezone(self): + # We need to ensure that cold lookups work for both Unicode + # and traditional strings, and that the desired singleton is + # returned. + self.clearCache() + eastern = pytz.timezone(unicode('US/Eastern')) + self.assertTrue(eastern is pytz.timezone('US/Eastern')) + + self.clearCache() + eastern = pytz.timezone('US/Eastern') + self.assertTrue(eastern is pytz.timezone(unicode('US/Eastern'))) + + +class PicklingTest(unittest.TestCase): + + def _roundtrip_tzinfo(self, tz): + p = pickle.dumps(tz) + unpickled_tz = pickle.loads(p) + self.assertTrue(tz is unpickled_tz, '%s did not roundtrip' % tz.zone) + + def _roundtrip_datetime(self, dt): + # Ensure that the tzinfo attached to a datetime instance + # is identical to the one returned. This is important for + # DST timezones, as some state is stored in the tzinfo. + tz = dt.tzinfo + p = pickle.dumps(dt) + unpickled_dt = pickle.loads(p) + unpickled_tz = unpickled_dt.tzinfo + self.assertTrue(tz is unpickled_tz, '%s did not roundtrip' % tz.zone) + + def testDst(self): + tz = pytz.timezone('Europe/Amsterdam') + dt = datetime(2004, 2, 1, 0, 0, 0) + + for localized_tz in tz._tzinfos.values(): + self._roundtrip_tzinfo(localized_tz) + self._roundtrip_datetime(dt.replace(tzinfo=localized_tz)) + + def testRoundtrip(self): + dt = datetime(2004, 2, 1, 0, 0, 0) + for zone in pytz.all_timezones: + tz = pytz.timezone(zone) + self._roundtrip_tzinfo(tz) + + def testDatabaseFixes(self): + # Hack the pickle to make it refer to a timezone abbreviation + # that does not match anything. The unpickler should be able + # to repair this case + tz = pytz.timezone('Australia/Melbourne') + p = pickle.dumps(tz) + tzname = tz._tzname + hacked_p = p.replace(_byte_string(tzname), _byte_string('???')) + self.assertNotEqual(p, hacked_p) + unpickled_tz = pickle.loads(hacked_p) + self.assertTrue(tz is unpickled_tz) + + # Simulate a database correction. In this case, the incorrect + # data will continue to be used. + p = pickle.dumps(tz) + new_utcoffset = tz._utcoffset.seconds + 42 + + # Python 3 introduced a new pickle protocol where numbers are stored in + # hexadecimal representation. Here we extract the pickle + # representation of the number for the current Python version. + old_pickle_pattern = pickle.dumps(tz._utcoffset.seconds)[3:-1] + new_pickle_pattern = pickle.dumps(new_utcoffset)[3:-1] + hacked_p = p.replace(old_pickle_pattern, new_pickle_pattern) + + self.assertNotEqual(p, hacked_p) + unpickled_tz = pickle.loads(hacked_p) + self.assertEqual(unpickled_tz._utcoffset.seconds, new_utcoffset) + self.assertTrue(tz is not unpickled_tz) + + def testOldPickles(self): + # Ensure that applications serializing pytz instances as pickles + # have no troubles upgrading to a new pytz release. These pickles + # where created with pytz2006j + east1 = pickle.loads(_byte_string( + "cpytz\n_p\np1\n(S'US/Eastern'\np2\nI-18000\n" + "I0\nS'EST'\np3\ntRp4\n." + )) + east2 = pytz.timezone('US/Eastern') + self.assertTrue(east1 is east2) + + # Confirm changes in name munging between 2006j and 2007c cause + # no problems. + pap1 = pickle.loads(_byte_string( + "cpytz\n_p\np1\n(S'America/Port_minus_au_minus_Prince'" + "\np2\nI-17340\nI0\nS'PPMT'\np3\ntRp4\n.")) + pap2 = pytz.timezone('America/Port-au-Prince') + self.assertTrue(pap1 is pap2) + + gmt1 = pickle.loads(_byte_string( + "cpytz\n_p\np1\n(S'Etc/GMT_plus_10'\np2\ntRp3\n.")) + gmt2 = pytz.timezone('Etc/GMT+10') + self.assertTrue(gmt1 is gmt2) + + +class USEasternDSTStartTestCase(unittest.TestCase): + tzinfo = pytz.timezone('US/Eastern') + + # 24 hours before DST changeover + transition_time = datetime(2002, 4, 7, 7, 0, 0, tzinfo=UTC) + + # Increase for 'flexible' DST transitions due to 1 minute granularity + # of Python's datetime library + instant = timedelta(seconds=1) + + # before transition + before = { + 'tzname': 'EST', + 'utcoffset': timedelta(hours = -5), + 'dst': timedelta(hours = 0), + } + + # after transition + after = { + 'tzname': 'EDT', + 'utcoffset': timedelta(hours = -4), + 'dst': timedelta(hours = 1), + } + + def _test_tzname(self, utc_dt, wanted): + tzname = wanted['tzname'] + dt = utc_dt.astimezone(self.tzinfo) + self.assertEqual(dt.tzname(), tzname, + 'Expected %s as tzname for %s. Got %s' % ( + tzname, str(utc_dt), dt.tzname() + ) + ) + + def _test_utcoffset(self, utc_dt, wanted): + utcoffset = wanted['utcoffset'] + dt = utc_dt.astimezone(self.tzinfo) + self.assertEqual( + dt.utcoffset(), wanted['utcoffset'], + 'Expected %s as utcoffset for %s. Got %s' % ( + utcoffset, utc_dt, dt.utcoffset() + ) + ) + + def _test_dst(self, utc_dt, wanted): + dst = wanted['dst'] + dt = utc_dt.astimezone(self.tzinfo) + self.assertEqual(dt.dst(),dst, + 'Expected %s as dst for %s. Got %s' % ( + dst, utc_dt, dt.dst() + ) + ) + + def test_arithmetic(self): + utc_dt = self.transition_time + + for days in range(-420, 720, 20): + delta = timedelta(days=days) + + # Make sure we can get back where we started + dt = utc_dt.astimezone(self.tzinfo) + dt2 = dt + delta + dt2 = dt2 - delta + self.assertEqual(dt, dt2) + + # Make sure arithmetic crossing DST boundaries ends + # up in the correct timezone after normalization + utc_plus_delta = (utc_dt + delta).astimezone(self.tzinfo) + local_plus_delta = self.tzinfo.normalize(dt + delta) + self.assertEqual( + prettydt(utc_plus_delta), + prettydt(local_plus_delta), + 'Incorrect result for delta==%d days. Wanted %r. Got %r'%( + days, + prettydt(utc_plus_delta), + prettydt(local_plus_delta), + ) + ) + + def _test_all(self, utc_dt, wanted): + self._test_utcoffset(utc_dt, wanted) + self._test_tzname(utc_dt, wanted) + self._test_dst(utc_dt, wanted) + + def testDayBefore(self): + self._test_all( + self.transition_time - timedelta(days=1), self.before + ) + + def testTwoHoursBefore(self): + self._test_all( + self.transition_time - timedelta(hours=2), self.before + ) + + def testHourBefore(self): + self._test_all( + self.transition_time - timedelta(hours=1), self.before + ) + + def testInstantBefore(self): + self._test_all( + self.transition_time - self.instant, self.before + ) + + def testTransition(self): + self._test_all( + self.transition_time, self.after + ) + + def testInstantAfter(self): + self._test_all( + self.transition_time + self.instant, self.after + ) + + def testHourAfter(self): + self._test_all( + self.transition_time + timedelta(hours=1), self.after + ) + + def testTwoHoursAfter(self): + self._test_all( + self.transition_time + timedelta(hours=1), self.after + ) + + def testDayAfter(self): + self._test_all( + self.transition_time + timedelta(days=1), self.after + ) + + +class USEasternDSTEndTestCase(USEasternDSTStartTestCase): + tzinfo = pytz.timezone('US/Eastern') + transition_time = datetime(2002, 10, 27, 6, 0, 0, tzinfo=UTC) + before = { + 'tzname': 'EDT', + 'utcoffset': timedelta(hours = -4), + 'dst': timedelta(hours = 1), + } + after = { + 'tzname': 'EST', + 'utcoffset': timedelta(hours = -5), + 'dst': timedelta(hours = 0), + } + + +class USEasternEPTStartTestCase(USEasternDSTStartTestCase): + transition_time = datetime(1945, 8, 14, 23, 0, 0, tzinfo=UTC) + before = { + 'tzname': 'EWT', + 'utcoffset': timedelta(hours = -4), + 'dst': timedelta(hours = 1), + } + after = { + 'tzname': 'EPT', + 'utcoffset': timedelta(hours = -4), + 'dst': timedelta(hours = 1), + } + + +class USEasternEPTEndTestCase(USEasternDSTStartTestCase): + transition_time = datetime(1945, 9, 30, 6, 0, 0, tzinfo=UTC) + before = { + 'tzname': 'EPT', + 'utcoffset': timedelta(hours = -4), + 'dst': timedelta(hours = 1), + } + after = { + 'tzname': 'EST', + 'utcoffset': timedelta(hours = -5), + 'dst': timedelta(hours = 0), + } + + +class WarsawWMTEndTestCase(USEasternDSTStartTestCase): + # In 1915, Warsaw changed from Warsaw to Central European time. + # This involved the clocks being set backwards, causing a end-of-DST + # like situation without DST being involved. + tzinfo = pytz.timezone('Europe/Warsaw') + transition_time = datetime(1915, 8, 4, 22, 36, 0, tzinfo=UTC) + before = { + 'tzname': 'WMT', + 'utcoffset': timedelta(hours=1, minutes=24), + 'dst': timedelta(0), + } + after = { + 'tzname': 'CET', + 'utcoffset': timedelta(hours=1), + 'dst': timedelta(0), + } + + +class VilniusWMTEndTestCase(USEasternDSTStartTestCase): + # At the end of 1916, Vilnius changed timezones putting its clock + # forward by 11 minutes 35 seconds. Neither timezone was in DST mode. + tzinfo = pytz.timezone('Europe/Vilnius') + instant = timedelta(seconds=31) + transition_time = datetime(1916, 12, 31, 22, 36, 00, tzinfo=UTC) + before = { + 'tzname': 'WMT', + 'utcoffset': timedelta(hours=1, minutes=24), + 'dst': timedelta(0), + } + after = { + 'tzname': 'KMT', + 'utcoffset': timedelta(hours=1, minutes=36), # Really 1:35:36 + 'dst': timedelta(0), + } + + +class VilniusCESTStartTestCase(USEasternDSTStartTestCase): + # In 1941, Vilnius changed from MSG to CEST, switching to summer + # time while simultaneously reducing its UTC offset by two hours, + # causing the clocks to go backwards for this summer time + # switchover. + tzinfo = pytz.timezone('Europe/Vilnius') + transition_time = datetime(1941, 6, 23, 21, 00, 00, tzinfo=UTC) + before = { + 'tzname': 'MSK', + 'utcoffset': timedelta(hours=3), + 'dst': timedelta(0), + } + after = { + 'tzname': 'CEST', + 'utcoffset': timedelta(hours=2), + 'dst': timedelta(hours=1), + } + + +class LondonHistoryStartTestCase(USEasternDSTStartTestCase): + # The first known timezone transition in London was in 1847 when + # clocks where synchronized to GMT. However, we currently only + # understand v1 format tzfile(5) files which does handle years + # this far in the past, so our earliest known transition is in + # 1916. + tzinfo = pytz.timezone('Europe/London') + # transition_time = datetime(1847, 12, 1, 1, 15, 00, tzinfo=UTC) + # before = { + # 'tzname': 'LMT', + # 'utcoffset': timedelta(minutes=-75), + # 'dst': timedelta(0), + # } + # after = { + # 'tzname': 'GMT', + # 'utcoffset': timedelta(0), + # 'dst': timedelta(0), + # } + transition_time = datetime(1916, 5, 21, 2, 00, 00, tzinfo=UTC) + before = { + 'tzname': 'GMT', + 'utcoffset': timedelta(0), + 'dst': timedelta(0), + } + after = { + 'tzname': 'BST', + 'utcoffset': timedelta(hours=1), + 'dst': timedelta(hours=1), + } + + +class LondonHistoryEndTestCase(USEasternDSTStartTestCase): + # Timezone switchovers are projected into the future, even + # though no official statements exist or could be believed even + # if they did exist. We currently only check the last known + # transition in 2037, as we are still using v1 format tzfile(5) + # files. + tzinfo = pytz.timezone('Europe/London') + # transition_time = datetime(2499, 10, 25, 1, 0, 0, tzinfo=UTC) + transition_time = datetime(2037, 10, 25, 1, 0, 0, tzinfo=UTC) + before = { + 'tzname': 'BST', + 'utcoffset': timedelta(hours=1), + 'dst': timedelta(hours=1), + } + after = { + 'tzname': 'GMT', + 'utcoffset': timedelta(0), + 'dst': timedelta(0), + } + + +class NoumeaHistoryStartTestCase(USEasternDSTStartTestCase): + # Noumea adopted a whole hour offset in 1912. Previously + # it was 11 hours, 5 minutes and 48 seconds off UTC. However, + # due to limitations of the Python datetime library, we need + # to round that to 11 hours 6 minutes. + tzinfo = pytz.timezone('Pacific/Noumea') + transition_time = datetime(1912, 1, 12, 12, 54, 12, tzinfo=UTC) + before = { + 'tzname': 'LMT', + 'utcoffset': timedelta(hours=11, minutes=6), + 'dst': timedelta(0), + } + after = { + 'tzname': 'NCT', + 'utcoffset': timedelta(hours=11), + 'dst': timedelta(0), + } + + +class NoumeaDSTEndTestCase(USEasternDSTStartTestCase): + # Noumea dropped DST in 1997. + tzinfo = pytz.timezone('Pacific/Noumea') + transition_time = datetime(1997, 3, 1, 15, 00, 00, tzinfo=UTC) + before = { + 'tzname': 'NCST', + 'utcoffset': timedelta(hours=12), + 'dst': timedelta(hours=1), + } + after = { + 'tzname': 'NCT', + 'utcoffset': timedelta(hours=11), + 'dst': timedelta(0), + } + + +class NoumeaNoMoreDSTTestCase(NoumeaDSTEndTestCase): + # Noumea dropped DST in 1997. Here we test that it stops occuring. + transition_time = ( + NoumeaDSTEndTestCase.transition_time + timedelta(days=365*10)) + before = NoumeaDSTEndTestCase.after + after = NoumeaDSTEndTestCase.after + + +class TahitiTestCase(USEasternDSTStartTestCase): + # Tahiti has had a single transition in its history. + tzinfo = pytz.timezone('Pacific/Tahiti') + transition_time = datetime(1912, 10, 1, 9, 58, 16, tzinfo=UTC) + before = { + 'tzname': 'LMT', + 'utcoffset': timedelta(hours=-9, minutes=-58), + 'dst': timedelta(0), + } + after = { + 'tzname': 'TAHT', + 'utcoffset': timedelta(hours=-10), + 'dst': timedelta(0), + } + + +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): + # Reference implementation cannot handle this + pass + + +class ReferenceUSEasternDSTEndTestCase(USEasternDSTEndTestCase): + tzinfo = reference.Eastern + + def testHourBefore(self): + # Python's datetime library has a bug, where the hour before + # a daylight savings transition is one hour out. For example, + # at the end of US/Eastern daylight savings time, 01:00 EST + # occurs twice (once at 05:00 UTC and once at 06:00 UTC), + # whereas the first should actually be 01:00 EDT. + # Note that this bug is by design - by accepting this ambiguity + # for one hour one hour per year, an is_dst flag on datetime.time + # became unnecessary. + self._test_all( + self.transition_time - timedelta(hours=1), self.after + ) + + def testInstantBefore(self): + self._test_all( + self.transition_time - timedelta(seconds=1), self.after + ) + + def test_arithmetic(self): + # Reference implementation cannot handle this + pass + + +class LocalTestCase(unittest.TestCase): + def testLocalize(self): + loc_tz = pytz.timezone('Europe/Amsterdam') + + loc_time = loc_tz.localize(datetime(1930, 5, 10, 0, 0, 0)) + # Actually +00:19:32, but Python datetime rounds this + self.assertEqual(loc_time.strftime('%Z%z'), 'AMT+0020') + + loc_time = loc_tz.localize(datetime(1930, 5, 20, 0, 0, 0)) + # Actually +00:19:32, but Python datetime rounds this + self.assertEqual(loc_time.strftime('%Z%z'), 'NST+0120') + + loc_time = loc_tz.localize(datetime(1940, 5, 10, 0, 0, 0)) + self.assertEqual(loc_time.strftime('%Z%z'), 'NET+0020') + + loc_time = loc_tz.localize(datetime(1940, 5, 20, 0, 0, 0)) + self.assertEqual(loc_time.strftime('%Z%z'), 'CEST+0200') + + loc_time = loc_tz.localize(datetime(2004, 2, 1, 0, 0, 0)) + self.assertEqual(loc_time.strftime('%Z%z'), 'CET+0100') + + loc_time = loc_tz.localize(datetime(2004, 4, 1, 0, 0, 0)) + self.assertEqual(loc_time.strftime('%Z%z'), 'CEST+0200') + + tz = pytz.timezone('Europe/Amsterdam') + loc_time = loc_tz.localize(datetime(1943, 3, 29, 1, 59, 59)) + self.assertEqual(loc_time.strftime('%Z%z'), 'CET+0100') + + + # Switch to US + loc_tz = pytz.timezone('US/Eastern') + + # End of DST ambiguity check + loc_time = loc_tz.localize(datetime(1918, 10, 27, 1, 59, 59), is_dst=1) + self.assertEqual(loc_time.strftime('%Z%z'), 'EDT-0400') + + loc_time = loc_tz.localize(datetime(1918, 10, 27, 1, 59, 59), is_dst=0) + self.assertEqual(loc_time.strftime('%Z%z'), 'EST-0500') + + self.assertRaises(pytz.AmbiguousTimeError, + loc_tz.localize, datetime(1918, 10, 27, 1, 59, 59), is_dst=None + ) + + # Start of DST non-existent times + loc_time = loc_tz.localize(datetime(1918, 3, 31, 2, 0, 0), is_dst=0) + self.assertEqual(loc_time.strftime('%Z%z'), 'EST-0500') + + loc_time = loc_tz.localize(datetime(1918, 3, 31, 2, 0, 0), is_dst=1) + self.assertEqual(loc_time.strftime('%Z%z'), 'EDT-0400') + + self.assertRaises(pytz.NonExistentTimeError, + loc_tz.localize, datetime(1918, 3, 31, 2, 0, 0), is_dst=None + ) + + # Weird changes - war time and peace time both is_dst==True + + loc_time = loc_tz.localize(datetime(1942, 2, 9, 3, 0, 0)) + self.assertEqual(loc_time.strftime('%Z%z'), 'EWT-0400') + + loc_time = loc_tz.localize(datetime(1945, 8, 14, 19, 0, 0)) + self.assertEqual(loc_time.strftime('%Z%z'), 'EPT-0400') + + loc_time = loc_tz.localize(datetime(1945, 9, 30, 1, 0, 0), is_dst=1) + self.assertEqual(loc_time.strftime('%Z%z'), 'EPT-0400') + + loc_time = loc_tz.localize(datetime(1945, 9, 30, 1, 0, 0), is_dst=0) + self.assertEqual(loc_time.strftime('%Z%z'), 'EST-0500') + + def testNormalize(self): + tz = pytz.timezone('US/Eastern') + dt = datetime(2004, 4, 4, 7, 0, 0, tzinfo=UTC).astimezone(tz) + dt2 = dt - timedelta(minutes=10) + self.assertEqual( + dt2.strftime('%Y-%m-%d %H:%M:%S %Z%z'), + '2004-04-04 02:50:00 EDT-0400' + ) + + dt2 = tz.normalize(dt2) + self.assertEqual( + dt2.strftime('%Y-%m-%d %H:%M:%S %Z%z'), + '2004-04-04 01:50:00 EST-0500' + ) + + def testPartialMinuteOffsets(self): + # utcoffset in Amsterdam was not a whole minute until 1937 + # However, we fudge this by rounding them, as the Python + # datetime library + tz = pytz.timezone('Europe/Amsterdam') + utc_dt = datetime(1914, 1, 1, 13, 40, 28, tzinfo=UTC) # correct + utc_dt = utc_dt.replace(second=0) # But we need to fudge it + loc_dt = utc_dt.astimezone(tz) + self.assertEqual( + loc_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'), + '1914-01-01 14:00:00 AMT+0020' + ) + + # And get back... + utc_dt = loc_dt.astimezone(UTC) + self.assertEqual( + utc_dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'), + '1914-01-01 13:40:00 UTC+0000' + ) + + def no_testCreateLocaltime(self): + # It would be nice if this worked, but it doesn't. + tz = pytz.timezone('Europe/Amsterdam') + dt = datetime(2004, 10, 31, 2, 0, 0, tzinfo=tz) + self.assertEqual( + dt.strftime(fmt), + '2004-10-31 02:00:00 CET+0100' + ) + + +class CommonTimezonesTestCase(unittest.TestCase): + def test_bratislava(self): + # Bratislava is the default timezone for Slovakia, but our + # heuristics where not adding it to common_timezones. Ideally, + # common_timezones should be populated from zone.tab at runtime, + # but I'm hesitant to pay the startup cost as loading the list + # on demand whilst remaining backwards compatible seems + # difficult. + self.assertTrue('Europe/Bratislava' in pytz.common_timezones) + self.assertTrue('Europe/Bratislava' in pytz.common_timezones_set) + + def test_us_eastern(self): + self.assertTrue('US/Eastern' in pytz.common_timezones) + self.assertTrue('US/Eastern' in pytz.common_timezones_set) + + def test_belfast(self): + # Belfast uses London time. + self.assertTrue('Europe/Belfast' in pytz.all_timezones_set) + self.assertFalse('Europe/Belfast' in pytz.common_timezones) + 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')) + suite.addTest(doctest.DocTestSuite('pytz.tzinfo')) + import test_tzinfo + suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_tzinfo)) + return suite + + +if __name__ == '__main__': + warnings.simplefilter("error") # Warnings should be fatal in tests. + unittest.main(defaultTest='test_suite') + diff --git a/wakatime/packages/pytz/tzfile.py b/wakatime/packages/pytz/tzfile.py new file mode 100644 index 0000000..9c007c8 --- /dev/null +++ b/wakatime/packages/pytz/tzfile.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python +''' +$Id: tzfile.py,v 1.8 2004/06/03 00:15:24 zenzen Exp $ +''' + +try: + from cStringIO import StringIO +except ImportError: + from io import StringIO +from datetime import datetime, timedelta +from struct import unpack, calcsize + +from pytz.tzinfo import StaticTzInfo, DstTzInfo, memorized_ttinfo +from pytz.tzinfo import memorized_datetime, memorized_timedelta + +def _byte_string(s): + """Cast a string or byte string to an ASCII byte string.""" + return s.encode('US-ASCII') + +_NULL = _byte_string('\0') + +def _std_string(s): + """Cast a string or byte string to an ASCII string.""" + return str(s.decode('US-ASCII')) + +def build_tzinfo(zone, fp): + head_fmt = '>4s c 15x 6l' + head_size = calcsize(head_fmt) + (magic, format, ttisgmtcnt, ttisstdcnt,leapcnt, timecnt, + typecnt, charcnt) = unpack(head_fmt, fp.read(head_size)) + + # Make sure it is a tzfile(5) file + assert magic == _byte_string('TZif'), 'Got magic %s' % repr(magic) + + # Read out the transition times, localtime indices and ttinfo structures. + data_fmt = '>%(timecnt)dl %(timecnt)dB %(ttinfo)s %(charcnt)ds' % dict( + timecnt=timecnt, ttinfo='lBB'*typecnt, charcnt=charcnt) + data_size = calcsize(data_fmt) + data = unpack(data_fmt, fp.read(data_size)) + + # make sure we unpacked the right number of values + assert len(data) == 2 * timecnt + 3 * typecnt + 1 + transitions = [memorized_datetime(trans) + for trans in data[:timecnt]] + lindexes = list(data[timecnt:2 * timecnt]) + ttinfo_raw = data[2 * timecnt:-1] + tznames_raw = data[-1] + del data + + # Process ttinfo into separate structs + ttinfo = [] + tznames = {} + i = 0 + while i < len(ttinfo_raw): + # have we looked up this timezone name yet? + tzname_offset = ttinfo_raw[i+2] + if tzname_offset not in tznames: + nul = tznames_raw.find(_NULL, tzname_offset) + if nul < 0: + nul = len(tznames_raw) + tznames[tzname_offset] = _std_string( + tznames_raw[tzname_offset:nul]) + ttinfo.append((ttinfo_raw[i], + bool(ttinfo_raw[i+1]), + tznames[tzname_offset])) + i += 3 + + # Now build the timezone object + if len(transitions) == 0: + ttinfo[0][0], ttinfo[0][2] + cls = type(zone, (StaticTzInfo,), dict( + zone=zone, + _utcoffset=memorized_timedelta(ttinfo[0][0]), + _tzname=ttinfo[0][2])) + else: + # Early dates use the first standard time ttinfo + i = 0 + while ttinfo[i][1]: + i += 1 + if ttinfo[i] == ttinfo[lindexes[0]]: + transitions[0] = datetime.min + else: + transitions.insert(0, datetime.min) + lindexes.insert(0, i) + + # calculate transition info + transition_info = [] + for i in range(len(transitions)): + inf = ttinfo[lindexes[i]] + utcoffset = inf[0] + if not inf[1]: + dst = 0 + else: + for j in range(i-1, -1, -1): + prev_inf = ttinfo[lindexes[j]] + if not prev_inf[1]: + break + dst = inf[0] - prev_inf[0] # dst offset + + # 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]: + dst = inf[0] - stdinf[0] + if dst > 0: + break # Found a useful std time. + + tzname = inf[2] + + # Round utcoffset and dst to the nearest minute or the + # datetime library will complain. Conversions to these timezones + # might be up to plus or minus 30 seconds out, but it is + # the best we can do. + utcoffset = int((utcoffset + 30) // 60) * 60 + dst = int((dst + 30) // 60) * 60 + transition_info.append(memorized_ttinfo(utcoffset, dst, tzname)) + + cls = type(zone, (DstTzInfo,), dict( + zone=zone, + _utc_transition_times=transitions, + _transition_info=transition_info)) + + return cls() + +if __name__ == '__main__': + import os.path + from pprint import pprint + base = os.path.join(os.path.dirname(__file__), 'zoneinfo') + tz = build_tzinfo('Australia/Melbourne', + open(os.path.join(base,'Australia','Melbourne'), 'rb')) + tz = build_tzinfo('US/Eastern', + open(os.path.join(base,'US','Eastern'), 'rb')) + pprint(tz._utc_transition_times) + #print tz.asPython(4) + #print tz.transitions_mapping diff --git a/wakatime/packages/pytz/tzinfo.py b/wakatime/packages/pytz/tzinfo.py new file mode 100644 index 0000000..a1e43cd --- /dev/null +++ b/wakatime/packages/pytz/tzinfo.py @@ -0,0 +1,563 @@ +'''Base classes and helpers for building zone specific tzinfo classes''' + +from datetime import datetime, timedelta, tzinfo +from bisect import bisect_right +try: + set +except NameError: + from sets import Set as set + +import pytz +from pytz.exceptions import AmbiguousTimeError, NonExistentTimeError + +__all__ = [] + +_timedelta_cache = {} +def memorized_timedelta(seconds): + '''Create only one instance of each distinct timedelta''' + try: + return _timedelta_cache[seconds] + except KeyError: + delta = timedelta(seconds=seconds) + _timedelta_cache[seconds] = delta + return delta + +_epoch = datetime.utcfromtimestamp(0) +_datetime_cache = {0: _epoch} +def memorized_datetime(seconds): + '''Create only one instance of each distinct datetime''' + try: + return _datetime_cache[seconds] + except KeyError: + # NB. We can't just do datetime.utcfromtimestamp(seconds) as this + # fails with negative values under Windows (Bug #90096) + dt = _epoch + timedelta(seconds=seconds) + _datetime_cache[seconds] = dt + return dt + +_ttinfo_cache = {} +def memorized_ttinfo(*args): + '''Create only one instance of each distinct tuple''' + try: + return _ttinfo_cache[args] + except KeyError: + ttinfo = ( + memorized_timedelta(args[0]), + memorized_timedelta(args[1]), + args[2] + ) + _ttinfo_cache[args] = ttinfo + return ttinfo + +_notime = memorized_timedelta(0) + +def _to_seconds(td): + '''Convert a timedelta to seconds''' + return td.seconds + td.days * 24 * 60 * 60 + + +class BaseTzInfo(tzinfo): + # Overridden in subclass + _utcoffset = None + _tzname = None + zone = None + + def __str__(self): + return self.zone + + +class StaticTzInfo(BaseTzInfo): + '''A timezone that has a constant offset from UTC + + These timezones are rare, as most locations have changed their + offset at some point in their history + ''' + 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): + '''See datetime.tzinfo.utcoffset + + is_dst is ignored for StaticTzInfo, and exists only to + retain compatibility with DstTzInfo. + ''' + return self._utcoffset + + def dst(self, dt, is_dst=None): + '''See datetime.tzinfo.dst + + is_dst is ignored for StaticTzInfo, and exists only to + retain compatibility with DstTzInfo. + ''' + return _notime + + def tzname(self, dt, is_dst=None): + '''See datetime.tzinfo.tzname + + is_dst is ignored for StaticTzInfo, and exists only to + retain compatibility with DstTzInfo. + ''' + return self._tzname + + def localize(self, dt, is_dst=False): + '''Convert naive time to local time''' + if dt.tzinfo is not None: + raise ValueError('Not naive datetime (tzinfo is already set)') + return dt.replace(tzinfo=self) + + def normalize(self, dt, is_dst=False): + '''Correct the timezone information on the given datetime. + + This is normally a no-op, as StaticTzInfo timezones never have + ambiguous cases to correct: + + >>> from pytz import timezone + >>> gmt = timezone('GMT') + >>> isinstance(gmt, StaticTzInfo) + True + >>> dt = datetime(2011, 5, 8, 1, 2, 3, tzinfo=gmt) + >>> gmt.normalize(dt) is dt + True + + The supported method of converting between timezones is to use + datetime.astimezone(). Currently normalize() also works: + + >>> la = timezone('America/Los_Angeles') + >>> dt = la.localize(datetime(2011, 5, 7, 1, 2, 3)) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> gmt.normalize(dt).strftime(fmt) + '2011-05-07 08:02:03 GMT (+0000)' + ''' + if dt.tzinfo is self: + return dt + if dt.tzinfo is None: + raise ValueError('Naive time - no tzinfo set') + return dt.astimezone(self) + + def __repr__(self): + return '' % (self.zone,) + + def __reduce__(self): + # Special pickle to zone remains a singleton and to cope with + # database changes. + return pytz._p, (self.zone,) + + +class DstTzInfo(BaseTzInfo): + '''A timezone that has a variable offset from UTC + + The offset might change if daylight savings time comes into effect, + or at a point in history when the region decides to change their + timezone definition. + ''' + # Overridden in subclass + _utc_transition_times = None # Sorted list of DST transition times in UTC + _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding + # to _utc_transition_times entries + zone = None + + # Set in __init__ + _tzinfos = None + _dst = None # DST offset + + def __init__(self, _inf=None, _tzinfos=None): + if _inf: + self._tzinfos = _tzinfos + self._utcoffset, self._dst, self._tzname = _inf + else: + _tzinfos = {} + self._tzinfos = _tzinfos + self._utcoffset, self._dst, self._tzname = self._transition_info[0] + _tzinfos[self._transition_info[0]] = self + for inf in self._transition_info[1:]: + if inf not in _tzinfos: + _tzinfos[inf] = self.__class__(inf, _tzinfos) + + 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] + return (dt + inf[0]).replace(tzinfo=self._tzinfos[inf]) + + def normalize(self, dt): + '''Correct the timezone information on the given datetime + + If date arithmetic crosses DST boundaries, the tzinfo + is not magically adjusted. This method normalizes the + tzinfo to the correct one. + + To test, first we need to do some setup + + >>> from pytz import timezone + >>> utc = timezone('UTC') + >>> eastern = timezone('US/Eastern') + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + + We next create a datetime right on an end-of-DST transition point, + the instant when the wallclocks are wound back one hour. + + >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc) + >>> loc_dt = utc_dt.astimezone(eastern) + >>> loc_dt.strftime(fmt) + '2002-10-27 01:00:00 EST (-0500)' + + Now, if we subtract a few minutes from it, note that the timezone + information has not changed. + + >>> before = loc_dt - timedelta(minutes=10) + >>> before.strftime(fmt) + '2002-10-27 00:50:00 EST (-0500)' + + But we can fix that by calling the normalize method + + >>> before = eastern.normalize(before) + >>> before.strftime(fmt) + '2002-10-27 01:50:00 EDT (-0400)' + + The supported method of converting between timezones is to use + datetime.astimezone(). Currently, normalize() also works: + + >>> th = timezone('Asia/Bangkok') + >>> am = timezone('Europe/Amsterdam') + >>> dt = th.localize(datetime(2011, 5, 7, 1, 2, 3)) + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> am.normalize(dt).strftime(fmt) + '2011-05-06 20:02:03 CEST (+0200)' + ''' + if dt.tzinfo is None: + raise ValueError('Naive time - no tzinfo set') + + # Convert dt in localtime to UTC + offset = dt.tzinfo._utcoffset + dt = dt.replace(tzinfo=None) + dt = dt - offset + # convert it back, and return it + return self.fromutc(dt) + + def localize(self, dt, is_dst=False): + '''Convert naive time to local time. + + This method should be used to construct localtimes, rather + than passing a tzinfo argument to a datetime constructor. + + is_dst is used to determine the correct timezone in the ambigous + period at the end of daylight savings time. + + >>> from pytz import timezone + >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)' + >>> amdam = timezone('Europe/Amsterdam') + >>> dt = datetime(2004, 10, 31, 2, 0, 0) + >>> loc_dt1 = amdam.localize(dt, is_dst=True) + >>> loc_dt2 = amdam.localize(dt, is_dst=False) + >>> loc_dt1.strftime(fmt) + '2004-10-31 02:00:00 CEST (+0200)' + >>> loc_dt2.strftime(fmt) + '2004-10-31 02:00:00 CET (+0100)' + >>> str(loc_dt2 - loc_dt1) + '1:00:00' + + Use is_dst=None to raise an AmbiguousTimeError for ambiguous + times at the end of daylight savings + + >>> try: + ... loc_dt1 = amdam.localize(dt, is_dst=None) + ... except AmbiguousTimeError: + ... print('Ambiguous') + Ambiguous + + is_dst defaults to False + + >>> amdam.localize(dt) == amdam.localize(dt, False) + True + + is_dst is also used to determine the correct timezone in the + wallclock times jumped over at the start of daylight savings time. + + >>> pacific = timezone('US/Pacific') + >>> dt = datetime(2008, 3, 9, 2, 0, 0) + >>> ploc_dt1 = pacific.localize(dt, is_dst=True) + >>> ploc_dt2 = pacific.localize(dt, is_dst=False) + >>> ploc_dt1.strftime(fmt) + '2008-03-09 02:00:00 PDT (-0700)' + >>> ploc_dt2.strftime(fmt) + '2008-03-09 02:00:00 PST (-0800)' + >>> str(ploc_dt2 - ploc_dt1) + '1:00:00' + + Use is_dst=None to raise a NonExistentTimeError for these skipped + times. + + >>> try: + ... loc_dt1 = pacific.localize(dt, is_dst=None) + ... except NonExistentTimeError: + ... print('Non-existent') + Non-existent + ''' + if dt.tzinfo is not None: + raise ValueError('Not naive datetime (tzinfo is already set)') + + # Find the two best possibilities. + possible_loc_dt = set() + for delta in [timedelta(days=-1), timedelta(days=1)]: + loc_dt = dt + delta + idx = max(0, bisect_right( + self._utc_transition_times, loc_dt) - 1) + inf = self._transition_info[idx] + tzinfo = self._tzinfos[inf] + loc_dt = tzinfo.normalize(dt.replace(tzinfo=tzinfo)) + if loc_dt.replace(tzinfo=None) == dt: + possible_loc_dt.add(loc_dt) + + if len(possible_loc_dt) == 1: + return possible_loc_dt.pop() + + # If there are no possibly correct timezones, we are attempting + # to convert a time that never happened - the time period jumped + # during the start-of-DST transition period. + if len(possible_loc_dt) == 0: + # If we refuse to guess, raise an exception. + if is_dst is None: + raise NonExistentTimeError(dt) + + # If we are forcing the pre-DST side of the DST transition, we + # obtain the correct timezone by winding the clock forward a few + # hours. + elif is_dst: + return self.localize( + dt + timedelta(hours=6), is_dst=True) - timedelta(hours=6) + + # If we are forcing the post-DST side of the DST transition, we + # obtain the correct timezone by winding the clock back. + else: + return self.localize( + dt - timedelta(hours=6), is_dst=False) + timedelta(hours=6) + + + # If we get this far, we have multiple possible timezones - this + # is an ambiguous case occuring during the end-of-DST transition. + + # If told to be strict, raise an exception since we have an + # ambiguous case + if is_dst is None: + raise AmbiguousTimeError(dt) + + # Filter out the possiblilities that don't match the requested + # is_dst + filtered_possible_loc_dt = [ + p for p in possible_loc_dt + if bool(p.tzinfo._dst) == is_dst + ] + + # Hopefully we only have one possibility left. Return it. + if len(filtered_possible_loc_dt) == 1: + return filtered_possible_loc_dt[0] + + if len(filtered_possible_loc_dt) == 0: + filtered_possible_loc_dt = list(possible_loc_dt) + + # If we get this far, we have in a wierd timezone transition + # where the clocks have been wound back but is_dst is the same + # in both (eg. Europe/Warsaw 1915 when they switched to CET). + # At this point, we just have to guess unless we allow more + # hints to be passed in (such as the UTC offset or abbreviation), + # but that is just getting silly. + # + # Choose the earliest (by UTC) applicable timezone. + sorting_keys = {} + for local_dt in filtered_possible_loc_dt: + key = local_dt.replace(tzinfo=None) - local_dt.tzinfo._utcoffset + sorting_keys[key] = local_dt + first_key = sorted(sorting_keys)[0] + return sorting_keys[first_key] + + def utcoffset(self, dt, is_dst=None): + '''See datetime.tzinfo.utcoffset + + The is_dst parameter may be used to remove ambiguity during DST + transitions. + + >>> from pytz import timezone + >>> tz = timezone('America/St_Johns') + >>> ambiguous = datetime(2009, 10, 31, 23, 30) + + >>> tz.utcoffset(ambiguous, is_dst=False) + datetime.timedelta(-1, 73800) + + >>> tz.utcoffset(ambiguous, is_dst=True) + datetime.timedelta(-1, 77400) + + >>> try: + ... tz.utcoffset(ambiguous) + ... except AmbiguousTimeError: + ... print('Ambiguous') + Ambiguous + + ''' + if dt is None: + return None + elif dt.tzinfo is not self: + dt = self.localize(dt, is_dst) + return dt.tzinfo._utcoffset + else: + return self._utcoffset + + def dst(self, dt, is_dst=None): + '''See datetime.tzinfo.dst + + The is_dst parameter may be used to remove ambiguity during DST + transitions. + + >>> from pytz import timezone + >>> tz = timezone('America/St_Johns') + + >>> normal = datetime(2009, 9, 1) + + >>> tz.dst(normal) + datetime.timedelta(0, 3600) + >>> tz.dst(normal, is_dst=False) + datetime.timedelta(0, 3600) + >>> tz.dst(normal, is_dst=True) + datetime.timedelta(0, 3600) + + >>> ambiguous = datetime(2009, 10, 31, 23, 30) + + >>> tz.dst(ambiguous, is_dst=False) + datetime.timedelta(0) + >>> tz.dst(ambiguous, is_dst=True) + datetime.timedelta(0, 3600) + >>> try: + ... tz.dst(ambiguous) + ... except AmbiguousTimeError: + ... print('Ambiguous') + Ambiguous + + ''' + if dt is None: + return None + elif dt.tzinfo is not self: + dt = self.localize(dt, is_dst) + return dt.tzinfo._dst + else: + return self._dst + + def tzname(self, dt, is_dst=None): + '''See datetime.tzinfo.tzname + + The is_dst parameter may be used to remove ambiguity during DST + transitions. + + >>> from pytz import timezone + >>> tz = timezone('America/St_Johns') + + >>> normal = datetime(2009, 9, 1) + + >>> tz.tzname(normal) + 'NDT' + >>> tz.tzname(normal, is_dst=False) + 'NDT' + >>> tz.tzname(normal, is_dst=True) + 'NDT' + + >>> ambiguous = datetime(2009, 10, 31, 23, 30) + + >>> tz.tzname(ambiguous, is_dst=False) + 'NST' + >>> tz.tzname(ambiguous, is_dst=True) + 'NDT' + >>> try: + ... tz.tzname(ambiguous) + ... except AmbiguousTimeError: + ... print('Ambiguous') + Ambiguous + ''' + if dt is None: + return self.zone + elif dt.tzinfo is not self: + dt = self.localize(dt, is_dst) + return dt.tzinfo._tzname + else: + return self._tzname + + def __repr__(self): + if self._dst: + dst = 'DST' + else: + dst = 'STD' + if self._utcoffset > _notime: + return '' % ( + self.zone, self._tzname, self._utcoffset, dst + ) + else: + return '' % ( + self.zone, self._tzname, self._utcoffset, dst + ) + + def __reduce__(self): + # Special pickle to zone remains a singleton and to cope with + # database changes. + return pytz._p, ( + self.zone, + _to_seconds(self._utcoffset), + _to_seconds(self._dst), + self._tzname + ) + + + +def unpickler(zone, utcoffset=None, dstoffset=None, tzname=None): + """Factory function for unpickling pytz tzinfo instances. + + This is shared for both StaticTzInfo and DstTzInfo instances, because + database changes could cause a zones implementation to switch between + these two base classes and we can't break pickles on a pytz version + upgrade. + """ + # Raises a KeyError if zone no longer exists, which should never happen + # and would be a bug. + tz = pytz.timezone(zone) + + # A StaticTzInfo - just return it + if utcoffset is None: + return tz + + # This pickle was created from a DstTzInfo. We need to + # determine which of the list of tzinfo instances for this zone + # to use in order to restore the state of any datetime instances using + # it correctly. + utcoffset = memorized_timedelta(utcoffset) + dstoffset = memorized_timedelta(dstoffset) + try: + return tz._tzinfos[(utcoffset, dstoffset, tzname)] + except KeyError: + # The particular state requested in this timezone no longer exists. + # This indicates a corrupt pickle, or the timezone database has been + # corrected violently enough to make this particular + # (utcoffset,dstoffset) no longer exist in the zone, or the + # abbreviation has been changed. + pass + + # See if we can find an entry differing only by tzname. Abbreviations + # get changed from the initial guess by the database maintainers to + # match reality when this information is discovered. + for localized_tz in tz._tzinfos.values(): + if (localized_tz._utcoffset == utcoffset + and localized_tz._dst == dstoffset): + return localized_tz + + # This (utcoffset, dstoffset) information has been removed from the + # zone. Add it back. This might occur when the database maintainers have + # corrected incorrect information. datetime instances using this + # incorrect information will continue to do so, exactly as they were + # before being pickled. This is purely an overly paranoid safety net - I + # doubt this will ever been needed in real life. + inf = (utcoffset, dstoffset, tzname) + tz._tzinfos[inf] = tz.__class__(inf, tz._tzinfos) + return tz._tzinfos[inf] + diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Abidjan b/wakatime/packages/pytz/zoneinfo/Africa/Abidjan new file mode 100644 index 0000000..65d19ec Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Abidjan differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Accra b/wakatime/packages/pytz/zoneinfo/Africa/Accra new file mode 100644 index 0000000..8c473ed Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Accra differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Addis_Ababa b/wakatime/packages/pytz/zoneinfo/Africa/Addis_Ababa new file mode 100644 index 0000000..5a95ab6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Addis_Ababa differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Algiers b/wakatime/packages/pytz/zoneinfo/Africa/Algiers new file mode 100644 index 0000000..c888831 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Algiers differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Asmara b/wakatime/packages/pytz/zoneinfo/Africa/Asmara new file mode 100644 index 0000000..d1e876e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Asmara differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Asmera b/wakatime/packages/pytz/zoneinfo/Africa/Asmera new file mode 100644 index 0000000..d1e876e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Asmera differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Bamako b/wakatime/packages/pytz/zoneinfo/Africa/Bamako new file mode 100644 index 0000000..da18d71 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Bamako differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Bangui b/wakatime/packages/pytz/zoneinfo/Africa/Bangui new file mode 100644 index 0000000..883e597 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Bangui differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Banjul b/wakatime/packages/pytz/zoneinfo/Africa/Banjul new file mode 100644 index 0000000..a85a7d8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Banjul differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Bissau b/wakatime/packages/pytz/zoneinfo/Africa/Bissau new file mode 100644 index 0000000..ab4a195 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Bissau differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Blantyre b/wakatime/packages/pytz/zoneinfo/Africa/Blantyre new file mode 100644 index 0000000..2972580 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Blantyre differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Brazzaville b/wakatime/packages/pytz/zoneinfo/Africa/Brazzaville new file mode 100644 index 0000000..abb0c08 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Brazzaville differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Bujumbura b/wakatime/packages/pytz/zoneinfo/Africa/Bujumbura new file mode 100644 index 0000000..cac5652 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Bujumbura differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Cairo b/wakatime/packages/pytz/zoneinfo/Africa/Cairo new file mode 100644 index 0000000..1c6a2fc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Cairo differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Casablanca b/wakatime/packages/pytz/zoneinfo/Africa/Casablanca new file mode 100644 index 0000000..576c069 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Casablanca differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Ceuta b/wakatime/packages/pytz/zoneinfo/Africa/Ceuta new file mode 100644 index 0000000..c9b0c08 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Ceuta differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Conakry b/wakatime/packages/pytz/zoneinfo/Africa/Conakry new file mode 100644 index 0000000..75b8523 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Conakry differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Dakar b/wakatime/packages/pytz/zoneinfo/Africa/Dakar new file mode 100644 index 0000000..3110413 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Dakar differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Dar_es_Salaam b/wakatime/packages/pytz/zoneinfo/Africa/Dar_es_Salaam new file mode 100644 index 0000000..720d76c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Dar_es_Salaam differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Djibouti b/wakatime/packages/pytz/zoneinfo/Africa/Djibouti new file mode 100644 index 0000000..297d93a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Djibouti differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Douala b/wakatime/packages/pytz/zoneinfo/Africa/Douala new file mode 100644 index 0000000..8627f2e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Douala differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/El_Aaiun b/wakatime/packages/pytz/zoneinfo/Africa/El_Aaiun new file mode 100644 index 0000000..3275161 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/El_Aaiun differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Freetown b/wakatime/packages/pytz/zoneinfo/Africa/Freetown new file mode 100644 index 0000000..720b8e3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Freetown differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Gaborone b/wakatime/packages/pytz/zoneinfo/Africa/Gaborone new file mode 100644 index 0000000..e2abcb6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Gaborone differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Harare b/wakatime/packages/pytz/zoneinfo/Africa/Harare new file mode 100644 index 0000000..258b393 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Harare differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Johannesburg b/wakatime/packages/pytz/zoneinfo/Africa/Johannesburg new file mode 100644 index 0000000..d1bec73 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Johannesburg differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Juba b/wakatime/packages/pytz/zoneinfo/Africa/Juba new file mode 100644 index 0000000..20284ff Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Juba differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Kampala b/wakatime/packages/pytz/zoneinfo/Africa/Kampala new file mode 100644 index 0000000..b018ba2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Kampala differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Khartoum b/wakatime/packages/pytz/zoneinfo/Africa/Khartoum new file mode 100644 index 0000000..6f62fd7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Khartoum differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Kigali b/wakatime/packages/pytz/zoneinfo/Africa/Kigali new file mode 100644 index 0000000..c9623c5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Kigali differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Kinshasa b/wakatime/packages/pytz/zoneinfo/Africa/Kinshasa new file mode 100644 index 0000000..e8481f3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Kinshasa differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Lagos b/wakatime/packages/pytz/zoneinfo/Africa/Lagos new file mode 100644 index 0000000..cbdc045 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Lagos differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Libreville b/wakatime/packages/pytz/zoneinfo/Africa/Libreville new file mode 100644 index 0000000..d7691ae Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Libreville differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Lome b/wakatime/packages/pytz/zoneinfo/Africa/Lome new file mode 100644 index 0000000..297ec5d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Lome differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Luanda b/wakatime/packages/pytz/zoneinfo/Africa/Luanda new file mode 100644 index 0000000..576b204 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Luanda differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Lubumbashi b/wakatime/packages/pytz/zoneinfo/Africa/Lubumbashi new file mode 100644 index 0000000..d3fab52 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Lubumbashi differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Lusaka b/wakatime/packages/pytz/zoneinfo/Africa/Lusaka new file mode 100644 index 0000000..87d7a95 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Lusaka differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Malabo b/wakatime/packages/pytz/zoneinfo/Africa/Malabo new file mode 100644 index 0000000..c70de1f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Malabo differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Maputo b/wakatime/packages/pytz/zoneinfo/Africa/Maputo new file mode 100644 index 0000000..31cfad7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Maputo differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Maseru b/wakatime/packages/pytz/zoneinfo/Africa/Maseru new file mode 100644 index 0000000..117006e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Maseru differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Mbabane b/wakatime/packages/pytz/zoneinfo/Africa/Mbabane new file mode 100644 index 0000000..be6ed60 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Mbabane differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Mogadishu b/wakatime/packages/pytz/zoneinfo/Africa/Mogadishu new file mode 100644 index 0000000..bd08463 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Mogadishu differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Monrovia b/wakatime/packages/pytz/zoneinfo/Africa/Monrovia new file mode 100644 index 0000000..bd2fa4e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Monrovia differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Nairobi b/wakatime/packages/pytz/zoneinfo/Africa/Nairobi new file mode 100644 index 0000000..72676bb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Nairobi differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Ndjamena b/wakatime/packages/pytz/zoneinfo/Africa/Ndjamena new file mode 100644 index 0000000..8779590 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Ndjamena differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Niamey b/wakatime/packages/pytz/zoneinfo/Africa/Niamey new file mode 100644 index 0000000..799381c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Niamey differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Nouakchott b/wakatime/packages/pytz/zoneinfo/Africa/Nouakchott new file mode 100644 index 0000000..ead817a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Nouakchott differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Ouagadougou b/wakatime/packages/pytz/zoneinfo/Africa/Ouagadougou new file mode 100644 index 0000000..df782a4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Ouagadougou differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Porto-Novo b/wakatime/packages/pytz/zoneinfo/Africa/Porto-Novo new file mode 100644 index 0000000..600a30d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Porto-Novo differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Sao_Tome b/wakatime/packages/pytz/zoneinfo/Africa/Sao_Tome new file mode 100644 index 0000000..ddf7fb4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Sao_Tome differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Timbuktu b/wakatime/packages/pytz/zoneinfo/Africa/Timbuktu new file mode 100644 index 0000000..da18d71 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Timbuktu differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Tripoli b/wakatime/packages/pytz/zoneinfo/Africa/Tripoli new file mode 100644 index 0000000..479f5b4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Tripoli differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Tunis b/wakatime/packages/pytz/zoneinfo/Africa/Tunis new file mode 100644 index 0000000..dd559ee Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Tunis differ diff --git a/wakatime/packages/pytz/zoneinfo/Africa/Windhoek b/wakatime/packages/pytz/zoneinfo/Africa/Windhoek new file mode 100644 index 0000000..6f22b0a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Africa/Windhoek differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Adak b/wakatime/packages/pytz/zoneinfo/America/Adak new file mode 100644 index 0000000..391ec98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Adak differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Anchorage b/wakatime/packages/pytz/zoneinfo/America/Anchorage new file mode 100644 index 0000000..d147350 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Anchorage differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Anguilla b/wakatime/packages/pytz/zoneinfo/America/Anguilla new file mode 100644 index 0000000..20bc946 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Anguilla differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Antigua b/wakatime/packages/pytz/zoneinfo/America/Antigua new file mode 100644 index 0000000..608b635 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Antigua differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Araguaina b/wakatime/packages/pytz/zoneinfo/America/Araguaina new file mode 100644 index 0000000..e4ea527 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Araguaina differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Buenos_Aires b/wakatime/packages/pytz/zoneinfo/America/Argentina/Buenos_Aires new file mode 100644 index 0000000..5a52a51 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Buenos_Aires differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Catamarca b/wakatime/packages/pytz/zoneinfo/America/Argentina/Catamarca new file mode 100644 index 0000000..b9c987b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Catamarca differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/ComodRivadavia b/wakatime/packages/pytz/zoneinfo/America/Argentina/ComodRivadavia new file mode 100644 index 0000000..b9c987b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/ComodRivadavia differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Cordoba b/wakatime/packages/pytz/zoneinfo/America/Argentina/Cordoba new file mode 100644 index 0000000..a703e95 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Cordoba differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Jujuy b/wakatime/packages/pytz/zoneinfo/America/Argentina/Jujuy new file mode 100644 index 0000000..86800f0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Jujuy differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/La_Rioja b/wakatime/packages/pytz/zoneinfo/America/Argentina/La_Rioja new file mode 100644 index 0000000..333819a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/La_Rioja differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Mendoza b/wakatime/packages/pytz/zoneinfo/America/Argentina/Mendoza new file mode 100644 index 0000000..76afd59 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Mendoza differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Rio_Gallegos b/wakatime/packages/pytz/zoneinfo/America/Argentina/Rio_Gallegos new file mode 100644 index 0000000..65d0230 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Rio_Gallegos differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Salta b/wakatime/packages/pytz/zoneinfo/America/Argentina/Salta new file mode 100644 index 0000000..963917a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Salta differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/San_Juan b/wakatime/packages/pytz/zoneinfo/America/Argentina/San_Juan new file mode 100644 index 0000000..fe7007b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/San_Juan differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/San_Luis b/wakatime/packages/pytz/zoneinfo/America/Argentina/San_Luis new file mode 100644 index 0000000..fa30a68 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/San_Luis differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Tucuman b/wakatime/packages/pytz/zoneinfo/America/Argentina/Tucuman new file mode 100644 index 0000000..be7bd27 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Tucuman differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Argentina/Ushuaia b/wakatime/packages/pytz/zoneinfo/America/Argentina/Ushuaia new file mode 100644 index 0000000..18590ef Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Argentina/Ushuaia differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Aruba b/wakatime/packages/pytz/zoneinfo/America/Aruba new file mode 100644 index 0000000..73bb7ea Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Aruba differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Asuncion b/wakatime/packages/pytz/zoneinfo/America/Asuncion new file mode 100644 index 0000000..59f7891 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Asuncion differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Atikokan b/wakatime/packages/pytz/zoneinfo/America/Atikokan new file mode 100644 index 0000000..1b49e37 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Atikokan differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Atka b/wakatime/packages/pytz/zoneinfo/America/Atka new file mode 100644 index 0000000..391ec98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Atka differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Bahia b/wakatime/packages/pytz/zoneinfo/America/Bahia new file mode 100644 index 0000000..403d9d1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Bahia differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Bahia_Banderas b/wakatime/packages/pytz/zoneinfo/America/Bahia_Banderas new file mode 100644 index 0000000..cd53107 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Bahia_Banderas differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Barbados b/wakatime/packages/pytz/zoneinfo/America/Barbados new file mode 100644 index 0000000..7bb7ac4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Barbados differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Belem b/wakatime/packages/pytz/zoneinfo/America/Belem new file mode 100644 index 0000000..9c37b6a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Belem differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Belize b/wakatime/packages/pytz/zoneinfo/America/Belize new file mode 100644 index 0000000..a18cd39 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Belize differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Blanc-Sablon b/wakatime/packages/pytz/zoneinfo/America/Blanc-Sablon new file mode 100644 index 0000000..8a33789 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Blanc-Sablon differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Boa_Vista b/wakatime/packages/pytz/zoneinfo/America/Boa_Vista new file mode 100644 index 0000000..cb15afb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Boa_Vista differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Bogota b/wakatime/packages/pytz/zoneinfo/America/Bogota new file mode 100644 index 0000000..bddda98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Bogota differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Boise b/wakatime/packages/pytz/zoneinfo/America/Boise new file mode 100644 index 0000000..441afe5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Boise differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Buenos_Aires b/wakatime/packages/pytz/zoneinfo/America/Buenos_Aires new file mode 100644 index 0000000..5a52a51 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Buenos_Aires differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Cambridge_Bay b/wakatime/packages/pytz/zoneinfo/America/Cambridge_Bay new file mode 100644 index 0000000..99c77c5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Cambridge_Bay differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Campo_Grande b/wakatime/packages/pytz/zoneinfo/America/Campo_Grande new file mode 100644 index 0000000..4684098 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Campo_Grande differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Cancun b/wakatime/packages/pytz/zoneinfo/America/Cancun new file mode 100644 index 0000000..90993fa Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Cancun differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Caracas b/wakatime/packages/pytz/zoneinfo/America/Caracas new file mode 100644 index 0000000..d96a5c0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Caracas differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Catamarca b/wakatime/packages/pytz/zoneinfo/America/Catamarca new file mode 100644 index 0000000..b9c987b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Catamarca differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Cayenne b/wakatime/packages/pytz/zoneinfo/America/Cayenne new file mode 100644 index 0000000..7109a98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Cayenne differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Cayman b/wakatime/packages/pytz/zoneinfo/America/Cayman new file mode 100644 index 0000000..a4095d3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Cayman differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Chicago b/wakatime/packages/pytz/zoneinfo/America/Chicago new file mode 100644 index 0000000..71aae72 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Chicago differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Chihuahua b/wakatime/packages/pytz/zoneinfo/America/Chihuahua new file mode 100644 index 0000000..b268724 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Chihuahua differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Coral_Harbour b/wakatime/packages/pytz/zoneinfo/America/Coral_Harbour new file mode 100644 index 0000000..1b49e37 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Coral_Harbour differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Cordoba b/wakatime/packages/pytz/zoneinfo/America/Cordoba new file mode 100644 index 0000000..a703e95 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Cordoba differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Costa_Rica b/wakatime/packages/pytz/zoneinfo/America/Costa_Rica new file mode 100644 index 0000000..018d945 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Costa_Rica differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Creston b/wakatime/packages/pytz/zoneinfo/America/Creston new file mode 100644 index 0000000..1cf719a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Creston differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Cuiaba b/wakatime/packages/pytz/zoneinfo/America/Cuiaba new file mode 100644 index 0000000..232ef67 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Cuiaba differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Curacao b/wakatime/packages/pytz/zoneinfo/America/Curacao new file mode 100644 index 0000000..2d01c18 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Curacao differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Danmarkshavn b/wakatime/packages/pytz/zoneinfo/America/Danmarkshavn new file mode 100644 index 0000000..9feacfb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Danmarkshavn differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Dawson b/wakatime/packages/pytz/zoneinfo/America/Dawson new file mode 100644 index 0000000..fab0609 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Dawson differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Dawson_Creek b/wakatime/packages/pytz/zoneinfo/America/Dawson_Creek new file mode 100644 index 0000000..c3fb166 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Dawson_Creek differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Denver b/wakatime/packages/pytz/zoneinfo/America/Denver new file mode 100644 index 0000000..f8908fe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Denver differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Detroit b/wakatime/packages/pytz/zoneinfo/America/Detroit new file mode 100644 index 0000000..da53d46 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Detroit differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Dominica b/wakatime/packages/pytz/zoneinfo/America/Dominica new file mode 100644 index 0000000..7783831 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Dominica differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Edmonton b/wakatime/packages/pytz/zoneinfo/America/Edmonton new file mode 100644 index 0000000..3fa0579 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Edmonton differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Eirunepe b/wakatime/packages/pytz/zoneinfo/America/Eirunepe new file mode 100644 index 0000000..4e586a3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Eirunepe differ diff --git a/wakatime/packages/pytz/zoneinfo/America/El_Salvador b/wakatime/packages/pytz/zoneinfo/America/El_Salvador new file mode 100644 index 0000000..ac774e8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/El_Salvador differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Ensenada b/wakatime/packages/pytz/zoneinfo/America/Ensenada new file mode 100644 index 0000000..fffdc24 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Ensenada differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Fort_Wayne b/wakatime/packages/pytz/zoneinfo/America/Fort_Wayne new file mode 100644 index 0000000..aa3dfc4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Fort_Wayne differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Fortaleza b/wakatime/packages/pytz/zoneinfo/America/Fortaleza new file mode 100644 index 0000000..2598c53 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Fortaleza differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Glace_Bay b/wakatime/packages/pytz/zoneinfo/America/Glace_Bay new file mode 100644 index 0000000..48412a4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Glace_Bay differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Godthab b/wakatime/packages/pytz/zoneinfo/America/Godthab new file mode 100644 index 0000000..85623ce Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Godthab differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Goose_Bay b/wakatime/packages/pytz/zoneinfo/America/Goose_Bay new file mode 100644 index 0000000..83e5a9b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Goose_Bay differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Grand_Turk b/wakatime/packages/pytz/zoneinfo/America/Grand_Turk new file mode 100644 index 0000000..733c179 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Grand_Turk differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Grenada b/wakatime/packages/pytz/zoneinfo/America/Grenada new file mode 100644 index 0000000..df1b689 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Grenada differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Guadeloupe b/wakatime/packages/pytz/zoneinfo/America/Guadeloupe new file mode 100644 index 0000000..15c0f1f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Guadeloupe differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Guatemala b/wakatime/packages/pytz/zoneinfo/America/Guatemala new file mode 100644 index 0000000..6118b5c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Guatemala differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Guayaquil b/wakatime/packages/pytz/zoneinfo/America/Guayaquil new file mode 100644 index 0000000..e6de7f8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Guayaquil differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Guyana b/wakatime/packages/pytz/zoneinfo/America/Guyana new file mode 100644 index 0000000..5f98c4a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Guyana differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Halifax b/wakatime/packages/pytz/zoneinfo/America/Halifax new file mode 100644 index 0000000..756099a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Halifax differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Havana b/wakatime/packages/pytz/zoneinfo/America/Havana new file mode 100644 index 0000000..28aca00 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Havana differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Hermosillo b/wakatime/packages/pytz/zoneinfo/America/Hermosillo new file mode 100644 index 0000000..26c269d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Hermosillo differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Indianapolis b/wakatime/packages/pytz/zoneinfo/America/Indiana/Indianapolis new file mode 100644 index 0000000..aa3dfc4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Indianapolis differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Knox b/wakatime/packages/pytz/zoneinfo/America/Indiana/Knox new file mode 100644 index 0000000..33169f4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Knox differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Marengo b/wakatime/packages/pytz/zoneinfo/America/Indiana/Marengo new file mode 100644 index 0000000..255b739 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Marengo differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Petersburg b/wakatime/packages/pytz/zoneinfo/America/Indiana/Petersburg new file mode 100644 index 0000000..c611106 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Petersburg differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Tell_City b/wakatime/packages/pytz/zoneinfo/America/Indiana/Tell_City new file mode 100644 index 0000000..97e319e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Tell_City differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Vevay b/wakatime/packages/pytz/zoneinfo/America/Indiana/Vevay new file mode 100644 index 0000000..de6167c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Vevay differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Vincennes b/wakatime/packages/pytz/zoneinfo/America/Indiana/Vincennes new file mode 100644 index 0000000..b79f672 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Vincennes differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indiana/Winamac b/wakatime/packages/pytz/zoneinfo/America/Indiana/Winamac new file mode 100644 index 0000000..b2611e7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indiana/Winamac differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Indianapolis b/wakatime/packages/pytz/zoneinfo/America/Indianapolis new file mode 100644 index 0000000..aa3dfc4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Indianapolis differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Inuvik b/wakatime/packages/pytz/zoneinfo/America/Inuvik new file mode 100644 index 0000000..c17af37 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Inuvik differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Iqaluit b/wakatime/packages/pytz/zoneinfo/America/Iqaluit new file mode 100644 index 0000000..cea5c2e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Iqaluit differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Jamaica b/wakatime/packages/pytz/zoneinfo/America/Jamaica new file mode 100644 index 0000000..09e3eb9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Jamaica differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Jujuy b/wakatime/packages/pytz/zoneinfo/America/Jujuy new file mode 100644 index 0000000..86800f0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Jujuy differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Juneau b/wakatime/packages/pytz/zoneinfo/America/Juneau new file mode 100644 index 0000000..48bd37e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Juneau differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Kentucky/Louisville b/wakatime/packages/pytz/zoneinfo/America/Kentucky/Louisville new file mode 100644 index 0000000..65e7e19 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Kentucky/Louisville differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Kentucky/Monticello b/wakatime/packages/pytz/zoneinfo/America/Kentucky/Monticello new file mode 100644 index 0000000..fc2f1b0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Kentucky/Monticello differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Knox_IN b/wakatime/packages/pytz/zoneinfo/America/Knox_IN new file mode 100644 index 0000000..33169f4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Knox_IN differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Kralendijk b/wakatime/packages/pytz/zoneinfo/America/Kralendijk new file mode 100644 index 0000000..2d01c18 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Kralendijk differ diff --git a/wakatime/packages/pytz/zoneinfo/America/La_Paz b/wakatime/packages/pytz/zoneinfo/America/La_Paz new file mode 100644 index 0000000..2a5a15e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/La_Paz differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Lima b/wakatime/packages/pytz/zoneinfo/America/Lima new file mode 100644 index 0000000..a37eeff Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Lima differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Los_Angeles b/wakatime/packages/pytz/zoneinfo/America/Los_Angeles new file mode 100644 index 0000000..3b7ce1d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Los_Angeles differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Louisville b/wakatime/packages/pytz/zoneinfo/America/Louisville new file mode 100644 index 0000000..65e7e19 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Louisville differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Lower_Princes b/wakatime/packages/pytz/zoneinfo/America/Lower_Princes new file mode 100644 index 0000000..2d01c18 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Lower_Princes differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Maceio b/wakatime/packages/pytz/zoneinfo/America/Maceio new file mode 100644 index 0000000..b5201e8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Maceio differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Managua b/wakatime/packages/pytz/zoneinfo/America/Managua new file mode 100644 index 0000000..f1c3504 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Managua differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Manaus b/wakatime/packages/pytz/zoneinfo/America/Manaus new file mode 100644 index 0000000..1129211 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Manaus differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Marigot b/wakatime/packages/pytz/zoneinfo/America/Marigot new file mode 100644 index 0000000..15c0f1f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Marigot differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Martinique b/wakatime/packages/pytz/zoneinfo/America/Martinique new file mode 100644 index 0000000..c223ef5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Martinique differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Matamoros b/wakatime/packages/pytz/zoneinfo/America/Matamoros new file mode 100644 index 0000000..5c59984 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Matamoros differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Mazatlan b/wakatime/packages/pytz/zoneinfo/America/Mazatlan new file mode 100644 index 0000000..43ee12d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Mazatlan differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Mendoza b/wakatime/packages/pytz/zoneinfo/America/Mendoza new file mode 100644 index 0000000..76afd59 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Mendoza differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Menominee b/wakatime/packages/pytz/zoneinfo/America/Menominee new file mode 100644 index 0000000..438f5ff Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Menominee differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Merida b/wakatime/packages/pytz/zoneinfo/America/Merida new file mode 100644 index 0000000..b46298e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Merida differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Metlakatla b/wakatime/packages/pytz/zoneinfo/America/Metlakatla new file mode 100644 index 0000000..4145b9a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Metlakatla differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Mexico_City b/wakatime/packages/pytz/zoneinfo/America/Mexico_City new file mode 100644 index 0000000..1434ab0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Mexico_City differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Miquelon b/wakatime/packages/pytz/zoneinfo/America/Miquelon new file mode 100644 index 0000000..52cd391 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Miquelon differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Moncton b/wakatime/packages/pytz/zoneinfo/America/Moncton new file mode 100644 index 0000000..b51125e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Moncton differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Monterrey b/wakatime/packages/pytz/zoneinfo/America/Monterrey new file mode 100644 index 0000000..7dc5057 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Monterrey differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Montevideo b/wakatime/packages/pytz/zoneinfo/America/Montevideo new file mode 100644 index 0000000..4745f0d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Montevideo differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Montreal b/wakatime/packages/pytz/zoneinfo/America/Montreal new file mode 100644 index 0000000..47633bd Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Montreal differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Montserrat b/wakatime/packages/pytz/zoneinfo/America/Montserrat new file mode 100644 index 0000000..ee5043a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Montserrat differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Nassau b/wakatime/packages/pytz/zoneinfo/America/Nassau new file mode 100644 index 0000000..5091eb5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Nassau differ diff --git a/wakatime/packages/pytz/zoneinfo/America/New_York b/wakatime/packages/pytz/zoneinfo/America/New_York new file mode 100644 index 0000000..b2c2377 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/New_York differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Nipigon b/wakatime/packages/pytz/zoneinfo/America/Nipigon new file mode 100644 index 0000000..619f1f7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Nipigon differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Nome b/wakatime/packages/pytz/zoneinfo/America/Nome new file mode 100644 index 0000000..b682bfd Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Nome differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Noronha b/wakatime/packages/pytz/zoneinfo/America/Noronha new file mode 100644 index 0000000..c602390 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Noronha differ diff --git a/wakatime/packages/pytz/zoneinfo/America/North_Dakota/Beulah b/wakatime/packages/pytz/zoneinfo/America/North_Dakota/Beulah new file mode 100644 index 0000000..c1e3b02 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/North_Dakota/Beulah differ diff --git a/wakatime/packages/pytz/zoneinfo/America/North_Dakota/Center b/wakatime/packages/pytz/zoneinfo/America/North_Dakota/Center new file mode 100644 index 0000000..786ba17 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/North_Dakota/Center differ diff --git a/wakatime/packages/pytz/zoneinfo/America/North_Dakota/New_Salem b/wakatime/packages/pytz/zoneinfo/America/North_Dakota/New_Salem new file mode 100644 index 0000000..3488e46 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/North_Dakota/New_Salem differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Ojinaga b/wakatime/packages/pytz/zoneinfo/America/Ojinaga new file mode 100644 index 0000000..37d7830 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Ojinaga differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Panama b/wakatime/packages/pytz/zoneinfo/America/Panama new file mode 100644 index 0000000..3a4ff2a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Panama differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Pangnirtung b/wakatime/packages/pytz/zoneinfo/America/Pangnirtung new file mode 100644 index 0000000..80a6009 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Pangnirtung differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Paramaribo b/wakatime/packages/pytz/zoneinfo/America/Paramaribo new file mode 100644 index 0000000..6f889cc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Paramaribo differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Phoenix b/wakatime/packages/pytz/zoneinfo/America/Phoenix new file mode 100644 index 0000000..6758902 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Phoenix differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Port-au-Prince b/wakatime/packages/pytz/zoneinfo/America/Port-au-Prince new file mode 100644 index 0000000..3f86e8a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Port-au-Prince differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Port_of_Spain b/wakatime/packages/pytz/zoneinfo/America/Port_of_Spain new file mode 100644 index 0000000..bdedd1b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Port_of_Spain differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Porto_Acre b/wakatime/packages/pytz/zoneinfo/America/Porto_Acre new file mode 100644 index 0000000..7be212b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Porto_Acre differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Porto_Velho b/wakatime/packages/pytz/zoneinfo/America/Porto_Velho new file mode 100644 index 0000000..1277479 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Porto_Velho differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Puerto_Rico b/wakatime/packages/pytz/zoneinfo/America/Puerto_Rico new file mode 100644 index 0000000..eada37a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Puerto_Rico differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Rainy_River b/wakatime/packages/pytz/zoneinfo/America/Rainy_River new file mode 100644 index 0000000..e006a30 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Rainy_River differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Rankin_Inlet b/wakatime/packages/pytz/zoneinfo/America/Rankin_Inlet new file mode 100644 index 0000000..9919571 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Rankin_Inlet differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Recife b/wakatime/packages/pytz/zoneinfo/America/Recife new file mode 100644 index 0000000..0903a77 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Recife differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Regina b/wakatime/packages/pytz/zoneinfo/America/Regina new file mode 100644 index 0000000..20c9c84 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Regina differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Resolute b/wakatime/packages/pytz/zoneinfo/America/Resolute new file mode 100644 index 0000000..7713f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Resolute differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Rio_Branco b/wakatime/packages/pytz/zoneinfo/America/Rio_Branco new file mode 100644 index 0000000..7be212b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Rio_Branco differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Rosario b/wakatime/packages/pytz/zoneinfo/America/Rosario new file mode 100644 index 0000000..a703e95 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Rosario differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Santa_Isabel b/wakatime/packages/pytz/zoneinfo/America/Santa_Isabel new file mode 100644 index 0000000..80a2f2d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Santa_Isabel differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Santarem b/wakatime/packages/pytz/zoneinfo/America/Santarem new file mode 100644 index 0000000..4541952 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Santarem differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Santiago b/wakatime/packages/pytz/zoneinfo/America/Santiago new file mode 100644 index 0000000..910cdc9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Santiago differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Santo_Domingo b/wakatime/packages/pytz/zoneinfo/America/Santo_Domingo new file mode 100644 index 0000000..23ace9a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Santo_Domingo differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Sao_Paulo b/wakatime/packages/pytz/zoneinfo/America/Sao_Paulo new file mode 100644 index 0000000..8df63a1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Sao_Paulo differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Scoresbysund b/wakatime/packages/pytz/zoneinfo/America/Scoresbysund new file mode 100644 index 0000000..fae3757 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Scoresbysund differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Shiprock b/wakatime/packages/pytz/zoneinfo/America/Shiprock new file mode 100644 index 0000000..f8908fe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Shiprock differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Sitka b/wakatime/packages/pytz/zoneinfo/America/Sitka new file mode 100644 index 0000000..f2ae47a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Sitka differ diff --git a/wakatime/packages/pytz/zoneinfo/America/St_Barthelemy b/wakatime/packages/pytz/zoneinfo/America/St_Barthelemy new file mode 100644 index 0000000..15c0f1f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/St_Barthelemy differ diff --git a/wakatime/packages/pytz/zoneinfo/America/St_Johns b/wakatime/packages/pytz/zoneinfo/America/St_Johns new file mode 100644 index 0000000..e7a18d6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/St_Johns differ diff --git a/wakatime/packages/pytz/zoneinfo/America/St_Kitts b/wakatime/packages/pytz/zoneinfo/America/St_Kitts new file mode 100644 index 0000000..911d222 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/St_Kitts differ diff --git a/wakatime/packages/pytz/zoneinfo/America/St_Lucia b/wakatime/packages/pytz/zoneinfo/America/St_Lucia new file mode 100644 index 0000000..b37a1cf Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/St_Lucia differ diff --git a/wakatime/packages/pytz/zoneinfo/America/St_Thomas b/wakatime/packages/pytz/zoneinfo/America/St_Thomas new file mode 100644 index 0000000..482f0b5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/St_Thomas differ diff --git a/wakatime/packages/pytz/zoneinfo/America/St_Vincent b/wakatime/packages/pytz/zoneinfo/America/St_Vincent new file mode 100644 index 0000000..e553af7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/St_Vincent differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Swift_Current b/wakatime/packages/pytz/zoneinfo/America/Swift_Current new file mode 100644 index 0000000..8e9ef25 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Swift_Current differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Tegucigalpa b/wakatime/packages/pytz/zoneinfo/America/Tegucigalpa new file mode 100644 index 0000000..477e939 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Tegucigalpa differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Thule b/wakatime/packages/pytz/zoneinfo/America/Thule new file mode 100644 index 0000000..2969ebe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Thule differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Thunder_Bay b/wakatime/packages/pytz/zoneinfo/America/Thunder_Bay new file mode 100644 index 0000000..34f750b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Thunder_Bay differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Tijuana b/wakatime/packages/pytz/zoneinfo/America/Tijuana new file mode 100644 index 0000000..fffdc24 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Tijuana differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Toronto b/wakatime/packages/pytz/zoneinfo/America/Toronto new file mode 100644 index 0000000..1698477 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Toronto differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Tortola b/wakatime/packages/pytz/zoneinfo/America/Tortola new file mode 100644 index 0000000..6f9d932 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Tortola differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Vancouver b/wakatime/packages/pytz/zoneinfo/America/Vancouver new file mode 100644 index 0000000..0c1fa52 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Vancouver differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Virgin b/wakatime/packages/pytz/zoneinfo/America/Virgin new file mode 100644 index 0000000..482f0b5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Virgin differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Whitehorse b/wakatime/packages/pytz/zoneinfo/America/Whitehorse new file mode 100644 index 0000000..15216d5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Whitehorse differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Winnipeg b/wakatime/packages/pytz/zoneinfo/America/Winnipeg new file mode 100644 index 0000000..2d22791 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Winnipeg differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Yakutat b/wakatime/packages/pytz/zoneinfo/America/Yakutat new file mode 100644 index 0000000..8071602 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Yakutat differ diff --git a/wakatime/packages/pytz/zoneinfo/America/Yellowknife b/wakatime/packages/pytz/zoneinfo/America/Yellowknife new file mode 100644 index 0000000..947bec9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/America/Yellowknife differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Casey b/wakatime/packages/pytz/zoneinfo/Antarctica/Casey new file mode 100644 index 0000000..8ebf059 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Casey differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Davis b/wakatime/packages/pytz/zoneinfo/Antarctica/Davis new file mode 100644 index 0000000..cd7acad Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Davis differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/DumontDUrville b/wakatime/packages/pytz/zoneinfo/Antarctica/DumontDUrville new file mode 100644 index 0000000..5ea18e6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/DumontDUrville differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Macquarie b/wakatime/packages/pytz/zoneinfo/Antarctica/Macquarie new file mode 100644 index 0000000..cbad31b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Macquarie differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Mawson b/wakatime/packages/pytz/zoneinfo/Antarctica/Mawson new file mode 100644 index 0000000..48e24e1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Mawson differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/McMurdo b/wakatime/packages/pytz/zoneinfo/Antarctica/McMurdo new file mode 100644 index 0000000..62ac42f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/McMurdo differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Palmer b/wakatime/packages/pytz/zoneinfo/Antarctica/Palmer new file mode 100644 index 0000000..3d6bd73 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Palmer differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Rothera b/wakatime/packages/pytz/zoneinfo/Antarctica/Rothera new file mode 100644 index 0000000..b5dc735 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Rothera differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/South_Pole b/wakatime/packages/pytz/zoneinfo/Antarctica/South_Pole new file mode 100644 index 0000000..62ac42f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/South_Pole differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Syowa b/wakatime/packages/pytz/zoneinfo/Antarctica/Syowa new file mode 100644 index 0000000..ba6e5f3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Syowa differ diff --git a/wakatime/packages/pytz/zoneinfo/Antarctica/Vostok b/wakatime/packages/pytz/zoneinfo/Antarctica/Vostok new file mode 100644 index 0000000..e19e2b7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Antarctica/Vostok differ diff --git a/wakatime/packages/pytz/zoneinfo/Arctic/Longyearbyen b/wakatime/packages/pytz/zoneinfo/Arctic/Longyearbyen new file mode 100644 index 0000000..6326961 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Arctic/Longyearbyen differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Aden b/wakatime/packages/pytz/zoneinfo/Asia/Aden new file mode 100644 index 0000000..5948b31 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Aden differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Almaty b/wakatime/packages/pytz/zoneinfo/Asia/Almaty new file mode 100644 index 0000000..52f941e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Almaty differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Amman b/wakatime/packages/pytz/zoneinfo/Asia/Amman new file mode 100644 index 0000000..3e7d0da Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Amman differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Anadyr b/wakatime/packages/pytz/zoneinfo/Asia/Anadyr new file mode 100644 index 0000000..2841a63 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Anadyr differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Aqtau b/wakatime/packages/pytz/zoneinfo/Asia/Aqtau new file mode 100644 index 0000000..27a3d50 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Aqtau differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Aqtobe b/wakatime/packages/pytz/zoneinfo/Asia/Aqtobe new file mode 100644 index 0000000..3683be2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Aqtobe differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ashgabat b/wakatime/packages/pytz/zoneinfo/Asia/Ashgabat new file mode 100644 index 0000000..589dbc1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ashgabat differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ashkhabad b/wakatime/packages/pytz/zoneinfo/Asia/Ashkhabad new file mode 100644 index 0000000..589dbc1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ashkhabad differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Baghdad b/wakatime/packages/pytz/zoneinfo/Asia/Baghdad new file mode 100644 index 0000000..3ad3614 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Baghdad differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Bahrain b/wakatime/packages/pytz/zoneinfo/Asia/Bahrain new file mode 100644 index 0000000..d87b7ce Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Bahrain differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Baku b/wakatime/packages/pytz/zoneinfo/Asia/Baku new file mode 100644 index 0000000..72ae96e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Baku differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Bangkok b/wakatime/packages/pytz/zoneinfo/Asia/Bangkok new file mode 100644 index 0000000..44a1018 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Bangkok differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Beirut b/wakatime/packages/pytz/zoneinfo/Asia/Beirut new file mode 100644 index 0000000..c1270bc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Beirut differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Bishkek b/wakatime/packages/pytz/zoneinfo/Asia/Bishkek new file mode 100644 index 0000000..fc827d8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Bishkek differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Brunei b/wakatime/packages/pytz/zoneinfo/Asia/Brunei new file mode 100644 index 0000000..d6e713d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Brunei differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Calcutta b/wakatime/packages/pytz/zoneinfo/Asia/Calcutta new file mode 100644 index 0000000..bc909c9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Calcutta differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Choibalsan b/wakatime/packages/pytz/zoneinfo/Asia/Choibalsan new file mode 100644 index 0000000..043b7ed Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Choibalsan differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Chongqing b/wakatime/packages/pytz/zoneinfo/Asia/Chongqing new file mode 100644 index 0000000..8a7a28a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Chongqing differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Chungking b/wakatime/packages/pytz/zoneinfo/Asia/Chungking new file mode 100644 index 0000000..8a7a28a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Chungking differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Colombo b/wakatime/packages/pytz/zoneinfo/Asia/Colombo new file mode 100644 index 0000000..c71c050 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Colombo differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Dacca b/wakatime/packages/pytz/zoneinfo/Asia/Dacca new file mode 100644 index 0000000..52e98ff Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Dacca differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Damascus b/wakatime/packages/pytz/zoneinfo/Asia/Damascus new file mode 100644 index 0000000..4b610b5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Damascus differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Dhaka b/wakatime/packages/pytz/zoneinfo/Asia/Dhaka new file mode 100644 index 0000000..52e98ff Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Dhaka differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Dili b/wakatime/packages/pytz/zoneinfo/Asia/Dili new file mode 100644 index 0000000..37bfc4b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Dili differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Dubai b/wakatime/packages/pytz/zoneinfo/Asia/Dubai new file mode 100644 index 0000000..53f70d5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Dubai differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Dushanbe b/wakatime/packages/pytz/zoneinfo/Asia/Dushanbe new file mode 100644 index 0000000..c65ff2a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Dushanbe differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Gaza b/wakatime/packages/pytz/zoneinfo/Asia/Gaza new file mode 100644 index 0000000..a010d76 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Gaza differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Harbin b/wakatime/packages/pytz/zoneinfo/Asia/Harbin new file mode 100644 index 0000000..11e352a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Harbin differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Hebron b/wakatime/packages/pytz/zoneinfo/Asia/Hebron new file mode 100644 index 0000000..2d359ba Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Hebron differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ho_Chi_Minh b/wakatime/packages/pytz/zoneinfo/Asia/Ho_Chi_Minh new file mode 100644 index 0000000..6401a10 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ho_Chi_Minh differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Hong_Kong b/wakatime/packages/pytz/zoneinfo/Asia/Hong_Kong new file mode 100644 index 0000000..8e5c581 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Hong_Kong differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Hovd b/wakatime/packages/pytz/zoneinfo/Asia/Hovd new file mode 100644 index 0000000..27fab05 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Hovd differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Irkutsk b/wakatime/packages/pytz/zoneinfo/Asia/Irkutsk new file mode 100644 index 0000000..7c38e7f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Irkutsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Istanbul b/wakatime/packages/pytz/zoneinfo/Asia/Istanbul new file mode 100644 index 0000000..8640995 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Istanbul differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Jakarta b/wakatime/packages/pytz/zoneinfo/Asia/Jakarta new file mode 100644 index 0000000..a4cbe0c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Jakarta differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Jayapura b/wakatime/packages/pytz/zoneinfo/Asia/Jayapura new file mode 100644 index 0000000..0e79d31 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Jayapura differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Jerusalem b/wakatime/packages/pytz/zoneinfo/Asia/Jerusalem new file mode 100644 index 0000000..8a0c8db Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Jerusalem differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kabul b/wakatime/packages/pytz/zoneinfo/Asia/Kabul new file mode 100644 index 0000000..7392c04 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kabul differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kamchatka b/wakatime/packages/pytz/zoneinfo/Asia/Kamchatka new file mode 100644 index 0000000..090bf48 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kamchatka differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Karachi b/wakatime/packages/pytz/zoneinfo/Asia/Karachi new file mode 100644 index 0000000..a8ff8cb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Karachi differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kashgar b/wakatime/packages/pytz/zoneinfo/Asia/Kashgar new file mode 100644 index 0000000..25e6494 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kashgar differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kathmandu b/wakatime/packages/pytz/zoneinfo/Asia/Kathmandu new file mode 100644 index 0000000..65c7b63 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kathmandu differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Katmandu b/wakatime/packages/pytz/zoneinfo/Asia/Katmandu new file mode 100644 index 0000000..65c7b63 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Katmandu differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Khandyga b/wakatime/packages/pytz/zoneinfo/Asia/Khandyga new file mode 100644 index 0000000..39d2c2d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Khandyga differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kolkata b/wakatime/packages/pytz/zoneinfo/Asia/Kolkata new file mode 100644 index 0000000..bc909c9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kolkata differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Krasnoyarsk b/wakatime/packages/pytz/zoneinfo/Asia/Krasnoyarsk new file mode 100644 index 0000000..580e8dd Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Krasnoyarsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kuala_Lumpur b/wakatime/packages/pytz/zoneinfo/Asia/Kuala_Lumpur new file mode 100644 index 0000000..41bba37 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kuala_Lumpur differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kuching b/wakatime/packages/pytz/zoneinfo/Asia/Kuching new file mode 100644 index 0000000..272f465 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kuching differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Kuwait b/wakatime/packages/pytz/zoneinfo/Asia/Kuwait new file mode 100644 index 0000000..1dab31c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Kuwait differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Macao b/wakatime/packages/pytz/zoneinfo/Asia/Macao new file mode 100644 index 0000000..7c93779 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Macao differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Macau b/wakatime/packages/pytz/zoneinfo/Asia/Macau new file mode 100644 index 0000000..7c93779 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Macau differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Magadan b/wakatime/packages/pytz/zoneinfo/Asia/Magadan new file mode 100644 index 0000000..e3c76b5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Magadan differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Makassar b/wakatime/packages/pytz/zoneinfo/Asia/Makassar new file mode 100644 index 0000000..f358233 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Makassar differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Manila b/wakatime/packages/pytz/zoneinfo/Asia/Manila new file mode 100644 index 0000000..0e90ba6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Manila differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Muscat b/wakatime/packages/pytz/zoneinfo/Asia/Muscat new file mode 100644 index 0000000..daee4cc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Muscat differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Nicosia b/wakatime/packages/pytz/zoneinfo/Asia/Nicosia new file mode 100644 index 0000000..f7f10ab Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Nicosia differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Novokuznetsk b/wakatime/packages/pytz/zoneinfo/Asia/Novokuznetsk new file mode 100644 index 0000000..f78c1f8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Novokuznetsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Novosibirsk b/wakatime/packages/pytz/zoneinfo/Asia/Novosibirsk new file mode 100644 index 0000000..c401a98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Novosibirsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Omsk b/wakatime/packages/pytz/zoneinfo/Asia/Omsk new file mode 100644 index 0000000..a3dbb4b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Omsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Oral b/wakatime/packages/pytz/zoneinfo/Asia/Oral new file mode 100644 index 0000000..8da2a1d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Oral differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Phnom_Penh b/wakatime/packages/pytz/zoneinfo/Asia/Phnom_Penh new file mode 100644 index 0000000..5a52722 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Phnom_Penh differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Pontianak b/wakatime/packages/pytz/zoneinfo/Asia/Pontianak new file mode 100644 index 0000000..3e882dc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Pontianak differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Pyongyang b/wakatime/packages/pytz/zoneinfo/Asia/Pyongyang new file mode 100644 index 0000000..9dbd3c1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Pyongyang differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Qatar b/wakatime/packages/pytz/zoneinfo/Asia/Qatar new file mode 100644 index 0000000..49668c2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Qatar differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Qyzylorda b/wakatime/packages/pytz/zoneinfo/Asia/Qyzylorda new file mode 100644 index 0000000..fc3bf46 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Qyzylorda differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Rangoon b/wakatime/packages/pytz/zoneinfo/Asia/Rangoon new file mode 100644 index 0000000..68591c5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Rangoon differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Riyadh b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh new file mode 100644 index 0000000..6ebe393 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Riyadh87 b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh87 new file mode 100644 index 0000000..ebe16c4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh87 differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Riyadh88 b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh88 new file mode 100644 index 0000000..7f2224b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh88 differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Riyadh89 b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh89 new file mode 100644 index 0000000..a50ca48 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Riyadh89 differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Saigon b/wakatime/packages/pytz/zoneinfo/Asia/Saigon new file mode 100644 index 0000000..6401a10 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Saigon differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Sakhalin b/wakatime/packages/pytz/zoneinfo/Asia/Sakhalin new file mode 100644 index 0000000..f5105a3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Sakhalin differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Samarkand b/wakatime/packages/pytz/zoneinfo/Asia/Samarkand new file mode 100644 index 0000000..191c07c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Samarkand differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Seoul b/wakatime/packages/pytz/zoneinfo/Asia/Seoul new file mode 100644 index 0000000..96bb0c3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Seoul differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Shanghai b/wakatime/packages/pytz/zoneinfo/Asia/Shanghai new file mode 100644 index 0000000..af6d6fb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Shanghai differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Singapore b/wakatime/packages/pytz/zoneinfo/Asia/Singapore new file mode 100644 index 0000000..a6f2db8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Singapore differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Taipei b/wakatime/packages/pytz/zoneinfo/Asia/Taipei new file mode 100644 index 0000000..70cfb27 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Taipei differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Tashkent b/wakatime/packages/pytz/zoneinfo/Asia/Tashkent new file mode 100644 index 0000000..5bc8062 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Tashkent differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Tbilisi b/wakatime/packages/pytz/zoneinfo/Asia/Tbilisi new file mode 100644 index 0000000..d7e4054 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Tbilisi differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Tehran b/wakatime/packages/pytz/zoneinfo/Asia/Tehran new file mode 100644 index 0000000..16149ed Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Tehran differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Tel_Aviv b/wakatime/packages/pytz/zoneinfo/Asia/Tel_Aviv new file mode 100644 index 0000000..8a0c8db Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Tel_Aviv differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Thimbu b/wakatime/packages/pytz/zoneinfo/Asia/Thimbu new file mode 100644 index 0000000..90294ae Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Thimbu differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Thimphu b/wakatime/packages/pytz/zoneinfo/Asia/Thimphu new file mode 100644 index 0000000..90294ae Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Thimphu differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Tokyo b/wakatime/packages/pytz/zoneinfo/Asia/Tokyo new file mode 100644 index 0000000..058c1e9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Tokyo differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ujung_Pandang b/wakatime/packages/pytz/zoneinfo/Asia/Ujung_Pandang new file mode 100644 index 0000000..f358233 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ujung_Pandang differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ulaanbaatar b/wakatime/packages/pytz/zoneinfo/Asia/Ulaanbaatar new file mode 100644 index 0000000..39bdd89 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ulaanbaatar differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ulan_Bator b/wakatime/packages/pytz/zoneinfo/Asia/Ulan_Bator new file mode 100644 index 0000000..39bdd89 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ulan_Bator differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Urumqi b/wakatime/packages/pytz/zoneinfo/Asia/Urumqi new file mode 100644 index 0000000..f46ff38 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Urumqi differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Ust-Nera b/wakatime/packages/pytz/zoneinfo/Asia/Ust-Nera new file mode 100644 index 0000000..ae89650 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Ust-Nera differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Vientiane b/wakatime/packages/pytz/zoneinfo/Asia/Vientiane new file mode 100644 index 0000000..7d39589 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Vientiane differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Vladivostok b/wakatime/packages/pytz/zoneinfo/Asia/Vladivostok new file mode 100644 index 0000000..1cae6d0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Vladivostok differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Yakutsk b/wakatime/packages/pytz/zoneinfo/Asia/Yakutsk new file mode 100644 index 0000000..461901f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Yakutsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Yekaterinburg b/wakatime/packages/pytz/zoneinfo/Asia/Yekaterinburg new file mode 100644 index 0000000..aca50c6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Yekaterinburg differ diff --git a/wakatime/packages/pytz/zoneinfo/Asia/Yerevan b/wakatime/packages/pytz/zoneinfo/Asia/Yerevan new file mode 100644 index 0000000..c4ab219 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Asia/Yerevan differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Azores b/wakatime/packages/pytz/zoneinfo/Atlantic/Azores new file mode 100644 index 0000000..19e4004 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Azores differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Bermuda b/wakatime/packages/pytz/zoneinfo/Atlantic/Bermuda new file mode 100644 index 0000000..3a5c6db Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Bermuda differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Canary b/wakatime/packages/pytz/zoneinfo/Atlantic/Canary new file mode 100644 index 0000000..972388b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Canary differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Cape_Verde b/wakatime/packages/pytz/zoneinfo/Atlantic/Cape_Verde new file mode 100644 index 0000000..5238ac8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Cape_Verde differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Faeroe b/wakatime/packages/pytz/zoneinfo/Atlantic/Faeroe new file mode 100644 index 0000000..4dab7ef Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Faeroe differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Faroe b/wakatime/packages/pytz/zoneinfo/Atlantic/Faroe new file mode 100644 index 0000000..4dab7ef Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Faroe differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Jan_Mayen b/wakatime/packages/pytz/zoneinfo/Atlantic/Jan_Mayen new file mode 100644 index 0000000..6326961 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Jan_Mayen differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Madeira b/wakatime/packages/pytz/zoneinfo/Atlantic/Madeira new file mode 100644 index 0000000..2175096 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Madeira differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Reykjavik b/wakatime/packages/pytz/zoneinfo/Atlantic/Reykjavik new file mode 100644 index 0000000..e97f13a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Reykjavik differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/South_Georgia b/wakatime/packages/pytz/zoneinfo/Atlantic/South_Georgia new file mode 100644 index 0000000..ab2c823 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/South_Georgia differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/St_Helena b/wakatime/packages/pytz/zoneinfo/Atlantic/St_Helena new file mode 100644 index 0000000..d365e3d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/St_Helena differ diff --git a/wakatime/packages/pytz/zoneinfo/Atlantic/Stanley b/wakatime/packages/pytz/zoneinfo/Atlantic/Stanley new file mode 100644 index 0000000..34f9d02 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Atlantic/Stanley differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/ACT b/wakatime/packages/pytz/zoneinfo/Australia/ACT new file mode 100644 index 0000000..d95c245 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/ACT differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Adelaide b/wakatime/packages/pytz/zoneinfo/Australia/Adelaide new file mode 100644 index 0000000..b350cb6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Adelaide differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Brisbane b/wakatime/packages/pytz/zoneinfo/Australia/Brisbane new file mode 100644 index 0000000..3e899a1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Brisbane differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Broken_Hill b/wakatime/packages/pytz/zoneinfo/Australia/Broken_Hill new file mode 100644 index 0000000..d8f3155 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Broken_Hill differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Canberra b/wakatime/packages/pytz/zoneinfo/Australia/Canberra new file mode 100644 index 0000000..d95c245 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Canberra differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Currie b/wakatime/packages/pytz/zoneinfo/Australia/Currie new file mode 100644 index 0000000..43ca1e4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Currie differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Darwin b/wakatime/packages/pytz/zoneinfo/Australia/Darwin new file mode 100644 index 0000000..c44512f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Darwin differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Eucla b/wakatime/packages/pytz/zoneinfo/Australia/Eucla new file mode 100644 index 0000000..e78c2d4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Eucla differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Hobart b/wakatime/packages/pytz/zoneinfo/Australia/Hobart new file mode 100644 index 0000000..c4604e5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Hobart differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/LHI b/wakatime/packages/pytz/zoneinfo/Australia/LHI new file mode 100644 index 0000000..1f542d3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/LHI differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Lindeman b/wakatime/packages/pytz/zoneinfo/Australia/Lindeman new file mode 100644 index 0000000..05c3c1c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Lindeman differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Lord_Howe b/wakatime/packages/pytz/zoneinfo/Australia/Lord_Howe new file mode 100644 index 0000000..1f542d3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Lord_Howe differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Melbourne b/wakatime/packages/pytz/zoneinfo/Australia/Melbourne new file mode 100644 index 0000000..af3152f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Melbourne differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/NSW b/wakatime/packages/pytz/zoneinfo/Australia/NSW new file mode 100644 index 0000000..d95c245 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/NSW differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/North b/wakatime/packages/pytz/zoneinfo/Australia/North new file mode 100644 index 0000000..c44512f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/North differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Perth b/wakatime/packages/pytz/zoneinfo/Australia/Perth new file mode 100644 index 0000000..1c7ebb7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Perth differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Queensland b/wakatime/packages/pytz/zoneinfo/Australia/Queensland new file mode 100644 index 0000000..3e899a1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Queensland differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/South b/wakatime/packages/pytz/zoneinfo/Australia/South new file mode 100644 index 0000000..b350cb6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/South differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Sydney b/wakatime/packages/pytz/zoneinfo/Australia/Sydney new file mode 100644 index 0000000..d95c245 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Sydney differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Tasmania b/wakatime/packages/pytz/zoneinfo/Australia/Tasmania new file mode 100644 index 0000000..c4604e5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Tasmania differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Victoria b/wakatime/packages/pytz/zoneinfo/Australia/Victoria new file mode 100644 index 0000000..af3152f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Victoria differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/West b/wakatime/packages/pytz/zoneinfo/Australia/West new file mode 100644 index 0000000..1c7ebb7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/West differ diff --git a/wakatime/packages/pytz/zoneinfo/Australia/Yancowinna b/wakatime/packages/pytz/zoneinfo/Australia/Yancowinna new file mode 100644 index 0000000..d8f3155 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Australia/Yancowinna differ diff --git a/wakatime/packages/pytz/zoneinfo/Brazil/Acre b/wakatime/packages/pytz/zoneinfo/Brazil/Acre new file mode 100644 index 0000000..7be212b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Brazil/Acre differ diff --git a/wakatime/packages/pytz/zoneinfo/Brazil/DeNoronha b/wakatime/packages/pytz/zoneinfo/Brazil/DeNoronha new file mode 100644 index 0000000..c602390 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Brazil/DeNoronha differ diff --git a/wakatime/packages/pytz/zoneinfo/Brazil/East b/wakatime/packages/pytz/zoneinfo/Brazil/East new file mode 100644 index 0000000..8df63a1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Brazil/East differ diff --git a/wakatime/packages/pytz/zoneinfo/Brazil/West b/wakatime/packages/pytz/zoneinfo/Brazil/West new file mode 100644 index 0000000..1129211 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Brazil/West differ diff --git a/wakatime/packages/pytz/zoneinfo/CET b/wakatime/packages/pytz/zoneinfo/CET new file mode 100644 index 0000000..4c4f8ef Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/CET differ diff --git a/wakatime/packages/pytz/zoneinfo/CST6CDT b/wakatime/packages/pytz/zoneinfo/CST6CDT new file mode 100644 index 0000000..5c8a1d9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/CST6CDT differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Atlantic b/wakatime/packages/pytz/zoneinfo/Canada/Atlantic new file mode 100644 index 0000000..756099a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Atlantic differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Central b/wakatime/packages/pytz/zoneinfo/Canada/Central new file mode 100644 index 0000000..2d22791 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Central differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/East-Saskatchewan b/wakatime/packages/pytz/zoneinfo/Canada/East-Saskatchewan new file mode 100644 index 0000000..20c9c84 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/East-Saskatchewan differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Eastern b/wakatime/packages/pytz/zoneinfo/Canada/Eastern new file mode 100644 index 0000000..1698477 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Eastern differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Mountain b/wakatime/packages/pytz/zoneinfo/Canada/Mountain new file mode 100644 index 0000000..3fa0579 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Mountain differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Newfoundland b/wakatime/packages/pytz/zoneinfo/Canada/Newfoundland new file mode 100644 index 0000000..e7a18d6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Newfoundland differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Pacific b/wakatime/packages/pytz/zoneinfo/Canada/Pacific new file mode 100644 index 0000000..0c1fa52 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Pacific differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Saskatchewan b/wakatime/packages/pytz/zoneinfo/Canada/Saskatchewan new file mode 100644 index 0000000..20c9c84 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Saskatchewan differ diff --git a/wakatime/packages/pytz/zoneinfo/Canada/Yukon b/wakatime/packages/pytz/zoneinfo/Canada/Yukon new file mode 100644 index 0000000..15216d5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Canada/Yukon differ diff --git a/wakatime/packages/pytz/zoneinfo/Chile/Continental b/wakatime/packages/pytz/zoneinfo/Chile/Continental new file mode 100644 index 0000000..910cdc9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Chile/Continental differ diff --git a/wakatime/packages/pytz/zoneinfo/Chile/EasterIsland b/wakatime/packages/pytz/zoneinfo/Chile/EasterIsland new file mode 100644 index 0000000..f22cc98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Chile/EasterIsland differ diff --git a/wakatime/packages/pytz/zoneinfo/Cuba b/wakatime/packages/pytz/zoneinfo/Cuba new file mode 100644 index 0000000..28aca00 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Cuba differ diff --git a/wakatime/packages/pytz/zoneinfo/EET b/wakatime/packages/pytz/zoneinfo/EET new file mode 100644 index 0000000..beb273a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/EET differ diff --git a/wakatime/packages/pytz/zoneinfo/EST b/wakatime/packages/pytz/zoneinfo/EST new file mode 100644 index 0000000..074a4fc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/EST differ diff --git a/wakatime/packages/pytz/zoneinfo/EST5EDT b/wakatime/packages/pytz/zoneinfo/EST5EDT new file mode 100644 index 0000000..54541fc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/EST5EDT differ diff --git a/wakatime/packages/pytz/zoneinfo/Egypt b/wakatime/packages/pytz/zoneinfo/Egypt new file mode 100644 index 0000000..1c6a2fc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Egypt differ diff --git a/wakatime/packages/pytz/zoneinfo/Eire b/wakatime/packages/pytz/zoneinfo/Eire new file mode 100644 index 0000000..3dec026 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Eire differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT b/wakatime/packages/pytz/zoneinfo/Etc/GMT new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+0 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+0 new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+0 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+1 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+1 new file mode 100644 index 0000000..67b88c9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+1 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+10 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+10 new file mode 100644 index 0000000..d564b28 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+10 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+11 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+11 new file mode 100644 index 0000000..52eb573 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+11 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+12 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+12 new file mode 100644 index 0000000..c54cead Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+12 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+2 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+2 new file mode 100644 index 0000000..e43b63f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+2 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+3 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+3 new file mode 100644 index 0000000..f029bac Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+3 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+4 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+4 new file mode 100644 index 0000000..0ad0ee3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+4 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+5 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+5 new file mode 100644 index 0000000..e53f3fe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+5 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+6 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+6 new file mode 100644 index 0000000..b411496 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+6 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+7 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+7 new file mode 100644 index 0000000..32fa6dc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+7 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+8 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+8 new file mode 100644 index 0000000..512578c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+8 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT+9 b/wakatime/packages/pytz/zoneinfo/Etc/GMT+9 new file mode 100644 index 0000000..d3e47e7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT+9 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-0 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-0 new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-0 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-1 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-1 new file mode 100644 index 0000000..9a6adeb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-1 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-10 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-10 new file mode 100644 index 0000000..37b93fb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-10 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-11 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-11 new file mode 100644 index 0000000..f1af0e2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-11 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-12 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-12 new file mode 100644 index 0000000..0fa4a8d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-12 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-13 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-13 new file mode 100644 index 0000000..0a5dbe1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-13 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-14 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-14 new file mode 100644 index 0000000..41c6a1d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-14 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-2 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-2 new file mode 100644 index 0000000..9f63268 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-2 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-3 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-3 new file mode 100644 index 0000000..38ccd8a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-3 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-4 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-4 new file mode 100644 index 0000000..43badfb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-4 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-5 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-5 new file mode 100644 index 0000000..c88cf21 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-5 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-6 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-6 new file mode 100644 index 0000000..c1a0634 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-6 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-7 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-7 new file mode 100644 index 0000000..bc152ef Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-7 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-8 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-8 new file mode 100644 index 0000000..2c0de20 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-8 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT-9 b/wakatime/packages/pytz/zoneinfo/Etc/GMT-9 new file mode 100644 index 0000000..8a3bd45 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT-9 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/GMT0 b/wakatime/packages/pytz/zoneinfo/Etc/GMT0 new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/GMT0 differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/Greenwich b/wakatime/packages/pytz/zoneinfo/Etc/Greenwich new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/Greenwich differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/UCT b/wakatime/packages/pytz/zoneinfo/Etc/UCT new file mode 100644 index 0000000..a88c4b6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/UCT differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/UTC b/wakatime/packages/pytz/zoneinfo/Etc/UTC new file mode 100644 index 0000000..5583f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/UTC differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/Universal b/wakatime/packages/pytz/zoneinfo/Etc/Universal new file mode 100644 index 0000000..5583f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/Universal differ diff --git a/wakatime/packages/pytz/zoneinfo/Etc/Zulu b/wakatime/packages/pytz/zoneinfo/Etc/Zulu new file mode 100644 index 0000000..5583f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Etc/Zulu differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Amsterdam b/wakatime/packages/pytz/zoneinfo/Europe/Amsterdam new file mode 100644 index 0000000..30ca324 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Amsterdam differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Andorra b/wakatime/packages/pytz/zoneinfo/Europe/Andorra new file mode 100644 index 0000000..cf9533a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Andorra differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Athens b/wakatime/packages/pytz/zoneinfo/Europe/Athens new file mode 100644 index 0000000..726e56c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Athens differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Belfast b/wakatime/packages/pytz/zoneinfo/Europe/Belfast new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Belfast differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Belgrade b/wakatime/packages/pytz/zoneinfo/Europe/Belgrade new file mode 100644 index 0000000..5f0389f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Belgrade differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Berlin b/wakatime/packages/pytz/zoneinfo/Europe/Berlin new file mode 100644 index 0000000..96059c7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Berlin differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Bratislava b/wakatime/packages/pytz/zoneinfo/Europe/Bratislava new file mode 100644 index 0000000..9ab78e9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Bratislava differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Brussels b/wakatime/packages/pytz/zoneinfo/Europe/Brussels new file mode 100644 index 0000000..2791ede Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Brussels differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Bucharest b/wakatime/packages/pytz/zoneinfo/Europe/Bucharest new file mode 100644 index 0000000..de2a5f0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Bucharest differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Budapest b/wakatime/packages/pytz/zoneinfo/Europe/Budapest new file mode 100644 index 0000000..1b787b1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Budapest differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Busingen b/wakatime/packages/pytz/zoneinfo/Europe/Busingen new file mode 100644 index 0000000..0cf15c1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Busingen differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Chisinau b/wakatime/packages/pytz/zoneinfo/Europe/Chisinau new file mode 100644 index 0000000..983cc70 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Chisinau differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Copenhagen b/wakatime/packages/pytz/zoneinfo/Europe/Copenhagen new file mode 100644 index 0000000..af7e926 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Copenhagen differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Dublin b/wakatime/packages/pytz/zoneinfo/Europe/Dublin new file mode 100644 index 0000000..3dec026 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Dublin differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Gibraltar b/wakatime/packages/pytz/zoneinfo/Europe/Gibraltar new file mode 100644 index 0000000..f3dbeb6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Gibraltar differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Guernsey b/wakatime/packages/pytz/zoneinfo/Europe/Guernsey new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Guernsey differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Helsinki b/wakatime/packages/pytz/zoneinfo/Europe/Helsinki new file mode 100644 index 0000000..19d7bab Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Helsinki differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Isle_of_Man b/wakatime/packages/pytz/zoneinfo/Europe/Isle_of_Man new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Isle_of_Man differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Istanbul b/wakatime/packages/pytz/zoneinfo/Europe/Istanbul new file mode 100644 index 0000000..8640995 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Istanbul differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Jersey b/wakatime/packages/pytz/zoneinfo/Europe/Jersey new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Jersey differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Kaliningrad b/wakatime/packages/pytz/zoneinfo/Europe/Kaliningrad new file mode 100644 index 0000000..fa6bab8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Kaliningrad differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Kiev b/wakatime/packages/pytz/zoneinfo/Europe/Kiev new file mode 100644 index 0000000..075cc02 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Kiev differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Lisbon b/wakatime/packages/pytz/zoneinfo/Europe/Lisbon new file mode 100644 index 0000000..168accf Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Lisbon differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Ljubljana b/wakatime/packages/pytz/zoneinfo/Europe/Ljubljana new file mode 100644 index 0000000..5f0389f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Ljubljana differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/London b/wakatime/packages/pytz/zoneinfo/Europe/London new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/London differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Luxembourg b/wakatime/packages/pytz/zoneinfo/Europe/Luxembourg new file mode 100644 index 0000000..6c194a5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Luxembourg differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Madrid b/wakatime/packages/pytz/zoneinfo/Europe/Madrid new file mode 100644 index 0000000..9311959 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Madrid differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Malta b/wakatime/packages/pytz/zoneinfo/Europe/Malta new file mode 100644 index 0000000..5f518a1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Malta differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Mariehamn b/wakatime/packages/pytz/zoneinfo/Europe/Mariehamn new file mode 100644 index 0000000..19d7bab Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Mariehamn differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Minsk b/wakatime/packages/pytz/zoneinfo/Europe/Minsk new file mode 100644 index 0000000..ba9971c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Minsk differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Monaco b/wakatime/packages/pytz/zoneinfo/Europe/Monaco new file mode 100644 index 0000000..664f616 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Monaco differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Moscow b/wakatime/packages/pytz/zoneinfo/Europe/Moscow new file mode 100644 index 0000000..6068f8b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Moscow differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Nicosia b/wakatime/packages/pytz/zoneinfo/Europe/Nicosia new file mode 100644 index 0000000..f7f10ab Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Nicosia differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Oslo b/wakatime/packages/pytz/zoneinfo/Europe/Oslo new file mode 100644 index 0000000..6326961 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Oslo differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Paris b/wakatime/packages/pytz/zoneinfo/Europe/Paris new file mode 100644 index 0000000..fd8ea7d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Paris differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Podgorica b/wakatime/packages/pytz/zoneinfo/Europe/Podgorica new file mode 100644 index 0000000..5f0389f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Podgorica differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Prague b/wakatime/packages/pytz/zoneinfo/Europe/Prague new file mode 100644 index 0000000..9ab78e9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Prague differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Riga b/wakatime/packages/pytz/zoneinfo/Europe/Riga new file mode 100644 index 0000000..abea45d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Riga differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Rome b/wakatime/packages/pytz/zoneinfo/Europe/Rome new file mode 100644 index 0000000..28ddffe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Rome differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Samara b/wakatime/packages/pytz/zoneinfo/Europe/Samara new file mode 100644 index 0000000..fe50600 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Samara differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/San_Marino b/wakatime/packages/pytz/zoneinfo/Europe/San_Marino new file mode 100644 index 0000000..28ddffe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/San_Marino differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Sarajevo b/wakatime/packages/pytz/zoneinfo/Europe/Sarajevo new file mode 100644 index 0000000..5f0389f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Sarajevo differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Simferopol b/wakatime/packages/pytz/zoneinfo/Europe/Simferopol new file mode 100644 index 0000000..ebb63b4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Simferopol differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Skopje b/wakatime/packages/pytz/zoneinfo/Europe/Skopje new file mode 100644 index 0000000..5f0389f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Skopje differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Sofia b/wakatime/packages/pytz/zoneinfo/Europe/Sofia new file mode 100644 index 0000000..d803233 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Sofia differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Stockholm b/wakatime/packages/pytz/zoneinfo/Europe/Stockholm new file mode 100644 index 0000000..3bc6dbd Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Stockholm differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Tallinn b/wakatime/packages/pytz/zoneinfo/Europe/Tallinn new file mode 100644 index 0000000..4ba4424 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Tallinn differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Tirane b/wakatime/packages/pytz/zoneinfo/Europe/Tirane new file mode 100644 index 0000000..0b86017 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Tirane differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Tiraspol b/wakatime/packages/pytz/zoneinfo/Europe/Tiraspol new file mode 100644 index 0000000..983cc70 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Tiraspol differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Uzhgorod b/wakatime/packages/pytz/zoneinfo/Europe/Uzhgorod new file mode 100644 index 0000000..7032ab9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Uzhgorod differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Vaduz b/wakatime/packages/pytz/zoneinfo/Europe/Vaduz new file mode 100644 index 0000000..c4e20db Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Vaduz differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Vatican b/wakatime/packages/pytz/zoneinfo/Europe/Vatican new file mode 100644 index 0000000..28ddffe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Vatican differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Vienna b/wakatime/packages/pytz/zoneinfo/Europe/Vienna new file mode 100644 index 0000000..8e4c9a9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Vienna differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Vilnius b/wakatime/packages/pytz/zoneinfo/Europe/Vilnius new file mode 100644 index 0000000..b6545b2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Vilnius differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Volgograd b/wakatime/packages/pytz/zoneinfo/Europe/Volgograd new file mode 100644 index 0000000..b91e4fb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Volgograd differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Warsaw b/wakatime/packages/pytz/zoneinfo/Europe/Warsaw new file mode 100644 index 0000000..3797b1c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Warsaw differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Zagreb b/wakatime/packages/pytz/zoneinfo/Europe/Zagreb new file mode 100644 index 0000000..5f0389f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Zagreb differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Zaporozhye b/wakatime/packages/pytz/zoneinfo/Europe/Zaporozhye new file mode 100644 index 0000000..2ccf899 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Zaporozhye differ diff --git a/wakatime/packages/pytz/zoneinfo/Europe/Zurich b/wakatime/packages/pytz/zoneinfo/Europe/Zurich new file mode 100644 index 0000000..0cf15c1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Europe/Zurich differ diff --git a/wakatime/packages/pytz/zoneinfo/Factory b/wakatime/packages/pytz/zoneinfo/Factory new file mode 100644 index 0000000..a65f97e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Factory differ diff --git a/wakatime/packages/pytz/zoneinfo/GB b/wakatime/packages/pytz/zoneinfo/GB new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/GB differ diff --git a/wakatime/packages/pytz/zoneinfo/GB-Eire b/wakatime/packages/pytz/zoneinfo/GB-Eire new file mode 100644 index 0000000..fe63ff7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/GB-Eire differ diff --git a/wakatime/packages/pytz/zoneinfo/GMT b/wakatime/packages/pytz/zoneinfo/GMT new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/GMT differ diff --git a/wakatime/packages/pytz/zoneinfo/GMT+0 b/wakatime/packages/pytz/zoneinfo/GMT+0 new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/GMT+0 differ diff --git a/wakatime/packages/pytz/zoneinfo/GMT-0 b/wakatime/packages/pytz/zoneinfo/GMT-0 new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/GMT-0 differ diff --git a/wakatime/packages/pytz/zoneinfo/GMT0 b/wakatime/packages/pytz/zoneinfo/GMT0 new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/GMT0 differ diff --git a/wakatime/packages/pytz/zoneinfo/Greenwich b/wakatime/packages/pytz/zoneinfo/Greenwich new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Greenwich differ diff --git a/wakatime/packages/pytz/zoneinfo/HST b/wakatime/packages/pytz/zoneinfo/HST new file mode 100644 index 0000000..616c31b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/HST differ diff --git a/wakatime/packages/pytz/zoneinfo/Hongkong b/wakatime/packages/pytz/zoneinfo/Hongkong new file mode 100644 index 0000000..8e5c581 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Hongkong differ diff --git a/wakatime/packages/pytz/zoneinfo/Iceland b/wakatime/packages/pytz/zoneinfo/Iceland new file mode 100644 index 0000000..e97f13a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Iceland differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Antananarivo b/wakatime/packages/pytz/zoneinfo/Indian/Antananarivo new file mode 100644 index 0000000..ef6e745 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Antananarivo differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Chagos b/wakatime/packages/pytz/zoneinfo/Indian/Chagos new file mode 100644 index 0000000..864d3e2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Chagos differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Christmas b/wakatime/packages/pytz/zoneinfo/Indian/Christmas new file mode 100644 index 0000000..686d5b3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Christmas differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Cocos b/wakatime/packages/pytz/zoneinfo/Indian/Cocos new file mode 100644 index 0000000..6f7d869 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Cocos differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Comoro b/wakatime/packages/pytz/zoneinfo/Indian/Comoro new file mode 100644 index 0000000..297c6db Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Comoro differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Kerguelen b/wakatime/packages/pytz/zoneinfo/Indian/Kerguelen new file mode 100644 index 0000000..1f42bbc Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Kerguelen differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Mahe b/wakatime/packages/pytz/zoneinfo/Indian/Mahe new file mode 100644 index 0000000..d048242 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Mahe differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Maldives b/wakatime/packages/pytz/zoneinfo/Indian/Maldives new file mode 100644 index 0000000..65e7eee Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Maldives differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Mauritius b/wakatime/packages/pytz/zoneinfo/Indian/Mauritius new file mode 100644 index 0000000..54f2220 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Mauritius differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Mayotte b/wakatime/packages/pytz/zoneinfo/Indian/Mayotte new file mode 100644 index 0000000..8401a37 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Mayotte differ diff --git a/wakatime/packages/pytz/zoneinfo/Indian/Reunion b/wakatime/packages/pytz/zoneinfo/Indian/Reunion new file mode 100644 index 0000000..9b3830e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Indian/Reunion differ diff --git a/wakatime/packages/pytz/zoneinfo/Iran b/wakatime/packages/pytz/zoneinfo/Iran new file mode 100644 index 0000000..16149ed Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Iran differ diff --git a/wakatime/packages/pytz/zoneinfo/Israel b/wakatime/packages/pytz/zoneinfo/Israel new file mode 100644 index 0000000..8a0c8db Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Israel differ diff --git a/wakatime/packages/pytz/zoneinfo/Jamaica b/wakatime/packages/pytz/zoneinfo/Jamaica new file mode 100644 index 0000000..09e3eb9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Jamaica differ diff --git a/wakatime/packages/pytz/zoneinfo/Japan b/wakatime/packages/pytz/zoneinfo/Japan new file mode 100644 index 0000000..058c1e9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Japan differ diff --git a/wakatime/packages/pytz/zoneinfo/Kwajalein b/wakatime/packages/pytz/zoneinfo/Kwajalein new file mode 100644 index 0000000..b572372 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Kwajalein differ diff --git a/wakatime/packages/pytz/zoneinfo/Libya b/wakatime/packages/pytz/zoneinfo/Libya new file mode 100644 index 0000000..479f5b4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Libya differ diff --git a/wakatime/packages/pytz/zoneinfo/MET b/wakatime/packages/pytz/zoneinfo/MET new file mode 100644 index 0000000..71963d5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/MET differ diff --git a/wakatime/packages/pytz/zoneinfo/MST b/wakatime/packages/pytz/zoneinfo/MST new file mode 100644 index 0000000..da3e926 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/MST differ diff --git a/wakatime/packages/pytz/zoneinfo/MST7MDT b/wakatime/packages/pytz/zoneinfo/MST7MDT new file mode 100644 index 0000000..726a7e5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/MST7MDT differ diff --git a/wakatime/packages/pytz/zoneinfo/Mexico/BajaNorte b/wakatime/packages/pytz/zoneinfo/Mexico/BajaNorte new file mode 100644 index 0000000..fffdc24 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Mexico/BajaNorte differ diff --git a/wakatime/packages/pytz/zoneinfo/Mexico/BajaSur b/wakatime/packages/pytz/zoneinfo/Mexico/BajaSur new file mode 100644 index 0000000..43ee12d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Mexico/BajaSur differ diff --git a/wakatime/packages/pytz/zoneinfo/Mexico/General b/wakatime/packages/pytz/zoneinfo/Mexico/General new file mode 100644 index 0000000..1434ab0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Mexico/General differ diff --git a/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh87 b/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh87 new file mode 100644 index 0000000..ebe16c4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh87 differ diff --git a/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh88 b/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh88 new file mode 100644 index 0000000..7f2224b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh88 differ diff --git a/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh89 b/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh89 new file mode 100644 index 0000000..a50ca48 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Mideast/Riyadh89 differ diff --git a/wakatime/packages/pytz/zoneinfo/NZ b/wakatime/packages/pytz/zoneinfo/NZ new file mode 100644 index 0000000..a40767d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/NZ differ diff --git a/wakatime/packages/pytz/zoneinfo/NZ-CHAT b/wakatime/packages/pytz/zoneinfo/NZ-CHAT new file mode 100644 index 0000000..6329e4f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/NZ-CHAT differ diff --git a/wakatime/packages/pytz/zoneinfo/Navajo b/wakatime/packages/pytz/zoneinfo/Navajo new file mode 100644 index 0000000..f8908fe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Navajo differ diff --git a/wakatime/packages/pytz/zoneinfo/PRC b/wakatime/packages/pytz/zoneinfo/PRC new file mode 100644 index 0000000..af6d6fb Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/PRC differ diff --git a/wakatime/packages/pytz/zoneinfo/PST8PDT b/wakatime/packages/pytz/zoneinfo/PST8PDT new file mode 100644 index 0000000..6242ac0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/PST8PDT differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Apia b/wakatime/packages/pytz/zoneinfo/Pacific/Apia new file mode 100644 index 0000000..efe6d5a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Apia differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Auckland b/wakatime/packages/pytz/zoneinfo/Pacific/Auckland new file mode 100644 index 0000000..a40767d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Auckland differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Chatham b/wakatime/packages/pytz/zoneinfo/Pacific/Chatham new file mode 100644 index 0000000..6329e4f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Chatham differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Chuuk b/wakatime/packages/pytz/zoneinfo/Pacific/Chuuk new file mode 100644 index 0000000..0ef4738 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Chuuk differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Easter b/wakatime/packages/pytz/zoneinfo/Pacific/Easter new file mode 100644 index 0000000..f22cc98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Easter differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Efate b/wakatime/packages/pytz/zoneinfo/Pacific/Efate new file mode 100644 index 0000000..c46154a Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Efate differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Enderbury b/wakatime/packages/pytz/zoneinfo/Pacific/Enderbury new file mode 100644 index 0000000..69e75d7 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Enderbury differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Fakaofo b/wakatime/packages/pytz/zoneinfo/Pacific/Fakaofo new file mode 100644 index 0000000..22902f9 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Fakaofo differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Fiji b/wakatime/packages/pytz/zoneinfo/Pacific/Fiji new file mode 100644 index 0000000..0bc1962 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Fiji differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Funafuti b/wakatime/packages/pytz/zoneinfo/Pacific/Funafuti new file mode 100644 index 0000000..66cf5e1 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Funafuti differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Galapagos b/wakatime/packages/pytz/zoneinfo/Pacific/Galapagos new file mode 100644 index 0000000..7504cc6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Galapagos differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Gambier b/wakatime/packages/pytz/zoneinfo/Pacific/Gambier new file mode 100644 index 0000000..fc49c03 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Gambier differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Guadalcanal b/wakatime/packages/pytz/zoneinfo/Pacific/Guadalcanal new file mode 100644 index 0000000..3a4ec12 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Guadalcanal differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Guam b/wakatime/packages/pytz/zoneinfo/Pacific/Guam new file mode 100644 index 0000000..a05292f Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Guam differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Honolulu b/wakatime/packages/pytz/zoneinfo/Pacific/Honolulu new file mode 100644 index 0000000..1b4684b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Honolulu differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Johnston b/wakatime/packages/pytz/zoneinfo/Pacific/Johnston new file mode 100644 index 0000000..616c31b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Johnston differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Kiritimati b/wakatime/packages/pytz/zoneinfo/Pacific/Kiritimati new file mode 100644 index 0000000..7131453 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Kiritimati differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Kosrae b/wakatime/packages/pytz/zoneinfo/Pacific/Kosrae new file mode 100644 index 0000000..61b7561 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Kosrae differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Kwajalein b/wakatime/packages/pytz/zoneinfo/Pacific/Kwajalein new file mode 100644 index 0000000..b572372 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Kwajalein differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Majuro b/wakatime/packages/pytz/zoneinfo/Pacific/Majuro new file mode 100644 index 0000000..eab93a2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Majuro differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Marquesas b/wakatime/packages/pytz/zoneinfo/Pacific/Marquesas new file mode 100644 index 0000000..cd2d5b0 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Marquesas differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Midway b/wakatime/packages/pytz/zoneinfo/Pacific/Midway new file mode 100644 index 0000000..8889a26 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Midway differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Nauru b/wakatime/packages/pytz/zoneinfo/Pacific/Nauru new file mode 100644 index 0000000..1d8179b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Nauru differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Niue b/wakatime/packages/pytz/zoneinfo/Pacific/Niue new file mode 100644 index 0000000..b9f18a5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Niue differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Norfolk b/wakatime/packages/pytz/zoneinfo/Pacific/Norfolk new file mode 100644 index 0000000..2e989c2 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Norfolk differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Noumea b/wakatime/packages/pytz/zoneinfo/Pacific/Noumea new file mode 100644 index 0000000..ae9e138 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Noumea differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Pago_Pago b/wakatime/packages/pytz/zoneinfo/Pacific/Pago_Pago new file mode 100644 index 0000000..fa084ba Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Pago_Pago differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Palau b/wakatime/packages/pytz/zoneinfo/Pacific/Palau new file mode 100644 index 0000000..efc556b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Palau differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Pitcairn b/wakatime/packages/pytz/zoneinfo/Pacific/Pitcairn new file mode 100644 index 0000000..51f01c6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Pitcairn differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Pohnpei b/wakatime/packages/pytz/zoneinfo/Pacific/Pohnpei new file mode 100644 index 0000000..f175ea5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Pohnpei differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Ponape b/wakatime/packages/pytz/zoneinfo/Pacific/Ponape new file mode 100644 index 0000000..f175ea5 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Ponape differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Port_Moresby b/wakatime/packages/pytz/zoneinfo/Pacific/Port_Moresby new file mode 100644 index 0000000..8d4d12c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Port_Moresby differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Rarotonga b/wakatime/packages/pytz/zoneinfo/Pacific/Rarotonga new file mode 100644 index 0000000..5812997 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Rarotonga differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Saipan b/wakatime/packages/pytz/zoneinfo/Pacific/Saipan new file mode 100644 index 0000000..519c86e Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Saipan differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Samoa b/wakatime/packages/pytz/zoneinfo/Pacific/Samoa new file mode 100644 index 0000000..fa084ba Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Samoa differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Tahiti b/wakatime/packages/pytz/zoneinfo/Pacific/Tahiti new file mode 100644 index 0000000..22f8697 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Tahiti differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Tarawa b/wakatime/packages/pytz/zoneinfo/Pacific/Tarawa new file mode 100644 index 0000000..065dcd8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Tarawa differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Tongatapu b/wakatime/packages/pytz/zoneinfo/Pacific/Tongatapu new file mode 100644 index 0000000..01ab6b8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Tongatapu differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Truk b/wakatime/packages/pytz/zoneinfo/Pacific/Truk new file mode 100644 index 0000000..0ef4738 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Truk differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Wake b/wakatime/packages/pytz/zoneinfo/Pacific/Wake new file mode 100644 index 0000000..f89c528 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Wake differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Wallis b/wakatime/packages/pytz/zoneinfo/Pacific/Wallis new file mode 100644 index 0000000..9aaf558 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Wallis differ diff --git a/wakatime/packages/pytz/zoneinfo/Pacific/Yap b/wakatime/packages/pytz/zoneinfo/Pacific/Yap new file mode 100644 index 0000000..0ef4738 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Pacific/Yap differ diff --git a/wakatime/packages/pytz/zoneinfo/Poland b/wakatime/packages/pytz/zoneinfo/Poland new file mode 100644 index 0000000..3797b1c Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Poland differ diff --git a/wakatime/packages/pytz/zoneinfo/Portugal b/wakatime/packages/pytz/zoneinfo/Portugal new file mode 100644 index 0000000..168accf Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Portugal differ diff --git a/wakatime/packages/pytz/zoneinfo/ROC b/wakatime/packages/pytz/zoneinfo/ROC new file mode 100644 index 0000000..70cfb27 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/ROC differ diff --git a/wakatime/packages/pytz/zoneinfo/ROK b/wakatime/packages/pytz/zoneinfo/ROK new file mode 100644 index 0000000..96bb0c3 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/ROK differ diff --git a/wakatime/packages/pytz/zoneinfo/Singapore b/wakatime/packages/pytz/zoneinfo/Singapore new file mode 100644 index 0000000..a6f2db8 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Singapore differ diff --git a/wakatime/packages/pytz/zoneinfo/Turkey b/wakatime/packages/pytz/zoneinfo/Turkey new file mode 100644 index 0000000..8640995 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Turkey differ diff --git a/wakatime/packages/pytz/zoneinfo/UCT b/wakatime/packages/pytz/zoneinfo/UCT new file mode 100644 index 0000000..a88c4b6 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/UCT differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Alaska b/wakatime/packages/pytz/zoneinfo/US/Alaska new file mode 100644 index 0000000..d147350 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Alaska differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Aleutian b/wakatime/packages/pytz/zoneinfo/US/Aleutian new file mode 100644 index 0000000..391ec98 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Aleutian differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Arizona b/wakatime/packages/pytz/zoneinfo/US/Arizona new file mode 100644 index 0000000..6758902 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Arizona differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Central b/wakatime/packages/pytz/zoneinfo/US/Central new file mode 100644 index 0000000..71aae72 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Central differ diff --git a/wakatime/packages/pytz/zoneinfo/US/East-Indiana b/wakatime/packages/pytz/zoneinfo/US/East-Indiana new file mode 100644 index 0000000..aa3dfc4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/East-Indiana differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Eastern b/wakatime/packages/pytz/zoneinfo/US/Eastern new file mode 100644 index 0000000..b2c2377 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Eastern differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Hawaii b/wakatime/packages/pytz/zoneinfo/US/Hawaii new file mode 100644 index 0000000..1b4684b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Hawaii differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Indiana-Starke b/wakatime/packages/pytz/zoneinfo/US/Indiana-Starke new file mode 100644 index 0000000..33169f4 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Indiana-Starke differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Michigan b/wakatime/packages/pytz/zoneinfo/US/Michigan new file mode 100644 index 0000000..da53d46 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Michigan differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Mountain b/wakatime/packages/pytz/zoneinfo/US/Mountain new file mode 100644 index 0000000..f8908fe Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Mountain differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Pacific b/wakatime/packages/pytz/zoneinfo/US/Pacific new file mode 100644 index 0000000..3b7ce1d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Pacific differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Pacific-New b/wakatime/packages/pytz/zoneinfo/US/Pacific-New new file mode 100644 index 0000000..3b7ce1d Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Pacific-New differ diff --git a/wakatime/packages/pytz/zoneinfo/US/Samoa b/wakatime/packages/pytz/zoneinfo/US/Samoa new file mode 100644 index 0000000..fa084ba Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/US/Samoa differ diff --git a/wakatime/packages/pytz/zoneinfo/UTC b/wakatime/packages/pytz/zoneinfo/UTC new file mode 100644 index 0000000..5583f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/UTC differ diff --git a/wakatime/packages/pytz/zoneinfo/Universal b/wakatime/packages/pytz/zoneinfo/Universal new file mode 100644 index 0000000..5583f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Universal differ diff --git a/wakatime/packages/pytz/zoneinfo/W-SU b/wakatime/packages/pytz/zoneinfo/W-SU new file mode 100644 index 0000000..6068f8b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/W-SU differ diff --git a/wakatime/packages/pytz/zoneinfo/WET b/wakatime/packages/pytz/zoneinfo/WET new file mode 100644 index 0000000..444a193 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/WET differ diff --git a/wakatime/packages/pytz/zoneinfo/Zulu b/wakatime/packages/pytz/zoneinfo/Zulu new file mode 100644 index 0000000..5583f5b Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/Zulu differ diff --git a/wakatime/packages/pytz/zoneinfo/iso3166.tab b/wakatime/packages/pytz/zoneinfo/iso3166.tab new file mode 100644 index 0000000..c184a81 --- /dev/null +++ b/wakatime/packages/pytz/zoneinfo/iso3166.tab @@ -0,0 +1,275 @@ +# ISO 3166 alpha-2 country codes +# +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +# From Paul Eggert (2013-05-27): +# +# This file contains a table with the following columns: +# 1. ISO 3166-1 alpha-2 country code, current as of +# ISO 3166-1 Newsletter VI-15 (2013-05-10). See: Updates on ISO 3166 +# http://www.iso.org/iso/home/standards/country_codes/updates_on_iso_3166.htm +# 2. The usual English name for the country, +# chosen so that alphabetic sorting of subsets produces helpful lists. +# This is not the same as the English name in the ISO 3166 tables. +# +# Columns are separated by a single tab. +# The table is sorted by country code. +# +# Lines beginning with `#' are comments. +# +# This table is intended as an aid for users, to help them select time +# zone data appropriate for their practical needs. It is not intended +# to take or endorse any position on legal or territorial claims. +# +#country- +#code country name +AD Andorra +AE United Arab Emirates +AF Afghanistan +AG Antigua & Barbuda +AI Anguilla +AL Albania +AM Armenia +AO Angola +AQ Antarctica +AR Argentina +AS Samoa (American) +AT Austria +AU Australia +AW Aruba +AX Aaland Islands +AZ Azerbaijan +BA Bosnia & Herzegovina +BB Barbados +BD Bangladesh +BE Belgium +BF Burkina Faso +BG Bulgaria +BH Bahrain +BI Burundi +BJ Benin +BL St Barthelemy +BM Bermuda +BN Brunei +BO Bolivia +BQ Bonaire, St Eustatius & Saba +BR Brazil +BS Bahamas +BT Bhutan +BV Bouvet Island +BW Botswana +BY Belarus +BZ Belize +CA Canada +CC Cocos (Keeling) Islands +CD Congo (Dem. Rep.) +CF Central African Rep. +CG Congo (Rep.) +CH Switzerland +CI Cote d'Ivoire +CK Cook Islands +CL Chile +CM Cameroon +CN China +CO Colombia +CR Costa Rica +CU Cuba +CV Cape Verde +CW Curacao +CX Christmas Island +CY Cyprus +CZ Czech Republic +DE Germany +DJ Djibouti +DK Denmark +DM Dominica +DO Dominican Republic +DZ Algeria +EC Ecuador +EE Estonia +EG Egypt +EH Western Sahara +ER Eritrea +ES Spain +ET Ethiopia +FI Finland +FJ Fiji +FK Falkland Islands +FM Micronesia +FO Faroe Islands +FR France +GA Gabon +GB Britain (UK) +GD Grenada +GE Georgia +GF French Guiana +GG Guernsey +GH Ghana +GI Gibraltar +GL Greenland +GM Gambia +GN Guinea +GP Guadeloupe +GQ Equatorial Guinea +GR Greece +GS South Georgia & the South Sandwich Islands +GT Guatemala +GU Guam +GW Guinea-Bissau +GY Guyana +HK Hong Kong +HM Heard Island & McDonald Islands +HN Honduras +HR Croatia +HT Haiti +HU Hungary +ID Indonesia +IE Ireland +IL Israel +IM Isle of Man +IN India +IO British Indian Ocean Territory +IQ Iraq +IR Iran +IS Iceland +IT Italy +JE Jersey +JM Jamaica +JO Jordan +JP Japan +KE Kenya +KG Kyrgyzstan +KH Cambodia +KI Kiribati +KM Comoros +KN St Kitts & Nevis +KP Korea (North) +KR Korea (South) +KW Kuwait +KY Cayman Islands +KZ Kazakhstan +LA Laos +LB Lebanon +LC St Lucia +LI Liechtenstein +LK Sri Lanka +LR Liberia +LS Lesotho +LT Lithuania +LU Luxembourg +LV Latvia +LY Libya +MA Morocco +MC Monaco +MD Moldova +ME Montenegro +MF St Martin (French part) +MG Madagascar +MH Marshall Islands +MK Macedonia +ML Mali +MM Myanmar (Burma) +MN Mongolia +MO Macau +MP Northern Mariana Islands +MQ Martinique +MR Mauritania +MS Montserrat +MT Malta +MU Mauritius +MV Maldives +MW Malawi +MX Mexico +MY Malaysia +MZ Mozambique +NA Namibia +NC New Caledonia +NE Niger +NF Norfolk Island +NG Nigeria +NI Nicaragua +NL Netherlands +NO Norway +NP Nepal +NR Nauru +NU Niue +NZ New Zealand +OM Oman +PA Panama +PE Peru +PF French Polynesia +PG Papua New Guinea +PH Philippines +PK Pakistan +PL Poland +PM St Pierre & Miquelon +PN Pitcairn +PR Puerto Rico +PS Palestine +PT Portugal +PW Palau +PY Paraguay +QA Qatar +RE Reunion +RO Romania +RS Serbia +RU Russia +RW Rwanda +SA Saudi Arabia +SB Solomon Islands +SC Seychelles +SD Sudan +SE Sweden +SG Singapore +SH St Helena +SI Slovenia +SJ Svalbard & Jan Mayen +SK Slovakia +SL Sierra Leone +SM San Marino +SN Senegal +SO Somalia +SR Suriname +SS South Sudan +ST Sao Tome & Principe +SV El Salvador +SX St Maarten (Dutch part) +SY Syria +SZ Swaziland +TC Turks & Caicos Is +TD Chad +TF French Southern & Antarctic Lands +TG Togo +TH Thailand +TJ Tajikistan +TK Tokelau +TL East Timor +TM Turkmenistan +TN Tunisia +TO Tonga +TR Turkey +TT Trinidad & Tobago +TV Tuvalu +TW Taiwan +TZ Tanzania +UA Ukraine +UG Uganda +UM US minor outlying islands +US United States +UY Uruguay +UZ Uzbekistan +VA Vatican City +VC St Vincent +VE Venezuela +VG Virgin Islands (UK) +VI Virgin Islands (US) +VN Vietnam +VU Vanuatu +WF Wallis & Futuna +WS Samoa (western) +YE Yemen +YT Mayotte +ZA South Africa +ZM Zambia +ZW Zimbabwe diff --git a/wakatime/packages/pytz/zoneinfo/localtime b/wakatime/packages/pytz/zoneinfo/localtime new file mode 100644 index 0000000..2ee1429 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/localtime differ diff --git a/wakatime/packages/pytz/zoneinfo/posixrules b/wakatime/packages/pytz/zoneinfo/posixrules new file mode 100644 index 0000000..b2c2377 Binary files /dev/null and b/wakatime/packages/pytz/zoneinfo/posixrules differ diff --git a/wakatime/packages/pytz/zoneinfo/zone.tab b/wakatime/packages/pytz/zoneinfo/zone.tab new file mode 100644 index 0000000..3ec24a7 --- /dev/null +++ b/wakatime/packages/pytz/zoneinfo/zone.tab @@ -0,0 +1,451 @@ +# TZ zone descriptions +# +# This file is in the public domain, so clarified as of +# 2009-05-17 by Arthur David Olson. +# +# From Paul Eggert (2013-05-27): +# +# This file contains a table with the following columns: +# 1. ISO 3166 2-character country code. See the file `iso3166.tab'. +# This identifies a country that overlaps the zone. The country may +# overlap other zones and the zone may overlap other countries. +# 2. Latitude and longitude of the zone's principal location +# in ISO 6709 sign-degrees-minutes-seconds format, +# either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS, +# first latitude (+ is north), then longitude (+ is east). +# This location need not lie within the column-1 country. +# 3. Zone name used in value of TZ environment variable. +# Please see the 'Theory' file for how zone names are chosen. +# 4. Comments; present if and only if the country has multiple rows. +# +# Columns are separated by a single tab. +# The table is sorted first by country, then an order within the country that +# (1) makes some geographical sense, and +# (2) puts the most populous zones first, where that does not contradict (1). +# +# Lines beginning with `#' are comments. +# +# This table is intended as an aid for users, to help them select time +# zone data appropriate for their practical needs. It is not intended +# to take or endorse any position on legal or territorial claims. +# +#country- +#code coordinates TZ comments +AD +4230+00131 Europe/Andorra +AE +2518+05518 Asia/Dubai +AF +3431+06912 Asia/Kabul +AG +1703-06148 America/Antigua +AI +1812-06304 America/Anguilla +AL +4120+01950 Europe/Tirane +AM +4011+04430 Asia/Yerevan +AO -0848+01314 Africa/Luanda +AQ -7750+16636 Antarctica/McMurdo McMurdo Station, Ross Island +AQ -9000+00000 Antarctica/South_Pole Amundsen-Scott Station, South Pole +AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island +AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island +AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay +AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills +AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula +AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok +AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie +AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I +AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF) +AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF) +AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN) +AR -2411-06518 America/Argentina/Jujuy Jujuy (JY) +AR -2649-06513 America/Argentina/Tucuman Tucuman (TM) +AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH) +AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR) +AR -3132-06831 America/Argentina/San_Juan San Juan (SJ) +AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ) +AR -3319-06621 America/Argentina/San_Luis San Luis (SL) +AR -5138-06913 America/Argentina/Rio_Gallegos Santa Cruz (SC) +AR -5448-06818 America/Argentina/Ushuaia Tierra del Fuego (TF) +AS -1416-17042 Pacific/Pago_Pago +AT +4813+01620 Europe/Vienna +AU -3133+15905 Australia/Lord_Howe Lord Howe Island +AU -5430+15857 Antarctica/Macquarie Macquarie Island +AU -4253+14719 Australia/Hobart Tasmania - most locations +AU -3956+14352 Australia/Currie Tasmania - King Island +AU -3749+14458 Australia/Melbourne Victoria +AU -3352+15113 Australia/Sydney New South Wales - most locations +AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna +AU -2728+15302 Australia/Brisbane Queensland - most locations +AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands +AU -3455+13835 Australia/Adelaide South Australia +AU -1228+13050 Australia/Darwin Northern Territory +AU -3157+11551 Australia/Perth Western Australia - most locations +AU -3143+12852 Australia/Eucla Western Australia - Eucla area +AW +1230-06958 America/Aruba +AX +6006+01957 Europe/Mariehamn +AZ +4023+04951 Asia/Baku +BA +4352+01825 Europe/Sarajevo +BB +1306-05937 America/Barbados +BD +2343+09025 Asia/Dhaka +BE +5050+00420 Europe/Brussels +BF +1222-00131 Africa/Ouagadougou +BG +4241+02319 Europe/Sofia +BH +2623+05035 Asia/Bahrain +BI -0323+02922 Africa/Bujumbura +BJ +0629+00237 Africa/Porto-Novo +BL +1753-06251 America/St_Barthelemy +BM +3217-06446 Atlantic/Bermuda +BN +0456+11455 Asia/Brunei +BO -1630-06809 America/La_Paz +BQ +120903-0681636 America/Kralendijk +BR -0351-03225 America/Noronha Atlantic islands +BR -0127-04829 America/Belem Amapa, E Para +BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB) +BR -0803-03454 America/Recife Pernambuco +BR -0712-04812 America/Araguaina Tocantins +BR -0940-03543 America/Maceio Alagoas, Sergipe +BR -1259-03831 America/Bahia Bahia +BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS) +BR -2027-05437 America/Campo_Grande Mato Grosso do Sul +BR -1535-05605 America/Cuiaba Mato Grosso +BR -0226-05452 America/Santarem W Para +BR -0846-06354 America/Porto_Velho Rondonia +BR +0249-06040 America/Boa_Vista Roraima +BR -0308-06001 America/Manaus E Amazonas +BR -0640-06952 America/Eirunepe W Amazonas +BR -0958-06748 America/Rio_Branco Acre +BS +2505-07721 America/Nassau +BT +2728+08939 Asia/Thimphu +BW -2439+02555 Africa/Gaborone +BY +5354+02734 Europe/Minsk +BZ +1730-08812 America/Belize +CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador +CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (most places), PEI +CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971 +CA +4606-06447 America/Moncton Atlantic Time - New Brunswick +CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations +CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore +CA +4531-07334 America/Montreal Eastern Time - Quebec - most locations +CA +4339-07923 America/Toronto Eastern Time - Ontario - most locations +CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973 +CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario +CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations +CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut +CA +744144-0944945 America/Resolute Central Standard Time - Resolute, Nunavut +CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut +CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut +CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario +CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario +CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations +CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest +CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan +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 +CA +6404-13925 America/Dawson Pacific Time - north Yukon +CC -1210+09655 Indian/Cocos +CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo +CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo +CF +0422+01835 Africa/Bangui +CG -0416+01517 Africa/Brazzaville +CH +4723+00832 Europe/Zurich +CI +0519-00402 Africa/Abidjan +CK -2114-15946 Pacific/Rarotonga +CL -3327-07040 America/Santiago most locations +CL -2709-10926 Pacific/Easter Easter Island & Sala y Gomez +CM +0403+00942 Africa/Douala +CN +3114+12128 Asia/Shanghai east China - Beijing, Guangdong, Shanghai, etc. +CN +4545+12641 Asia/Harbin Heilongjiang (except Mohe), Jilin +CN +2934+10635 Asia/Chongqing central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc. +CN +4348+08735 Asia/Urumqi most of Tibet & Xinjiang +CN +3929+07559 Asia/Kashgar west Tibet & Xinjiang +CO +0436-07405 America/Bogota +CR +0956-08405 America/Costa_Rica +CU +2308-08222 America/Havana +CV +1455-02331 Atlantic/Cape_Verde +CW +1211-06900 America/Curacao +CX -1025+10543 Indian/Christmas +CY +3510+03322 Asia/Nicosia +CZ +5005+01426 Europe/Prague +DE +5230+01322 Europe/Berlin most locations +DE +4742+00841 Europe/Busingen Busingen +DJ +1136+04309 Africa/Djibouti +DK +5540+01235 Europe/Copenhagen +DM +1518-06124 America/Dominica +DO +1828-06954 America/Santo_Domingo +DZ +3647+00303 Africa/Algiers +EC -0210-07950 America/Guayaquil mainland +EC -0054-08936 Pacific/Galapagos Galapagos Islands +EE +5925+02445 Europe/Tallinn +EG +3003+03115 Africa/Cairo +EH +2709-01312 Africa/El_Aaiun +ER +1520+03853 Africa/Asmara +ES +4024-00341 Europe/Madrid mainland +ES +3553-00519 Africa/Ceuta Ceuta & Melilla +ES +2806-01524 Atlantic/Canary Canary Islands +ET +0902+03842 Africa/Addis_Ababa +FI +6010+02458 Europe/Helsinki +FJ -1808+17825 Pacific/Fiji +FK -5142-05751 Atlantic/Stanley +FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap +FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape) +FM +0519+16259 Pacific/Kosrae Kosrae +FO +6201-00646 Atlantic/Faroe +FR +4852+00220 Europe/Paris +GA +0023+00927 Africa/Libreville +GB +513030-0000731 Europe/London +GD +1203-06145 America/Grenada +GE +4143+04449 Asia/Tbilisi +GF +0456-05220 America/Cayenne +GG +4927-00232 Europe/Guernsey +GH +0533-00013 Africa/Accra +GI +3608-00521 Europe/Gibraltar +GL +6411-05144 America/Godthab most locations +GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund +GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit +GL +7634-06847 America/Thule Thule / Pituffik +GM +1328-01639 Africa/Banjul +GN +0931-01343 Africa/Conakry +GP +1614-06132 America/Guadeloupe +GQ +0345+00847 Africa/Malabo +GR +3758+02343 Europe/Athens +GS -5416-03632 Atlantic/South_Georgia +GT +1438-09031 America/Guatemala +GU +1328+14445 Pacific/Guam +GW +1151-01535 Africa/Bissau +GY +0648-05810 America/Guyana +HK +2217+11409 Asia/Hong_Kong +HN +1406-08713 America/Tegucigalpa +HR +4548+01558 Europe/Zagreb +HT +1832-07220 America/Port-au-Prince +HU +4730+01905 Europe/Budapest +ID -0610+10648 Asia/Jakarta Java & Sumatra +ID -0002+10920 Asia/Pontianak west & central Borneo +ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor +ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas) +IE +5320-00615 Europe/Dublin +IL +314650+0351326 Asia/Jerusalem +IM +5409-00428 Europe/Isle_of_Man +IN +2232+08822 Asia/Kolkata +IO -0720+07225 Indian/Chagos +IQ +3321+04425 Asia/Baghdad +IR +3540+05126 Asia/Tehran +IS +6409-02151 Atlantic/Reykjavik +IT +4154+01229 Europe/Rome +JE +4912-00207 Europe/Jersey +JM +1800-07648 America/Jamaica +JO +3157+03556 Asia/Amman +JP +353916+1394441 Asia/Tokyo +KE -0117+03649 Africa/Nairobi +KG +4254+07436 Asia/Bishkek +KH +1133+10455 Asia/Phnom_Penh +KI +0125+17300 Pacific/Tarawa Gilbert Islands +KI -0308-17105 Pacific/Enderbury Phoenix Islands +KI +0152-15720 Pacific/Kiritimati Line Islands +KM -1141+04316 Indian/Comoro +KN +1718-06243 America/St_Kitts +KP +3901+12545 Asia/Pyongyang +KR +3733+12658 Asia/Seoul +KW +2920+04759 Asia/Kuwait +KY +1918-08123 America/Cayman +KZ +4315+07657 Asia/Almaty most locations +KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda) +KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe) +KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau) +KZ +5113+05121 Asia/Oral West Kazakhstan +LA +1758+10236 Asia/Vientiane +LB +3353+03530 Asia/Beirut +LC +1401-06100 America/St_Lucia +LI +4709+00931 Europe/Vaduz +LK +0656+07951 Asia/Colombo +LR +0618-01047 Africa/Monrovia +LS -2928+02730 Africa/Maseru +LT +5441+02519 Europe/Vilnius +LU +4936+00609 Europe/Luxembourg +LV +5657+02406 Europe/Riga +LY +3254+01311 Africa/Tripoli +MA +3339-00735 Africa/Casablanca +MC +4342+00723 Europe/Monaco +MD +4700+02850 Europe/Chisinau +ME +4226+01916 Europe/Podgorica +MF +1804-06305 America/Marigot +MG -1855+04731 Indian/Antananarivo +MH +0709+17112 Pacific/Majuro most locations +MH +0905+16720 Pacific/Kwajalein Kwajalein +MK +4159+02126 Europe/Skopje +ML +1239-00800 Africa/Bamako +MM +1647+09610 Asia/Rangoon +MN +4755+10653 Asia/Ulaanbaatar most locations +MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan +MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar +MO +2214+11335 Asia/Macau +MP +1512+14545 Pacific/Saipan +MQ +1436-06105 America/Martinique +MR +1806-01557 Africa/Nouakchott +MS +1643-06213 America/Montserrat +MT +3554+01431 Europe/Malta +MU -2010+05730 Indian/Mauritius +MV +0410+07330 Indian/Maldives +MW -1547+03500 Africa/Blantyre +MX +1924-09909 America/Mexico_City Central Time - most locations +MX +2105-08646 America/Cancun Central Time - Quintana Roo +MX +2058-08937 America/Merida Central Time - Campeche, Yucatan +MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border +MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border +MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa +MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border +MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border +MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora +MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border +MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border +MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas +MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia +MY +0133+11020 Asia/Kuching Sabah & Sarawak +MZ -2558+03235 Africa/Maputo +NA -2234+01706 Africa/Windhoek +NC -2216+16627 Pacific/Noumea +NE +1331+00207 Africa/Niamey +NF -2903+16758 Pacific/Norfolk +NG +0627+00324 Africa/Lagos +NI +1209-08617 America/Managua +NL +5222+00454 Europe/Amsterdam +NO +5955+01045 Europe/Oslo +NP +2743+08519 Asia/Kathmandu +NR -0031+16655 Pacific/Nauru +NU -1901-16955 Pacific/Niue +NZ -3652+17446 Pacific/Auckland most locations +NZ -4357-17633 Pacific/Chatham Chatham Islands +OM +2336+05835 Asia/Muscat +PA +0858-07932 America/Panama +PE -1203-07703 America/Lima +PF -1732-14934 Pacific/Tahiti Society Islands +PF -0900-13930 Pacific/Marquesas Marquesas Islands +PF -2308-13457 Pacific/Gambier Gambier Islands +PG -0930+14710 Pacific/Port_Moresby +PH +1435+12100 Asia/Manila +PK +2452+06703 Asia/Karachi +PL +5215+02100 Europe/Warsaw +PM +4703-05620 America/Miquelon +PN -2504-13005 Pacific/Pitcairn +PR +182806-0660622 America/Puerto_Rico +PS +3130+03428 Asia/Gaza Gaza Strip +PS +313200+0350542 Asia/Hebron West Bank +PT +3843-00908 Europe/Lisbon mainland +PT +3238-01654 Atlantic/Madeira Madeira Islands +PT +3744-02540 Atlantic/Azores Azores +PW +0720+13429 Pacific/Palau +PY -2516-05740 America/Asuncion +QA +2517+05132 Asia/Qatar +RE -2052+05528 Indian/Reunion +RO +4426+02606 Europe/Bucharest +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+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 +RU +5345+08707 Asia/Novokuznetsk Moscow+03 - Novokuznetsk +RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River +RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal +RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River +RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky +RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River +RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island +RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky +RU +5934+15048 Asia/Magadan Moscow+08 - Magadan +RU +5301+15839 Asia/Kamchatka Moscow+08 - Kamchatka +RU +6445+17729 Asia/Anadyr Moscow+08 - Bering Sea +RW -0157+03004 Africa/Kigali +SA +2438+04643 Asia/Riyadh +SB -0932+16012 Pacific/Guadalcanal +SC -0440+05528 Indian/Mahe +SD +1536+03232 Africa/Khartoum +SE +5920+01803 Europe/Stockholm +SG +0117+10351 Asia/Singapore +SH -1555-00542 Atlantic/St_Helena +SI +4603+01431 Europe/Ljubljana +SJ +7800+01600 Arctic/Longyearbyen +SK +4809+01707 Europe/Bratislava +SL +0830-01315 Africa/Freetown +SM +4355+01228 Europe/San_Marino +SN +1440-01726 Africa/Dakar +SO +0204+04522 Africa/Mogadishu +SR +0550-05510 America/Paramaribo +SS +0451+03136 Africa/Juba +ST +0020+00644 Africa/Sao_Tome +SV +1342-08912 America/El_Salvador +SX +180305-0630250 America/Lower_Princes +SY +3330+03618 Asia/Damascus +SZ -2618+03106 Africa/Mbabane +TC +2128-07108 America/Grand_Turk +TD +1207+01503 Africa/Ndjamena +TF -492110+0701303 Indian/Kerguelen +TG +0608+00113 Africa/Lome +TH +1345+10031 Asia/Bangkok +TJ +3835+06848 Asia/Dushanbe +TK -0922-17114 Pacific/Fakaofo +TL -0833+12535 Asia/Dili +TM +3757+05823 Asia/Ashgabat +TN +3648+01011 Africa/Tunis +TO -2110-17510 Pacific/Tongatapu +TR +4101+02858 Europe/Istanbul +TT +1039-06131 America/Port_of_Spain +TV -0831+17913 Pacific/Funafuti +TW +2503+12130 Asia/Taipei +TZ -0648+03917 Africa/Dar_es_Salaam +UA +5026+03031 Europe/Kiev most locations +UA +4837+02218 Europe/Uzhgorod Ruthenia +UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk +UA +4457+03406 Europe/Simferopol central Crimea +UG +0019+03225 Africa/Kampala +UM +1645-16931 Pacific/Johnston Johnston Atoll +UM +2813-17722 Pacific/Midway Midway Islands +UM +1917+16637 Pacific/Wake Wake Island +US +404251-0740023 America/New_York Eastern Time +US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations +US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area +US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County +US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations +US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties +US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County +US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County +US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County +US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County +US +415100-0873900 America/Chicago Central Time +US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County +US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County +US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties +US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County +US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area) +US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County +US +394421-1045903 America/Denver Mountain Time +US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon +US +364708-1084111 America/Shiprock Mountain Time - Navajo +US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona +US +340308-1181434 America/Los_Angeles Pacific Time +US +611305-1495401 America/Anchorage Alaska Time +US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle +US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle +US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck +US +643004-1652423 America/Nome Alaska Time - west Alaska +US +515248-1763929 America/Adak Aleutian Islands +US +550737-1313435 America/Metlakatla Metlakatla Time - Annette Island +US +211825-1575130 Pacific/Honolulu Hawaii +UY -3453-05611 America/Montevideo +UZ +3940+06648 Asia/Samarkand west Uzbekistan +UZ +4120+06918 Asia/Tashkent east Uzbekistan +VA +415408+0122711 Europe/Vatican +VC +1309-06114 America/St_Vincent +VE +1030-06656 America/Caracas +VG +1827-06437 America/Tortola +VI +1821-06456 America/St_Thomas +VN +1045+10640 Asia/Ho_Chi_Minh +VU -1740+16825 Pacific/Efate +WF -1318-17610 Pacific/Wallis +WS -1350-17144 Pacific/Apia +YE +1245+04512 Asia/Aden +YT -1247+04514 Indian/Mayotte +ZA -2615+02800 Africa/Johannesburg +ZM -1525+02817 Africa/Lusaka +ZW -1750+03103 Africa/Harare diff --git a/wakatime/packages/tzlocal/__init__.py b/wakatime/packages/tzlocal/__init__.py new file mode 100644 index 0000000..24384ce --- /dev/null +++ b/wakatime/packages/tzlocal/__init__.py @@ -0,0 +1,6 @@ +import sys +if sys.platform == 'win32': + from tzlocal.win32 import get_localzone, reload_localzone +else: + from tzlocal.unix import get_localzone, reload_localzone + diff --git a/wakatime/packages/tzlocal/test_data/Harare b/wakatime/packages/tzlocal/test_data/Harare new file mode 100644 index 0000000..258b393 Binary files /dev/null and b/wakatime/packages/tzlocal/test_data/Harare differ diff --git a/wakatime/packages/tzlocal/test_data/localtime/etc/localtime b/wakatime/packages/tzlocal/test_data/localtime/etc/localtime new file mode 100644 index 0000000..258b393 Binary files /dev/null and b/wakatime/packages/tzlocal/test_data/localtime/etc/localtime differ diff --git a/wakatime/packages/tzlocal/test_data/timezone/etc/timezone b/wakatime/packages/tzlocal/test_data/timezone/etc/timezone new file mode 100644 index 0000000..28b3372 --- /dev/null +++ b/wakatime/packages/tzlocal/test_data/timezone/etc/timezone @@ -0,0 +1 @@ +Africa/Harare diff --git a/wakatime/packages/tzlocal/test_data/timezone_setting/etc/conf.d/clock b/wakatime/packages/tzlocal/test_data/timezone_setting/etc/conf.d/clock new file mode 100644 index 0000000..9503293 --- /dev/null +++ b/wakatime/packages/tzlocal/test_data/timezone_setting/etc/conf.d/clock @@ -0,0 +1 @@ +TIMEZONE = "Africa/Harare" diff --git a/wakatime/packages/tzlocal/test_data/zone_setting/etc/sysconfig/clock b/wakatime/packages/tzlocal/test_data/zone_setting/etc/sysconfig/clock new file mode 100644 index 0000000..e1ddbfd --- /dev/null +++ b/wakatime/packages/tzlocal/test_data/zone_setting/etc/sysconfig/clock @@ -0,0 +1 @@ +ZONE="Africa/Harare" diff --git a/wakatime/packages/tzlocal/tests.py b/wakatime/packages/tzlocal/tests.py new file mode 100644 index 0000000..3cbadf4 --- /dev/null +++ b/wakatime/packages/tzlocal/tests.py @@ -0,0 +1,64 @@ +import sys +import os +from datetime import datetime +import unittest +import pytz +import tzlocal.unix + +class TzLocalTests(unittest.TestCase): + + def test_env(self): + tz_harare = tzlocal.unix._tz_from_env(':Africa/Harare') + self.assertEqual(tz_harare.zone, 'Africa/Harare') + + # Some Unices allow this as well, so we must allow it: + tz_harare = tzlocal.unix._tz_from_env('Africa/Harare') + self.assertEqual(tz_harare.zone, 'Africa/Harare') + + local_path = os.path.split(__file__)[0] + tz_local = tzlocal.unix._tz_from_env(':' + os.path.join(local_path, 'test_data', 'Harare')) + self.assertEqual(tz_local.zone, 'local') + # Make sure the local timezone is the same as the Harare one above. + # We test this with a past date, so that we don't run into future changes + # of the Harare timezone. + dt = datetime(2012, 1, 1, 5) + self.assertEqual(tz_harare.localize(dt), tz_local.localize(dt)) + + # Non-zoneinfo timezones are not supported in the TZ environment. + self.assertRaises(pytz.UnknownTimeZoneError, tzlocal.unix._tz_from_env, 'GMT+03:00') + + def test_timezone(self): + # Most versions of Ubuntu + local_path = os.path.split(__file__)[0] + tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'timezone')) + self.assertEqual(tz.zone, 'Africa/Harare') + + def test_zone_setting(self): + # A ZONE setting in /etc/sysconfig/clock, f ex CentOS + local_path = os.path.split(__file__)[0] + tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'zone_setting')) + self.assertEqual(tz.zone, 'Africa/Harare') + + def test_timezone_setting(self): + # A ZONE setting in /etc/conf.d/clock, f ex Gentoo + local_path = os.path.split(__file__)[0] + tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'timezone_setting')) + self.assertEqual(tz.zone, 'Africa/Harare') + + def test_only_localtime(self): + local_path = os.path.split(__file__)[0] + tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'localtime')) + self.assertEqual(tz.zone, 'local') + dt = datetime(2012, 1, 1, 5) + self.assertEqual(pytz.timezone('Africa/Harare').localize(dt), tz.localize(dt)) + +if sys.platform == 'win32': + + import tzlocal.win32 + class TzWin32Tests(unittest.TestCase): + + def test_win32(self): + tz = tzlocal.win32.get_localzone() + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/wakatime/packages/tzlocal/unix.py b/wakatime/packages/tzlocal/unix.py new file mode 100644 index 0000000..1f4d6f9 --- /dev/null +++ b/wakatime/packages/tzlocal/unix.py @@ -0,0 +1,113 @@ +from __future__ import with_statement +import os +import re +import pytz + +_cache_tz = None + +def _tz_from_env(tzenv): + if tzenv[0] == ':': + tzenv = tzenv[1:] + + # TZ specifies a file + if os.path.exists(tzenv): + with open(tzenv, 'rb') as tzfile: + return pytz.tzfile.build_tzinfo('local', tzfile) + + # TZ specifies a zoneinfo zone. + try: + tz = pytz.timezone(tzenv) + # That worked, so we return this: + return tz + except pytz.UnknownTimeZoneError: + raise pytz.UnknownTimeZoneError( + "tzlocal() does not support non-zoneinfo timezones like %s. \n" + "Please use a timezone in the form of Continent/City") + +def _get_localzone(_root='/'): + """Tries to find the local timezone configuration. + + This method prefers finding the timezone name and passing that to pytz, + over passing in the localtime file, as in the later case the zoneinfo + name is unknown. + + The parameter _root makes the function look for files like /etc/localtime + beneath the _root directory. This is primarily used by the tests. + In normal usage you call the function without parameters.""" + + tzenv = os.environ.get('TZ') + if tzenv: + return _tz_from_env(tzenv) + + # Now look for distribution specific configuration files + # that contain the timezone name. + tzpath = os.path.join(_root, 'etc/timezone') + if os.path.exists(tzpath): + with open(tzpath, 'rb') as tzfile: + data = tzfile.read() + + # Issue #3 was that /etc/timezone was a zoneinfo file. + # That's a misconfiguration, but we need to handle it gracefully: + if data[:5] != 'TZif2': + etctz = data.strip().decode() + # Get rid of host definitions and comments: + if ' ' in etctz: + etctz, dummy = etctz.split(' ', 1) + if '#' in etctz: + etctz, dummy = etctz.split('#', 1) + return pytz.timezone(etctz.replace(' ', '_')) + + # CentOS has a ZONE setting in /etc/sysconfig/clock, + # OpenSUSE has a TIMEZONE setting in /etc/sysconfig/clock and + # Gentoo has a TIMEZONE setting in /etc/conf.d/clock + # We look through these files for a timezone: + + zone_re = re.compile('\s*ZONE\s*=\s*\"') + timezone_re = re.compile('\s*TIMEZONE\s*=\s*\"') + end_re = re.compile('\"') + + for filename in ('etc/sysconfig/clock', 'etc/conf.d/clock'): + tzpath = os.path.join(_root, filename) + if not os.path.exists(tzpath): + continue + with open(tzpath, 'rt') as tzfile: + data = tzfile.readlines() + + for line in data: + # Look for the ZONE= setting. + match = zone_re.match(line) + if match is None: + # No ZONE= setting. Look for the TIMEZONE= setting. + match = timezone_re.match(line) + if match is not None: + # Some setting existed + line = line[match.end():] + etctz = line[:end_re.search(line).start()] + + # We found a timezone + return pytz.timezone(etctz.replace(' ', '_')) + + # No explicit setting existed. Use localtime + for filename in ('etc/localtime', 'usr/local/etc/localtime'): + tzpath = os.path.join(_root, filename) + + if not os.path.exists(tzpath): + continue + with open(tzpath, 'rb') as tzfile: + return pytz.tzfile.build_tzinfo('local', tzfile) + + raise pytz.UnknownTimeZoneError('Can not find any timezone configuration') + +def get_localzone(): + """Get the computers configured local timezone, if any.""" + global _cache_tz + if _cache_tz is None: + _cache_tz = _get_localzone() + return _cache_tz + +def reload_localzone(): + """Reload the cached localzone. You need to call this if the timezone has changed.""" + global _cache_tz + _cache_tz = _get_localzone() + return _cache_tz + \ No newline at end of file diff --git a/wakatime/packages/tzlocal/win32.py b/wakatime/packages/tzlocal/win32.py new file mode 100644 index 0000000..3afcc31 --- /dev/null +++ b/wakatime/packages/tzlocal/win32.py @@ -0,0 +1,88 @@ +try: + import _winreg as winreg +except ImportError: + import winreg + +from tzlocal.windows_tz import tz_names +import pytz + +_cache_tz = None + +def valuestodict(key): + """Convert a registry key's values to a dictionary.""" + dict = {} + size = winreg.QueryInfoKey(key)[1] + for i in range(size): + data = winreg.EnumValue(key, i) + dict[data[0]] = data[1] + return dict + +def get_localzone_name(): + # Windows is special. It has unique time zone names (in several + # meanings of the word) available, but unfortunately, they can be + # translated to the language of the operating system, so we need to + # do a backwards lookup, by going through all time zones and see which + # one matches. + handle = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + + TZLOCALKEYNAME = r"SYSTEM\CurrentControlSet\Control\TimeZoneInformation" + localtz = winreg.OpenKey(handle, TZLOCALKEYNAME) + keyvalues = valuestodict(localtz) + localtz.Close() + if 'TimeZoneKeyName' in keyvalues: + # Windows 7 (and Vista?) + + # For some reason this returns a string with loads of NUL bytes at + # least on some systems. I don't know if this is a bug somewhere, I + # just work around it. + tzkeyname = keyvalues['TimeZoneKeyName'].split('\x00', 1)[0] + else: + # Windows 2000 or XP + + # This is the localized name: + tzwin = keyvalues['StandardName'] + + # Open the list of timezones to look up the real name: + TZKEYNAME = r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones" + tzkey = winreg.OpenKey(handle, TZKEYNAME) + + # Now, match this value to Time Zone information + tzkeyname = None + for i in range(winreg.QueryInfoKey(tzkey)[0]): + subkey = winreg.EnumKey(tzkey, i) + sub = winreg.OpenKey(tzkey, subkey) + data = valuestodict(sub) + sub.Close() + if data['Std'] == tzwin: + tzkeyname = subkey + break + + tzkey.Close() + handle.Close() + + if tzkeyname is None: + raise LookupError('Can not find Windows timezone configuration') + + timezone = tz_names.get(tzkeyname) + if timezone is None: + # Nope, that didn't work. Try adding "Standard Time", + # it seems to work a lot of times: + timezone = tz_names.get(tzkeyname + " Standard Time") + + # Return what we have. + if timezone is None: + raise pytz.UnknownTimeZoneError('Can not find timezone ' + tzkeyname) + + return timezone + +def get_localzone(): + """Returns the zoneinfo-based tzinfo object that matches the Windows-configured timezone.""" + global _cache_tz + if _cache_tz is None: + _cache_tz = pytz.timezone(get_localzone_name()) + return _cache_tz + +def reload_localzone(): + """Reload the cached localzone. You need to call this if the timezone has changed.""" + global _cache_tz + _cache_tz = pytz.timezone(get_localzone_name()) diff --git a/wakatime/packages/tzlocal/windows_tz.py b/wakatime/packages/tzlocal/windows_tz.py new file mode 100644 index 0000000..52a9117 --- /dev/null +++ b/wakatime/packages/tzlocal/windows_tz.py @@ -0,0 +1,101 @@ +# This file is autogenerated by the get_windows_info.py script +# Do not edit. +tz_names = {'AUS Central Standard Time': 'Australia/Darwin', + 'AUS Eastern Standard Time': 'Australia/Sydney', + 'Afghanistan Standard Time': 'Asia/Kabul', + 'Alaskan Standard Time': 'America/Anchorage', + 'Arab Standard Time': 'Asia/Riyadh', + 'Arabian Standard Time': 'Asia/Dubai', + 'Arabic Standard Time': 'Asia/Baghdad', + 'Argentina Standard Time': 'America/Buenos_Aires', + 'Atlantic Standard Time': 'America/Halifax', + 'Azerbaijan Standard Time': 'Asia/Baku', + 'Azores Standard Time': 'Atlantic/Azores', + 'Bahia Standard Time': 'America/Bahia', + 'Bangladesh Standard Time': 'Asia/Dhaka', + 'Canada Central Standard Time': 'America/Regina', + 'Cape Verde Standard Time': 'Atlantic/Cape_Verde', + 'Caucasus Standard Time': 'Asia/Yerevan', + 'Cen. Australia Standard Time': 'Australia/Adelaide', + 'Central America Standard Time': 'America/Guatemala', + 'Central Asia Standard Time': 'Asia/Almaty', + 'Central Brazilian Standard Time': 'America/Cuiaba', + 'Central Europe Standard Time': 'Europe/Budapest', + 'Central European Standard Time': 'Europe/Warsaw', + 'Central Pacific Standard Time': 'Pacific/Guadalcanal', + 'Central Standard Time': 'America/Chicago', + 'Central Standard Time (Mexico)': 'America/Mexico_City', + 'China Standard Time': 'Asia/Shanghai', + 'Dateline Standard Time': 'Etc/GMT+12', + 'E. Africa Standard Time': 'Africa/Nairobi', + 'E. Australia Standard Time': 'Australia/Brisbane', + 'E. Europe Standard Time': 'Asia/Nicosia', + 'E. South America Standard Time': 'America/Sao_Paulo', + 'Eastern Standard Time': 'America/New_York', + 'Egypt Standard Time': 'Africa/Cairo', + 'Ekaterinburg Standard Time': 'Asia/Yekaterinburg', + 'FLE Standard Time': 'Europe/Kiev', + 'Fiji Standard Time': 'Pacific/Fiji', + 'GMT Standard Time': 'Europe/London', + 'GTB Standard Time': 'Europe/Bucharest', + 'Georgian Standard Time': 'Asia/Tbilisi', + 'Greenland Standard Time': 'America/Godthab', + 'Greenwich Standard Time': 'Atlantic/Reykjavik', + 'Hawaiian Standard Time': 'Pacific/Honolulu', + 'India Standard Time': 'Asia/Calcutta', + 'Iran Standard Time': 'Asia/Tehran', + 'Israel Standard Time': 'Asia/Jerusalem', + 'Jordan Standard Time': 'Asia/Amman', + 'Kaliningrad Standard Time': 'Europe/Kaliningrad', + 'Korea Standard Time': 'Asia/Seoul', + 'Magadan Standard Time': 'Asia/Magadan', + 'Mauritius Standard Time': 'Indian/Mauritius', + 'Middle East Standard Time': 'Asia/Beirut', + 'Montevideo Standard Time': 'America/Montevideo', + 'Morocco Standard Time': 'Africa/Casablanca', + 'Mountain Standard Time': 'America/Denver', + 'Mountain Standard Time (Mexico)': 'America/Chihuahua', + 'Myanmar Standard Time': 'Asia/Rangoon', + 'N. Central Asia Standard Time': 'Asia/Novosibirsk', + 'Namibia Standard Time': 'Africa/Windhoek', + 'Nepal Standard Time': 'Asia/Katmandu', + 'New Zealand Standard Time': 'Pacific/Auckland', + 'Newfoundland Standard Time': 'America/St_Johns', + 'North Asia East Standard Time': 'Asia/Irkutsk', + 'North Asia Standard Time': 'Asia/Krasnoyarsk', + 'Pacific SA Standard Time': 'America/Santiago', + 'Pacific Standard Time': 'America/Los_Angeles', + 'Pacific Standard Time (Mexico)': 'America/Santa_Isabel', + 'Pakistan Standard Time': 'Asia/Karachi', + 'Paraguay Standard Time': 'America/Asuncion', + 'Romance Standard Time': 'Europe/Paris', + 'Russian Standard Time': 'Europe/Moscow', + 'SA Eastern Standard Time': 'America/Cayenne', + 'SA Pacific Standard Time': 'America/Bogota', + 'SA Western Standard Time': 'America/La_Paz', + 'SE Asia Standard Time': 'Asia/Bangkok', + 'Samoa Standard Time': 'Pacific/Apia', + 'Singapore Standard Time': 'Asia/Singapore', + 'South Africa Standard Time': 'Africa/Johannesburg', + 'Sri Lanka Standard Time': 'Asia/Colombo', + 'Syria Standard Time': 'Asia/Damascus', + 'Taipei Standard Time': 'Asia/Taipei', + 'Tasmania Standard Time': 'Australia/Hobart', + 'Tokyo Standard Time': 'Asia/Tokyo', + 'Tonga Standard Time': 'Pacific/Tongatapu', + 'Turkey Standard Time': 'Europe/Istanbul', + 'US Eastern Standard Time': 'America/Indianapolis', + 'US Mountain Standard Time': 'America/Phoenix', + 'UTC': 'Etc/GMT', + 'UTC+12': 'Etc/GMT-12', + 'UTC-02': 'Etc/GMT+2', + 'UTC-11': 'Etc/GMT+11', + 'Ulaanbaatar Standard Time': 'Asia/Ulaanbaatar', + 'Venezuela Standard Time': 'America/Caracas', + 'Vladivostok Standard Time': 'Asia/Vladivostok', + 'W. Australia Standard Time': 'Australia/Perth', + 'W. Central Africa Standard Time': 'Africa/Lagos', + 'W. Europe Standard Time': 'Europe/Berlin', + 'West Asia Standard Time': 'Asia/Tashkent', + 'West Pacific Standard Time': 'Pacific/Port_Moresby', + 'Yakutsk Standard Time': 'Asia/Yakutsk'}