diff -Nru python-tz-2022.1/debian/changelog python-tz-2022.1/debian/changelog --- python-tz-2022.1/debian/changelog 2022-11-16 15:19:43.000000000 +0100 +++ python-tz-2022.1/debian/changelog 2023-03-21 12:45:55.000000000 +0100 @@ -1,3 +1,11 @@ +python-tz (2022.1-1ubuntu0.22.04.1) jammy; urgency=medium + + * Dynamically determine list of available and common timezones (LP: #207604) + * Determine IANA (nee Olson) database version dynamically + * Add autopkgtests to run unittest and own regression tests + + -- Benjamin Drung Tue, 21 Mar 2023 12:45:55 +0100 + python-tz (2022.1-1ubuntu0.22.04.0) jammy; urgency=medium * test: Revert inclusion of PACKRATDATA=backzone diff -Nru python-tz-2022.1/debian/control python-tz-2022.1/debian/control --- python-tz-2022.1/debian/control 2022-11-16 15:14:36.000000000 +0100 +++ python-tz-2022.1/debian/control 2023-03-21 12:45:55.000000000 +0100 @@ -1,7 +1,8 @@ Source: python-tz Section: python Priority: optional -Maintainer: Debian Python Team +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Debian Python Team Uploaders: Alastair McKinstry , Debian/Ubuntu Zope Team , Fabio Tranchitella diff -Nru python-tz-2022.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch python-tz-2022.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch --- python-tz-2022.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch 1970-01-01 01:00:00.000000000 +0100 +++ python-tz-2022.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch 2023-03-21 12:44:06.000000000 +0100 @@ -0,0 +1,61 @@ +From: Benjamin Drung +Date: Mon, 20 Mar 2023 17:55:39 +0100 +Subject: Determine IANA (nee Olson) database version dynamically + +Forwarded: not-needed +Signed-off-by: Benjamin Drung +--- + pytz/__init__.py | 13 ++++++++++++- + pytz/tests/test_tzinfo.py | 7 ------- + 2 files changed, 12 insertions(+), 8 deletions(-) + +diff --git a/pytz/__init__.py b/pytz/__init__.py +index 1c78fde..5996e71 100644 +--- a/pytz/__init__.py ++++ b/pytz/__init__.py +@@ -12,6 +12,7 @@ import sys + import datetime + import os.path + import pathlib ++import re + import zoneinfo + + from pytz.exceptions import AmbiguousTimeError +@@ -23,8 +24,18 @@ from pytz.tzinfo import unpickler, BaseTzInfo + from pytz.tzfile import build_tzinfo + + ++def _read_olson_version() -> str: ++ tzdata_zi = pathlib.Path("/usr/share/zoneinfo/tzdata.zi") ++ with tzdata_zi.open(encoding="utf-8") as tzdata_zi_file: ++ line = tzdata_zi_file.readline() ++ match = re.match("^#\s*version\s*([0-9a-z]*)\s*$", line) ++ if match: ++ return match.group(1) ++ return "unknown" ++ ++ + # The IANA (nee Olson) database is updated several times a year. +-OLSON_VERSION = '2022a' ++OLSON_VERSION = _read_olson_version() + VERSION = '2022.1' # pip compatible version number. + __version__ = VERSION + +diff --git a/pytz/tests/test_tzinfo.py b/pytz/tests/test_tzinfo.py +index 1d67de6..2303a86 100644 +--- a/pytz/tests/test_tzinfo.py ++++ b/pytz/tests/test_tzinfo.py +@@ -74,13 +74,6 @@ class BasicTest(unittest.TestCase): + % (EXPECTED_VERSION, pytz.__version__) + ) + +- self.assertEqual( +- EXPECTED_OLSON_VERSION, pytz.OLSON_VERSION, +- 'Incorrect pytz version loaded. Import path is stuffed ' +- 'or this test needs updating. (Wanted %s, got %s)' +- % (EXPECTED_OLSON_VERSION, pytz.OLSON_VERSION) +- ) +- + def testGMT(self): + now = datetime.now(tz=GMT) + self.assertTrue(now.utcoffset() == NOTIME) diff -Nru python-tz-2022.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch python-tz-2022.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch --- python-tz-2022.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch 1970-01-01 01:00:00.000000000 +0100 +++ python-tz-2022.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch 2023-03-21 12:44:06.000000000 +0100 @@ -0,0 +1,1103 @@ +From: Benjamin Drung +Date: Mon, 20 Mar 2023 17:49:11 +0100 +Subject: Dynamically determine list of available and common timezones + +The Debian/Ubuntu packages of pytz include a patch to not install pytz's +zoneinfo database and instead load data from the system zoneinfo +database. This keeps pytz up to date when system timezone updates are +installed which is generally a good idea. + +The `pytz/__init__.py` includes `common_timezones` and `all_timezones` +lists, which enumerate the time zones in the database pytz was released +with. If pytz is instead using the system database, these lists may not +be correct (e.g. missing newly added time zones). + +Dynamically determine `all_timezones` and `common_timezones`. For +`all_timezones` use `zoneinfo` from Python 3.9 and for +`common_timezones` parse `/usr/share/zoneinfo/zone1970.tab`. + +Bug: https://launchpad.net/bugs/207604 +Signed-off-by: Benjamin Drung +--- + pytz/__init__.py | 943 ++----------------------------------------------------- + 1 file changed, 21 insertions(+), 922 deletions(-) + +diff --git a/pytz/__init__.py b/pytz/__init__.py +index 5a1b816..1c78fde 100644 +--- a/pytz/__init__.py ++++ b/pytz/__init__.py +@@ -11,6 +11,8 @@ on how to use these modules. + import sys + import datetime + import os.path ++import pathlib ++import zoneinfo + + from pytz.exceptions import AmbiguousTimeError + from pytz.exceptions import InvalidTimeError +@@ -512,923 +514,91 @@ def _test(): + return doctest.testmod(pytz) + + ++def _read_timezones_from_zone_tab() -> set[str]: ++ timezones = set() ++ zone_tab = pathlib.Path("/usr/share/zoneinfo/zone1970.tab") ++ for line in zone_tab.read_text(encoding="utf-8").splitlines(): ++ if line.startswith("#"): ++ continue ++ timezones.add(line.split("\t")[2]) ++ return timezones ++ ++ + 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_Nelson', +- '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/Nuuk', +- '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/Punta_Arenas', +- '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/Troll', +- 'Antarctica/Vostok', +- 'Arctic/Longyearbyen', +- 'Asia/Aden', +- 'Asia/Almaty', +- 'Asia/Amman', +- 'Asia/Anadyr', +- 'Asia/Aqtau', +- 'Asia/Aqtobe', +- 'Asia/Ashgabat', +- 'Asia/Ashkhabad', +- 'Asia/Atyrau', +- 'Asia/Baghdad', +- 'Asia/Bahrain', +- 'Asia/Baku', +- 'Asia/Bangkok', +- 'Asia/Barnaul', +- 'Asia/Beirut', +- 'Asia/Bishkek', +- 'Asia/Brunei', +- 'Asia/Calcutta', +- 'Asia/Chita', +- 'Asia/Choibalsan', +- 'Asia/Chongqing', +- 'Asia/Chungking', +- 'Asia/Colombo', +- 'Asia/Dacca', +- 'Asia/Damascus', +- 'Asia/Dhaka', +- 'Asia/Dili', +- 'Asia/Dubai', +- 'Asia/Dushanbe', +- 'Asia/Famagusta', +- '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/Qostanay', +- 'Asia/Qyzylorda', +- 'Asia/Rangoon', +- 'Asia/Riyadh', +- 'Asia/Saigon', +- 'Asia/Sakhalin', +- 'Asia/Samarkand', +- 'Asia/Seoul', +- 'Asia/Shanghai', +- 'Asia/Singapore', +- 'Asia/Srednekolymsk', +- 'Asia/Taipei', +- 'Asia/Tashkent', +- 'Asia/Tbilisi', +- 'Asia/Tehran', +- 'Asia/Tel_Aviv', +- 'Asia/Thimbu', +- 'Asia/Thimphu', +- 'Asia/Tokyo', +- 'Asia/Tomsk', +- 'Asia/Ujung_Pandang', +- 'Asia/Ulaanbaatar', +- 'Asia/Ulan_Bator', +- 'Asia/Urumqi', +- 'Asia/Ust-Nera', +- 'Asia/Vientiane', +- 'Asia/Vladivostok', +- 'Asia/Yakutsk', +- 'Asia/Yangon', +- '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/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/Astrakhan', +- '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/Kirov', +- '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/Saratov', +- 'Europe/Simferopol', +- 'Europe/Skopje', +- 'Europe/Sofia', +- 'Europe/Stockholm', +- 'Europe/Tallinn', +- 'Europe/Tirane', +- 'Europe/Tiraspol', +- 'Europe/Ulyanovsk', +- '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/Bougainville', +- '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/Kanton', +- '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/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', ++ ++_extra_common_timezones_set = { + '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/Fort_Nelson', +- 'America/Fortaleza', +- 'America/Glace_Bay', +- '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/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/Nuuk', +- '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/Punta_Arenas', +- 'America/Rainy_River', +- 'America/Rankin_Inlet', +- 'America/Recife', +- 'America/Regina', +- 'America/Resolute', +- 'America/Rio_Branco', +- 'America/Santarem', +- 'America/Santiago', +- 'America/Santo_Domingo', +- 'America/Sao_Paulo', +- 'America/Scoresbysund', +- '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/Syowa', +- 'Antarctica/Troll', + 'Antarctica/Vostok', + 'Arctic/Longyearbyen', + 'Asia/Aden', +- 'Asia/Almaty', +- 'Asia/Amman', +- 'Asia/Anadyr', +- 'Asia/Aqtau', +- 'Asia/Aqtobe', +- 'Asia/Ashgabat', +- 'Asia/Atyrau', +- 'Asia/Baghdad', + 'Asia/Bahrain', +- 'Asia/Baku', +- 'Asia/Bangkok', +- 'Asia/Barnaul', +- 'Asia/Beirut', +- 'Asia/Bishkek', + 'Asia/Brunei', +- 'Asia/Chita', +- 'Asia/Choibalsan', +- 'Asia/Colombo', +- 'Asia/Damascus', +- 'Asia/Dhaka', +- 'Asia/Dili', +- 'Asia/Dubai', +- 'Asia/Dushanbe', +- 'Asia/Famagusta', +- 'Asia/Gaza', +- '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/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/Qostanay', +- 'Asia/Qyzylorda', +- 'Asia/Riyadh', +- 'Asia/Sakhalin', +- 'Asia/Samarkand', +- 'Asia/Seoul', +- 'Asia/Shanghai', +- 'Asia/Singapore', +- 'Asia/Srednekolymsk', +- 'Asia/Taipei', +- 'Asia/Tashkent', +- 'Asia/Tbilisi', +- 'Asia/Tehran', +- 'Asia/Thimphu', +- 'Asia/Tokyo', +- 'Asia/Tomsk', +- 'Asia/Ulaanbaatar', +- 'Asia/Urumqi', +- 'Asia/Ust-Nera', + 'Asia/Vientiane', +- 'Asia/Vladivostok', +- 'Asia/Yakutsk', +- 'Asia/Yangon', +- '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/Darwin', +- 'Australia/Eucla', +- 'Australia/Hobart', +- 'Australia/Lindeman', +- 'Australia/Lord_Howe', +- 'Australia/Melbourne', +- 'Australia/Perth', +- 'Australia/Sydney', + 'Canada/Atlantic', + 'Canada/Central', + 'Canada/Eastern', +@@ -1436,113 +606,40 @@ common_timezones = \ + 'Canada/Newfoundland', + 'Canada/Pacific', + 'Europe/Amsterdam', +- 'Europe/Andorra', +- 'Europe/Astrakhan', +- '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/Kirov', +- '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/Saratov', +- 'Europe/Simferopol', + 'Europe/Skopje', +- 'Europe/Sofia', + 'Europe/Stockholm', +- 'Europe/Tallinn', +- 'Europe/Tirane', +- 'Europe/Ulyanovsk', +- '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/Bougainville', +- 'Pacific/Chatham', + 'Pacific/Chuuk', +- 'Pacific/Easter', +- 'Pacific/Efate', +- 'Pacific/Fakaofo', +- 'Pacific/Fiji', + 'Pacific/Funafuti', +- 'Pacific/Galapagos', +- 'Pacific/Gambier', +- 'Pacific/Guadalcanal', +- 'Pacific/Guam', +- 'Pacific/Honolulu', +- 'Pacific/Kanton', +- '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', +@@ -1552,8 +649,10 @@ common_timezones = \ + '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) ++ 'UTC'} ++ ++all_timezones_set = zoneinfo.available_timezones() - {"Factory", "localtime"} ++common_timezones_set = (_read_timezones_from_zone_tab() | _extra_common_timezones_set) & all_timezones_set ++ ++all_timezones = sorted(all_timezones_set) ++common_timezones = sorted(common_timezones_set) diff -Nru python-tz-2022.1/debian/patches/series python-tz-2022.1/debian/patches/series --- python-tz-2022.1/debian/patches/series 2022-11-16 15:19:43.000000000 +0100 +++ python-tz-2022.1/debian/patches/series 2023-03-21 12:44:06.000000000 +0100 @@ -1,3 +1,4 @@ tzdata Revert-inclusion-of-PACKRATDATA-backzone.patch -Update-timezones-to-tzdata-2022f.patch +Dynamically-determine-list-of-available-and-common-timezo.patch +Determine-IANA-nee-Olson-database-version-dynamically.patch diff -Nru python-tz-2022.1/debian/patches/Update-timezones-to-tzdata-2022f.patch python-tz-2022.1/debian/patches/Update-timezones-to-tzdata-2022f.patch --- python-tz-2022.1/debian/patches/Update-timezones-to-tzdata-2022f.patch 2022-11-16 15:19:43.000000000 +0100 +++ python-tz-2022.1/debian/patches/Update-timezones-to-tzdata-2022f.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,97 +0,0 @@ -From: Benjamin Drung -Date: Wed, 16 Nov 2022 15:17:52 +0100 -Subject: Update timezones to tzdata 2022f - -Update `all_timezones` and `common_timezones` to tzdata 2022f. - -Bug-Ubuntu: https://launchpad.net/bugs/1995864 -Signed-off-by: Benjamin Drung ---- - pytz/__init__.py | 10 +++------- - pytz/tests/test_tzinfo.py | 2 +- - 2 files changed, 4 insertions(+), 8 deletions(-) - -diff --git a/pytz/__init__.py b/pytz/__init__.py -index 5a1b816..3636bdf 100644 ---- a/pytz/__init__.py -+++ b/pytz/__init__.py -@@ -22,7 +22,7 @@ from pytz.tzfile import build_tzinfo - - - # The IANA (nee Olson) database is updated several times a year. --OLSON_VERSION = '2022a' -+OLSON_VERSION = '2022f' - VERSION = '2022.1' # pip compatible version number. - __version__ = VERSION - -@@ -964,6 +964,7 @@ all_timezones = \ - 'Europe/Kaliningrad', - 'Europe/Kiev', - 'Europe/Kirov', -+ 'Europe/Kyiv', - 'Europe/Lisbon', - 'Europe/Ljubljana', - 'Europe/London', -@@ -1266,7 +1267,6 @@ common_timezones = \ - 'America/Montserrat', - 'America/Nassau', - 'America/New_York', -- 'America/Nipigon', - 'America/Nome', - 'America/Noronha', - 'America/North_Dakota/Beulah', -@@ -1283,7 +1283,6 @@ common_timezones = \ - 'America/Porto_Velho', - 'America/Puerto_Rico', - 'America/Punta_Arenas', -- 'America/Rainy_River', - 'America/Rankin_Inlet', - 'America/Recife', - 'America/Regina', -@@ -1304,7 +1303,6 @@ common_timezones = \ - 'America/Swift_Current', - 'America/Tegucigalpa', - 'America/Thule', -- 'America/Thunder_Bay', - 'America/Tijuana', - 'America/Toronto', - 'America/Tortola', -@@ -1456,8 +1454,8 @@ common_timezones = \ - 'Europe/Istanbul', - 'Europe/Jersey', - 'Europe/Kaliningrad', -- 'Europe/Kiev', - 'Europe/Kirov', -+ 'Europe/Kyiv', - 'Europe/Lisbon', - 'Europe/Ljubljana', - 'Europe/London', -@@ -1485,7 +1483,6 @@ common_timezones = \ - 'Europe/Tallinn', - 'Europe/Tirane', - 'Europe/Ulyanovsk', -- 'Europe/Uzhgorod', - 'Europe/Vaduz', - 'Europe/Vatican', - 'Europe/Vienna', -@@ -1493,7 +1490,6 @@ common_timezones = \ - 'Europe/Volgograd', - 'Europe/Warsaw', - 'Europe/Zagreb', -- 'Europe/Zaporozhye', - 'Europe/Zurich', - 'GMT', - 'Indian/Antananarivo', -diff --git a/pytz/tests/test_tzinfo.py b/pytz/tests/test_tzinfo.py -index 1d67de6..6cb2d3d 100644 ---- a/pytz/tests/test_tzinfo.py -+++ b/pytz/tests/test_tzinfo.py -@@ -28,7 +28,7 @@ from pytz.tzinfo import DstTzInfo, StaticTzInfo # noqa - # I test for expected version to ensure the correct version of pytz is - # actually being tested. - EXPECTED_VERSION = '2022.1' --EXPECTED_OLSON_VERSION = '2022a' -+EXPECTED_OLSON_VERSION = '2022f' - - fmt = '%Y-%m-%d %H:%M:%S %Z%z' - diff -Nru python-tz-2022.1/debian/tests/control python-tz-2022.1/debian/tests/control --- python-tz-2022.1/debian/tests/control 1970-01-01 01:00:00.000000000 +0100 +++ python-tz-2022.1/debian/tests/control 2023-03-21 12:45:41.000000000 +0100 @@ -0,0 +1,8 @@ +Test-Command: cp -r pytz/tests "$AUTOPKGTEST_TMP" && cd "$AUTOPKGTEST_TMP" && rm -f tests/test_docs.py && touch tests/__init__.py && python3 -m unittest discover -v +Depends: python3, python3-tz +Restrictions: allow-stderr +Features: test-name=unittest + +Tests: regression +Depends: python3, python3-tz +Restrictions: allow-stderr diff -Nru python-tz-2022.1/debian/tests/regression python-tz-2022.1/debian/tests/regression --- python-tz-2022.1/debian/tests/regression 1970-01-01 01:00:00.000000000 +0100 +++ python-tz-2022.1/debian/tests/regression 2023-03-21 12:45:55.000000000 +0100 @@ -0,0 +1,128 @@ +#!/usr/bin/python3 + +# Copyright (C) 2012-2023 Canonical Ltd. +# Author: Benjamin Drung +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 3, +# as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Parts taken from +# https://git.launchpad.net/qa-regression-testing/tree/scripts/test-tzdata.py + +"""Regression tests for python3-tz.""" + +import sys +import unittest +from datetime import datetime, timedelta + +import pytz + + +class TZDataTest(unittest.TestCase): + """Regression tests for python3-tz.""" + + def test_lp1965791_gaza(self) -> None: + """Test Gaza 2022 DST change""" + timezone = pytz.timezone("Asia/Gaza") + offset_before = timezone.localize(datetime(2022, 3, 22)) + updated_before = timezone.localize(datetime(2022, 3, 27)) + offset_after = timezone.localize(datetime(2022, 3, 29)) + + with self.subTest(testcase=offset_before): + self.assertEqual(offset_before.utcoffset(), updated_before.utcoffset()) + with self.subTest(testcase=updated_before): + utc_offset_difference = offset_after.utcoffset() - offset_before.utcoffset() + self.assertEqual(utc_offset_difference, timedelta(seconds=3600)) + + def test_lp1986984_chile(self) -> None: + """Test Chile 2022 DST date""" + # chile dst changed from 2022/09/04 to 2022/09/11 + timezone = pytz.timezone("America/Santiago") + always_before = timezone.localize(datetime(2022, 9, 1)) + now_before = timezone.localize(datetime(2022, 9, 8)) + always_after = timezone.localize(datetime(2022, 9, 12)) + with self.subTest(testcase=always_before): + self.assertEqual(always_before.utcoffset(), now_before.utcoffset()) + with self.subTest(testcase=now_before): + utc_offset_difference = always_after.utcoffset() - now_before.utcoffset() + self.assertEqual(utc_offset_difference, timedelta(seconds=3600)) + + def test_lp1992692_gaza(self) -> None: + """Test Gaza October 2022 DST date""" + # gaza dst changed from 2022/10/28 to 2022/10/29 + timezone = pytz.timezone("Asia/Gaza") + offset_before = timezone.localize(datetime(2022, 10, 1)) + updated_before = timezone.localize(datetime(2022, 10, 29)) + offset_after = timezone.localize(datetime(2022, 11, 1)) + # time falls back with this change + offset_change = -3600 + + with self.subTest(testcase=offset_before): + self.assertEqual(offset_before.utcoffset(), updated_before.utcoffset()) + with self.subTest(testcase=updated_before): + utc_offset_difference = offset_after.utcoffset() - offset_before.utcoffset() + self.assertEqual(utc_offset_difference, timedelta(seconds=offset_change)) + + def test_lp1995864_kyiv(self) -> None: + """Test Europe/Kyiv (from tzdata 2022b) is available.""" + self.assertTrue(pytz.timezone("Europe/Kyiv")) + self.assertIn("Europe/Kyiv", pytz.all_timezones) + self.assertIn("Europe/Kyiv", pytz.common_timezones) + + def test_all_timezones_count(self) -> None: + """Test all_timezones count to be reasonable.""" + zones = len(pytz.all_timezones) + self.assertGreaterEqual(zones, 596, "less zones than 2022g-0ubuntu0.22.04.1") + self.assertLess(zones, round(596 * 1.1), ">10% more zones than 2022g-0ubuntu0.22.04.1") + self.assertEqual(len(pytz.all_timezones_set), zones) + + def test_common_timezones_count(self) -> None: + """Test common_timezones count to be reasonable.""" + self.assertEqual(pytz.common_timezones_set - pytz.all_timezones_set, set()) + + def _test_timezone(self, zone: str) -> None: + """Test zone to load, have a name, and have a reasonable offset.""" + timezone = pytz.timezone(zone) + self.assertEqual(str(timezone), zone) + date = timezone.localize(datetime(2020, 10, 31, 12)) + + tzname = date.tzname() + assert tzname is not None + self.assertGreaterEqual(len(tzname), 3, tzname) + self.assertLessEqual(len(tzname), 5, tzname) + + utc_offset = date.utcoffset() + assert utc_offset is not None + self.assertEqual(int(utc_offset.total_seconds()) % 900, 0) + self.assertLessEqual(utc_offset, timedelta(hours=14)) + + def test_timezones(self) -> None: + """Test all zones to load, have a name, and have a reasonable offset.""" + for zone in pytz.all_timezones: + with self.subTest(zone=zone): + self._test_timezone(zone) + + def test_olson_version(self) -> None: + """Test IANA (nee Olson) database version was successful determined.""" + self.assertNotEqual(pytz.OLSON_VERSION, "unknown") + self.assertTrue(pytz.OLSON_VERSION[0].isdigit(), pytz.OLSON_VERSION) + + +def main() -> None: + """Run unit tests in verbose mode.""" + argv = sys.argv.copy() + argv.insert(1, "-v") + unittest.main(argv=argv) + + +if __name__ == "__main__": + main()