Your message dated Tue, 04 Apr 2023 21:52:35 +0000
with message-id <[email protected]>
and subject line unblock python-tz
has caused the Debian Bug report #1033939,
regarding unblock: python-tz/2022.7.1-3
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
1033939: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1033939
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: [email protected]
Usertags: unblock
X-Debbugs-Cc: [email protected]

Please unblock package python-tz

[ Reason ]

python-tz contains a hard-coded list of timezones. This causes problems
on updates to tzdata. Last example: tzdata 2021a-1+deb11u9 added
America/Ciudad_Juarez but due to the hard-coded list, this timezone is
not selectable. Following code will fail with `UnknownTimeZoneError`:

```
#!/usr/bin/python3
import pytz
pytz.timezone("America/Ciudad_Juarez")
```

See also https://github.com/stub42/pytz/issues/91

[ Impact ]
Newly added timezones from tzdata will be availble to python3-tz.

[ Tests ]
I added autopkgtest cases to ensure that updates to tzdata do not
introduce regressions.

[ Risks ]

Several Python projects use python3-tz. The autopkgtest should reduce
the risk of regressions of dynamically determine the list of timezones.
python3-tz can fail in case they system has problems or tzdata is not
properly set-up. Python 3.9 ships the zoneinfo module which can be used
as replacement.

[ Checklist ]
  [x] all changes are documented in the d/changelog (except the
      formatting change by wrap-and-sort)
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

unblock python-tz/2022.7.1-3
diff -Nru python-tz-2022.7.1/debian/changelog 
python-tz-2022.7.1/debian/changelog
--- python-tz-2022.7.1/debian/changelog 2023-01-15 11:24:50.000000000 +0100
+++ python-tz-2022.7.1/debian/changelog 2023-03-27 17:17:53.000000000 +0200
@@ -1,3 +1,21 @@
+python-tz (2022.7.1-3) unstable; urgency=medium
+
+  * Team upload.
+  * Fix testVersion to not complain about the now dynamic Olson version
+
+ -- Benjamin Drung <[email protected]>  Mon, 27 Mar 2023 17:17:53 +0200
+
+python-tz (2022.7.1-2) unstable; urgency=medium
+
+  * Team upload.
+  * 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
+  * Update homepage URL
+  * Bump Standards-Version to 4.6.2
+
+ -- Benjamin Drung <[email protected]>  Tue, 21 Mar 2023 11:21:11 +0100
+
 python-tz (2022.7.1-1) unstable; urgency=medium
 
   * New upstream release
diff -Nru python-tz-2022.7.1/debian/control python-tz-2022.7.1/debian/control
--- python-tz-2022.7.1/debian/control   2023-01-15 11:24:50.000000000 +0100
+++ python-tz-2022.7.1/debian/control   2023-03-27 17:12:30.000000000 +0200
@@ -6,19 +6,19 @@
            Debian/Ubuntu Zope Team 
<[email protected]>,
            Fabio Tranchitella <[email protected]>
 Build-Depends: debhelper-compat (= 13),
-              dh-sequence-python3,
+               dh-sequence-python3,
                python3-all,
-               python3-setuptools,
                python3-pytest,
-               tzdata,
-Standards-Version: 4.6.1
-Homepage: https://pypi.python.org/pypi/pytz/
+               python3-setuptools,
+               tzdata
+Standards-Version: 4.6.2
+Homepage: https://pythonhosted.org/pytz/
 Vcs-Browser: https://salsa.debian.org/python-team/packages/python-tz
 Vcs-Git: https://salsa.debian.org/python-team/packages/python-tz.git -b 
debian/latest
 
 Package: python3-tz
 Architecture: all
-Depends: tzdata, ${python3:Depends}, ${misc:Depends}
+Depends: tzdata, ${misc:Depends}, ${python3:Depends}
 Description: Python3 version of the Olson timezone database
  python-tz brings the Olson tz database into Python. This library allows
  accurate and cross platform timezone calculations using Python 2.3 or higher.
diff -Nru 
python-tz-2022.7.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch
 
python-tz-2022.7.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch
--- 
python-tz-2022.7.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch
       1970-01-01 01:00:00.000000000 +0100
+++ 
python-tz-2022.7.1/debian/patches/Determine-IANA-nee-Olson-database-version-dynamically.patch
       2023-03-27 17:14:42.000000000 +0200
@@ -0,0 +1,69 @@
+From: Benjamin Drung <[email protected]>
+Date: Mon, 27 Mar 2023 17:14:22 +0200
+Subject: Determine IANA (nee Olson) database version dynamically
+
+Forwarded: not-needed
+Signed-off-by: Benjamin Drung <[email protected]>
+---
+ pytz/__init__.py          | 13 ++++++++++++-
+ pytz/tests/test_tzinfo.py |  8 --------
+ 2 files changed, 12 insertions(+), 9 deletions(-)
+
+diff --git a/pytz/__init__.py b/pytz/__init__.py
+index 8b2fa1b..da2f206 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 = '2022g'
++OLSON_VERSION = _read_olson_version()
+ VERSION = '2022.7.1'  # pip compatible version number.
+ __version__ = VERSION
+ 
+diff --git a/pytz/tests/test_tzinfo.py b/pytz/tests/test_tzinfo.py
+index 48f51b1..7db8a57 100644
+--- a/pytz/tests/test_tzinfo.py
++++ b/pytz/tests/test_tzinfo.py
+@@ -28,7 +28,6 @@ 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.7.1'
+-EXPECTED_OLSON_VERSION = '2022g'
+ 
+ fmt = '%Y-%m-%d %H:%M:%S %Z%z'
+ 
+@@ -74,13 +73,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.assertEqual(now.utcoffset(), NOTIME)
diff -Nru 
python-tz-2022.7.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch
 
python-tz-2022.7.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch
--- 
python-tz-2022.7.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch
   1970-01-01 01:00:00.000000000 +0100
+++ 
python-tz-2022.7.1/debian/patches/Dynamically-determine-list-of-available-and-common-timezo.patch
   2023-03-27 17:14:42.000000000 +0200
@@ -0,0 +1,1109 @@
+From: Benjamin Drung <[email protected]>
+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 <[email protected]>
+---
+ pytz/__init__.py | 942 ++-----------------------------------------------------
+ 1 file changed, 22 insertions(+), 920 deletions(-)
+
+diff --git a/pytz/__init__.py b/pytz/__init__.py
+index 99bf1e4..8b2fa1b 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
+@@ -202,7 +204,7 @@ def _case_insensitive_zone_lookup(zone):
+     """case-insensitively matching timezone, else return zone unchanged"""
+     global _all_timezones_lower_to_standard
+     if _all_timezones_lower_to_standard is None:
+-        _all_timezones_lower_to_standard = dict((tz.lower(), tz) for tz in 
_all_timezones_unchecked)  # noqa
++        _all_timezones_lower_to_standard = dict((tz.lower(), tz) for tz in 
all_timezones)  # noqa
+     return _all_timezones_lower_to_standard.get(zone.lower()) or zone  # noqa
+ 
+ 
+@@ -512,922 +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_unchecked = \
+-['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/Ciudad_Juarez',
+- '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/Kyiv',
+- '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_unchecked 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/Ciudad_Juarez',
+- '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/Nome',
+- 'America/Noronha',
+- 'America/North_Dakota/Beulah',
+- 'America/North_Dakota/Center',
+- 'America/North_Dakota/New_Salem',
+- 'America/Nuuk',
+- 'America/Ojinaga',
+- 'America/Panama',
+- 'America/Paramaribo',
+- 'America/Phoenix',
+- 'America/Port-au-Prince',
+  'America/Port_of_Spain',
+- 'America/Porto_Velho',
+- 'America/Puerto_Rico',
+- 'America/Punta_Arenas',
+- '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/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',
+@@ -1435,111 +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/Kirov',
+- 'Europe/Kyiv',
+- '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/Vaduz',
+  'Europe/Vatican',
+- 'Europe/Vienna',
+- 'Europe/Vilnius',
+- 'Europe/Volgograd',
+- 'Europe/Warsaw',
+  'Europe/Zagreb',
+- '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',
+@@ -1549,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.7.1/debian/patches/series 
python-tz-2022.7.1/debian/patches/series
--- python-tz-2022.7.1/debian/patches/series    2023-01-15 11:24:50.000000000 
+0100
+++ python-tz-2022.7.1/debian/patches/series    2023-03-27 17:14:42.000000000 
+0200
@@ -1 +1,3 @@
 tzdata
+Dynamically-determine-list-of-available-and-common-timezo.patch
+Determine-IANA-nee-Olson-database-version-dynamically.patch
diff -Nru python-tz-2022.7.1/debian/tests/control 
python-tz-2022.7.1/debian/tests/control
--- python-tz-2022.7.1/debian/tests/control     1970-01-01 01:00:00.000000000 
+0100
+++ python-tz-2022.7.1/debian/tests/control     2023-03-27 17:12:30.000000000 
+0200
@@ -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.7.1/debian/tests/regression 
python-tz-2022.7.1/debian/tests/regression
--- python-tz-2022.7.1/debian/tests/regression  1970-01-01 01:00:00.000000000 
+0100
+++ python-tz-2022.7.1/debian/tests/regression  2023-03-27 17:12:30.000000000 
+0200
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+
+# Copyright (C) 2012-2023 Canonical Ltd.
+# Author: Benjamin Drung <[email protected]>
+#
+# 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 <http://www.gnu.org/licenses/>.
+#
+# 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_all_timezones_count(self) -> None:
+        """Test all_timezones count to be reasonable."""
+        zones = len(pytz.all_timezones)
+        self.assertGreaterEqual(zones, 597, "less zones than 2022g-3")
+        self.assertLess(zones, round(597 * 1.1), ">10% more zones than 
2022g-3")
+        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()

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply via email to