Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-tzlocal for openSUSE:Factory 
checked in at 2026-10-27 18:17:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-tzlocal (Old)
 and      /work/SRC/openSUSE:Factory/.python-tzlocal.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-tzlocal"

Tue Oct 27 18:17:45 2026 rev:21 rq:1392528 version:5.4.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-tzlocal/python-tzlocal.changes    
2026-07-07 21:00:27.832641086 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-tzlocal.new.2252680/python-tzlocal.changes   
    2026-10-27 18:17:52.802889076 +0100
@@ -1,0 +2,8 @@
+Sun Oct 25 19:57:06 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 5.4.5:
+  * Recognize timezone file names with multiple slashes in the TZ
+    environment variable.
+  * Use HTTPS in place of FTP to retrieve tzdata archive.
+
+-------------------------------------------------------------------

Old:
----
  5.4.4.tar.gz

New:
----
  5.4.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-tzlocal.spec ++++++
--- /var/tmp/diff_new_pack.gUacYn/_old  2026-10-27 18:17:55.022981668 +0100
+++ /var/tmp/diff_new_pack.gUacYn/_new  2026-10-27 18:17:55.024981752 +0100
@@ -19,7 +19,7 @@
 %define modname tzlocal
 %{?sle15_python_module_pythons}
 Name:           python-%{modname}
-Version:        5.4.4
+Version:        5.4.5
 Release:        0
 Summary:        Timezone information (tzinfo) object for the local timezone
 License:        MIT

++++++ 5.4.4.tar.gz -> 5.4.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/CHANGES.txt 
new/tzlocal-5.4.5/CHANGES.txt
--- old/tzlocal-5.4.4/CHANGES.txt       2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/CHANGES.txt       2026-10-22 11:09:17.000000000 +0200
@@ -1,6 +1,12 @@
 Changes
 =======
 
+5.4.5 (2026-10-22)
+------------------
+
+- Recognize timezone file names with multiple slashes in the TZ environment 
variable.
+- Use HTTPS in place of FTP to retrieve tzdata archive.
+
 5.4.4 (2026-06-29)
 ------------------
 
@@ -45,12 +51,12 @@
 
 - Now supports Python 3.9 to 3.13, and no longer requires backports.zoneinfo.
 
-- Some distributions are for some reason removing support for /etc/timezone, 
-  which is bad, because that's the only place where the timezone is stated 
-  in plain text, and what's worse, they don't delete it. So we can't trust 
+- Some distributions are for some reason removing support for /etc/timezone,
+  which is bad, because that's the only place where the timezone is stated
+  in plain text, and what's worse, they don't delete it. So we can't trust
   it now, so when we have multiple configs, we are forced to just ignore it.
 
-- Attempts to return a ZoneInfo object also for UTC. 
+- Attempts to return a ZoneInfo object also for UTC.
 
 
 5.2 (2023-10-22)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/Makefile new/tzlocal-5.4.5/Makefile
--- old/tzlocal-5.4.4/Makefile  2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/Makefile  2026-10-22 11:09:17.000000000 +0200
@@ -13,6 +13,7 @@
 
 update_mapping:
        $(bin_dir)/python update_windows_mappings.py
+       $(bin_dir)/ruff format tzlocal/windows_tz.py
 
 check:
        $(bin_dir)/ruff check tzlocal tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/README.rst new/tzlocal-5.4.5/README.rst
--- old/tzlocal-5.4.4/README.rst        2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/README.rst        2026-10-22 11:09:17.000000000 +0200
@@ -203,6 +203,8 @@
 * Sam Treweek
 * Peter Di Pasquale
 * Rongrong
+* Muneeb Sheikh
+* Nicolò Daprelà
 
 (Sorry if I forgot someone)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/pyproject.toml 
new/tzlocal-5.4.5/pyproject.toml
--- old/tzlocal-5.4.4/pyproject.toml    2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/pyproject.toml    2026-10-22 11:09:17.000000000 +0200
@@ -6,7 +6,7 @@
 name = "tzlocal"
 description = "tzinfo object for the local timezone"
 readme = "README.rst"
-version = "5.4.4"
+version = "5.4.5"
 authors = [{name = "Lennart Regebro", email = "[email protected]"}]
 license = "MIT"
 keywords = ["timezone"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/tests/test_tzlocal.py 
new/tzlocal-5.4.5/tests/test_tzlocal.py
--- old/tzlocal-5.4.4/tests/test_tzlocal.py     2026-06-29 10:03:29.000000000 
+0200
+++ new/tzlocal-5.4.5/tests/test_tzlocal.py     2026-10-22 11:09:17.000000000 
+0200
@@ -19,7 +19,7 @@
     os.environ.pop("TZ", None)
 
 
-def tz_path(zonefile: str = None) -> str:
+def tz_path(zonefile: str | None = None) -> str:
     path = Path(__file__).parent.joinpath("test_data")
     if zonefile:
         return str(path / zonefile)
@@ -159,7 +159,9 @@
     # catch syntax errors, etc.
     mocker.patch("tzlocal.utils.assert_tz_offset")
     winreg = MagicMock()
-    winreg.EnumValue.configure_mock(return_value=("TimeZoneKeyName", "Belarus 
Standard Time"))
+    winreg.EnumValue.configure_mock(
+        return_value=("TimeZoneKeyName", "Belarus Standard Time")
+    )
     sys.modules["winreg"] = winreg
 
     import tzlocal.win32
@@ -170,11 +172,15 @@
     tz = tzlocal.win32.reload_localzone()
     assert str(tz) == "Europe/Minsk"
 
-    winreg.EnumValue.configure_mock(return_value=("TimeZoneKeyName", "Not a 
real timezone"))
+    winreg.EnumValue.configure_mock(
+        return_value=("TimeZoneKeyName", "Not a real timezone")
+    )
     pytest.raises(ZoneInfoNotFoundError, tzlocal.win32._get_localzone_name)
 
     # Old XP style reginfo should fail
-    winreg.EnumValue.configure_mock(return_value=("TimeZoneKeyName", "Belarus 
Standard Time"))
+    winreg.EnumValue.configure_mock(
+        return_value=("TimeZoneKeyName", "Belarus Standard Time")
+    )
     tzlocal.win32.valuestodict = Mock(
         return_value={
             "StandardName": "Mocked Standard Time",
@@ -263,7 +269,7 @@
     assert "America/New_York" in message
     assert "Europe/Warsaw" in message
     assert "Africa/Johannesburg" in message
-    
+
 
 def test_zoneinfo_compatibility():
     os.environ["TZ"] = "Africa/Harare"
@@ -298,9 +304,31 @@
 
 def test_broken():
     # Various broken configs, that should be ignored, and we should fall back 
to UTC.
-    # The first warning is about not finding any timezone configuration, the 
second 
+    # The first warning is about not finding any timezone configuration, the 
second
     # is about a syntax error in the config file.
-    with pytest.warns(UserWarning, match="Can not find any timezone 
configuration"):
-        with pytest.warns(UserWarning, match="Syntax error in"):
-            tz = tzlocal.unix._get_localzone(_root=tz_path("broken"))
+    with (
+        pytest.warns(UserWarning, match="Can not find any timezone 
configuration"),
+        pytest.warns(UserWarning, match="Syntax error in"),
+    ):
+        tz = tzlocal.unix._get_localzone(_root=tz_path("broken"))
     assert "UTC" in tz.key
+
+
[email protected](
+    "zone",
+    [
+        "America/Argentina/Buenos_Aires",
+        "America/Indiana/Indianapolis",
+        "America/North_Dakota/Center",
+        "Africa/Harare",
+        "UTC",
+    ],
+)
[email protected]("prefix", ["", ":"])
+def test_timezone_name_from_nested_env_file(tmp_path, zone, prefix, 
monkeypatch):
+    path = tmp_path / "usr" / "share" / "zoneinfo" / zone
+    path.parent.mkdir(parents=True)
+    path.touch()
+    monkeypatch.setenv("TZ", prefix + str(path))
+    assert tzlocal.utils._tz_name_from_env() == zone
+    assert tzlocal.unix._get_localzone_name(_root=str(tmp_path)) == zone
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/tzlocal/__init__.py 
new/tzlocal-5.4.5/tzlocal/__init__.py
--- old/tzlocal-5.4.4/tzlocal/__init__.py       2026-06-29 10:03:29.000000000 
+0200
+++ new/tzlocal-5.4.5/tzlocal/__init__.py       2026-10-22 11:09:17.000000000 
+0200
@@ -8,8 +8,8 @@
 from tzlocal.utils import assert_tz_offset
 
 __all__ = [
+    "assert_tz_offset",
     "get_localzone",
     "get_localzone_name",
     "reload_localzone",
-    "assert_tz_offset",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/tzlocal/unix.py 
new/tzlocal-5.4.5/tzlocal/unix.py
--- old/tzlocal-5.4.4/tzlocal/unix.py   2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/tzlocal/unix.py   2026-10-22 11:09:17.000000000 +0200
@@ -34,12 +34,15 @@
         import subprocess
 
         try:
-            androidtz = subprocess.check_output(["getprop", 
"persist.sys.timezone"]).strip().decode()
+            androidtz = (
+                subprocess.check_output(["getprop", "persist.sys.timezone"])
+                .strip()
+                .decode()
+            )
             return androidtz
         except (OSError, subprocess.CalledProcessError):
             # proot environment or failed to getprop
             log.debug("It's not termux?")
-            pass
 
     # Now look for distribution specific configuration files
     # that contain the timezone name.
@@ -54,11 +57,11 @@
                 data = tzfile.read()
                 log.debug(f"{tzpath} found, contents:\n {data}")
 
-                etctz = data.strip("/ \t\r\n")
-                if not etctz:
+                tzlines = data.strip("/ \t\r\n")
+                if not tzlines:
                     # Empty file, skip
                     continue
-                for etctz in etctz.splitlines():
+                for etctz in tzlines.splitlines():
                     # Get rid of host definitions and comments:
                     if " " in etctz:
                         etctz, _ = etctz.split(" ", 1)
@@ -101,9 +104,11 @@
                     end_match = end_re.search(tzline)
                     if end_match is None:
                         # Syntax error. Ignore this line.
-                        warnings.warn(f"Syntax error in {tzpath}. Ignoring 
line: {line}")
+                        warnings.warn(
+                            f"Syntax error in {tzpath}. Ignoring line: {line}"
+                        )
                         continue
-                    etctz = tzline[:end_match.start()]
+                    etctz = tzline[: end_match.start()]
 
                     # We found a timezone
                     found_configs[tzpath] = etctz.replace(" ", "_")
@@ -148,7 +153,9 @@
                     "/etc/timezone is deprecated in some distros, and no 
longer reliable. "
                     "tzlocal is ignoring it, and you can likely delete it."
                 )
-                found_configs = {k: v for k, v in found_configs.items() if 
"etc/timezone" not in k}
+                found_configs = {
+                    k: v for k, v in found_configs.items() if "etc/timezone" 
not in k
+                }
                 unique_tzs = _get_unique_tzs(found_configs, _root)
 
             if len(unique_tzs) != 1:
@@ -159,7 +166,7 @@
                 raise zoneinfo.ZoneInfoNotFoundError(message)
 
         # We found exactly one config! Use it.
-        return list(found_configs.values())[0]
+        return next(iter(found_configs.values()))
 
 
 def _get_unique_tzs(found_configs, _root):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/tzlocal/utils.py 
new/tzlocal-5.4.5/tzlocal/utils.py
--- old/tzlocal-5.4.4/tzlocal/utils.py  2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/tzlocal/utils.py  2026-10-22 11:09:17.000000000 +0200
@@ -59,16 +59,11 @@
         # It's a file specification, expand it, if possible
         parts = os.path.realpath(tzenv).split(os.sep)
 
-        # Is it a zone info zone?
-        possible_tz = "/".join(parts[-2:])
-        if possible_tz in windows_tz.tz_win:
-            # Yup, it is
-            return possible_tz
-
-        # Maybe it's a short one, like UTC?
-        if parts[-1] in windows_tz.tz_win:
-            # Indeed
-            return parts[-1]
+        # Find the full zone name, including names with multiple slashes.
+        for start in range(len(parts)):
+            possible_tz = "/".join(parts[start:])
+            if possible_tz in windows_tz.tz_win:
+                return possible_tz
 
     log.debug("TZ does not contain a time zone name")
     return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/tzlocal/win32.py 
new/tzlocal-5.4.5/tzlocal/win32.py
--- old/tzlocal-5.4.4/tzlocal/win32.py  2026-06-29 10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/tzlocal/win32.py  2026-10-22 11:09:17.000000000 +0200
@@ -86,18 +86,22 @@
         # instead return Etc/GMT+offset
 
         tz = zoneinfo.ZoneInfo(timezone)
-        has_dst, std_offset, dst_offset = _get_dst_info(tz)
+        has_dst, std_offset, _dst_offset = _get_dst_info(tz)
         if not has_dst:
             # The DST is turned off in the windows configuration,
             # but this timezone doesn't have DST so it doesn't matter
             return timezone
 
         if std_offset is None:
-            raise zoneinfo.ZoneInfoNotFoundError(f"{tzkeyname} claims to not 
have a non-DST time!?")
+            raise zoneinfo.ZoneInfoNotFoundError(
+                f"{tzkeyname} claims to not have a non-DST time!?"
+            )
 
         if std_offset % 3600:
             # I can't convert this to an hourly offset
-            raise zoneinfo.ZoneInfoNotFoundError(f"tzlocal can't support 
disabling DST in the {timezone} zone.")
+            raise zoneinfo.ZoneInfoNotFoundError(
+                f"tzlocal can't support disabling DST in the {timezone} zone."
+            )
 
         # This has whole hours as offset, return it as Etc/GMT
         return f"Etc/GMT{-std_offset // 3600:+.0f}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/tzlocal/windows_tz.py 
new/tzlocal-5.4.5/tzlocal/windows_tz.py
--- old/tzlocal-5.4.4/tzlocal/windows_tz.py     2026-06-29 10:03:29.000000000 
+0200
+++ new/tzlocal-5.4.5/tzlocal/windows_tz.py     2026-10-22 11:09:17.000000000 
+0200
@@ -5,6 +5,7 @@
     "AUS Eastern Standard Time": "Australia/Sydney",
     "Afghanistan Standard Time": "Asia/Kabul",
     "Alaskan Standard Time": "America/Anchorage",
+    "Alberta Standard Time": "America/Edmonton",
     "Aleutian Standard Time": "America/Adak",
     "Altai Standard Time": "Asia/Barnaul",
     "Arab Standard Time": "Asia/Riyadh",
@@ -20,12 +21,13 @@
     "Bangladesh Standard Time": "Asia/Dhaka",
     "Belarus Standard Time": "Europe/Minsk",
     "Bougainville Standard Time": "Pacific/Bougainville",
+    "British Columbia Standard Time": "America/Vancouver",
     "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 Asia Standard Time": "Asia/Bishkek",
     "Central Brazilian Standard Time": "America/Cuiaba",
     "Central Europe Standard Time": "Europe/Budapest",
     "Central European Standard Time": "Europe/Warsaw",
@@ -65,6 +67,7 @@
     "Lord Howe Standard Time": "Australia/Lord_Howe",
     "Magadan Standard Time": "Asia/Magadan",
     "Magallanes Standard Time": "America/Punta_Arenas",
+    "Manitoba Standard Time": "America/Winnipeg",
     "Marquesas Standard Time": "Pacific/Marquesas",
     "Mauritius Standard Time": "Indian/Mauritius",
     "Middle East Standard Time": "Asia/Beirut",
@@ -246,6 +249,7 @@
     "America/Coral_Harbour": "SA Pacific Standard Time",
     "America/Cordoba": "Argentina Standard Time",
     "America/Costa_Rica": "Central America Standard Time",
+    "America/Coyhaique": "Magallanes Standard Time",
     "America/Creston": "US Mountain Standard Time",
     "America/Cuiaba": "Central Brazilian Standard Time",
     "America/Curacao": "SA Western Standard Time",
@@ -255,7 +259,7 @@
     "America/Denver": "Mountain Standard Time",
     "America/Detroit": "Eastern Standard Time",
     "America/Dominica": "SA Western Standard Time",
-    "America/Edmonton": "Mountain Standard Time",
+    "America/Edmonton": "Alberta Standard Time",
     "America/Eirunepe": "SA Pacific Standard Time",
     "America/El_Salvador": "Central America Standard Time",
     "America/Ensenada": "Pacific Standard Time (Mexico)",
@@ -283,7 +287,7 @@
     "America/Indiana/Vincennes": "Eastern Standard Time",
     "America/Indiana/Winamac": "Eastern Standard Time",
     "America/Indianapolis": "US Eastern Standard Time",
-    "America/Inuvik": "Mountain Standard Time",
+    "America/Inuvik": "Alberta Standard Time",
     "America/Iqaluit": "Eastern Standard Time",
     "America/Jamaica": "SA Pacific Standard Time",
     "America/Jujuy": "Argentina Standard Time",
@@ -335,7 +339,7 @@
     "America/Porto_Velho": "SA Western Standard Time",
     "America/Puerto_Rico": "SA Western Standard Time",
     "America/Punta_Arenas": "Magallanes Standard Time",
-    "America/Rainy_River": "Central Standard Time",
+    "America/Rainy_River": "Manitoba Standard Time",
     "America/Rankin_Inlet": "Central Standard Time",
     "America/Recife": "SA Eastern Standard Time",
     "America/Regina": "Canada Central Standard Time",
@@ -363,12 +367,12 @@
     "America/Tijuana": "Pacific Standard Time (Mexico)",
     "America/Toronto": "Eastern Standard Time",
     "America/Tortola": "SA Western Standard Time",
-    "America/Vancouver": "Pacific Standard Time",
+    "America/Vancouver": "British Columbia Standard Time",
     "America/Virgin": "SA Western Standard Time",
     "America/Whitehorse": "Yukon Standard Time",
-    "America/Winnipeg": "Central Standard Time",
+    "America/Winnipeg": "Manitoba Standard Time",
     "America/Yakutat": "Alaskan Standard Time",
-    "America/Yellowknife": "Mountain Standard Time",
+    "America/Yellowknife": "Alberta Standard Time",
     "Antarctica/Casey": "Central Pacific Standard Time",
     "Antarctica/Davis": "SE Asia Standard Time",
     "Antarctica/DumontDUrville": "West Pacific Standard Time",
@@ -382,7 +386,7 @@
     "Antarctica/Vostok": "Central Asia Standard Time",
     "Arctic/Longyearbyen": "W. Europe Standard Time",
     "Asia/Aden": "Arab Standard Time",
-    "Asia/Almaty": "Central Asia Standard Time",
+    "Asia/Almaty": "West Asia Standard Time",
     "Asia/Amman": "Jordan Standard Time",
     "Asia/Anadyr": "Russia Time Zone 11",
     "Asia/Aqtau": "West Asia Standard Time",
@@ -449,7 +453,7 @@
     "Asia/Pontianak": "SE Asia Standard Time",
     "Asia/Pyongyang": "North Korea Standard Time",
     "Asia/Qatar": "Arab Standard Time",
-    "Asia/Qostanay": "Central Asia Standard Time",
+    "Asia/Qostanay": "West Asia Standard Time",
     "Asia/Qyzylorda": "Qyzylorda Standard Time",
     "Asia/Rangoon": "Myanmar Standard Time",
     "Asia/Riyadh": "Arab Standard Time",
@@ -519,19 +523,20 @@
     "Brazil/DeNoronha": "UTC-02",
     "Brazil/East": "E. South America Standard Time",
     "Brazil/West": "SA Western Standard Time",
-    "CST6CDT": "Central Standard Time",
+    "CET": "Romance Standard Time",
     "Canada/Atlantic": "Atlantic Standard Time",
-    "Canada/Central": "Central Standard Time",
+    "Canada/Central": "Manitoba Standard Time",
     "Canada/Eastern": "Eastern Standard Time",
-    "Canada/Mountain": "Mountain Standard Time",
+    "Canada/Mountain": "Alberta Standard Time",
     "Canada/Newfoundland": "Newfoundland Standard Time",
-    "Canada/Pacific": "Pacific Standard Time",
+    "Canada/Pacific": "British Columbia Standard Time",
     "Canada/Saskatchewan": "Canada Central Standard Time",
     "Canada/Yukon": "Yukon Standard Time",
     "Chile/Continental": "Pacific SA Standard Time",
     "Chile/EasterIsland": "Easter Island Standard Time",
     "Cuba": "Cuba Standard Time",
-    "EST5EDT": "Eastern Standard Time",
+    "EET": "GTB Standard Time",
+    "EST": "SA Pacific Standard Time",
     "Egypt": "Egypt Standard Time",
     "Eire": "GMT Standard Time",
     "Etc/GMT": "UTC",
@@ -623,7 +628,6 @@
     "Europe/Tirane": "Central Europe Standard Time",
     "Europe/Tiraspol": "E. Europe Standard Time",
     "Europe/Ulyanovsk": "Astrakhan Standard Time",
-    "Europe/Uzhgorod": "FLE Standard Time",
     "Europe/Vaduz": "W. Europe Standard Time",
     "Europe/Vatican": "W. Europe Standard Time",
     "Europe/Vienna": "W. Europe Standard Time",
@@ -631,7 +635,6 @@
     "Europe/Volgograd": "Volgograd Standard Time",
     "Europe/Warsaw": "Central European Standard Time",
     "Europe/Zagreb": "Central European Standard Time",
-    "Europe/Zaporozhye": "FLE Standard Time",
     "Europe/Zurich": "W. Europe Standard Time",
     "GB": "GMT Standard Time",
     "GB-Eire": "GMT Standard Time",
@@ -639,6 +642,7 @@
     "GMT-0": "UTC",
     "GMT0": "UTC",
     "Greenwich": "UTC",
+    "HST": "Hawaiian Standard Time",
     "Hongkong": "China Standard Time",
     "Iceland": "Greenwich Standard Time",
     "Indian/Antananarivo": "E. Africa Standard Time",
@@ -658,7 +662,8 @@
     "Japan": "Tokyo Standard Time",
     "Kwajalein": "UTC+12",
     "Libya": "Libya Standard Time",
-    "MST7MDT": "Mountain Standard Time",
+    "MET": "Romance Standard Time",
+    "MST": "US Mountain Standard Time",
     "Mexico/BajaNorte": "Pacific Standard Time (Mexico)",
     "Mexico/BajaSur": "Mountain Standard Time (Mexico)",
     "Mexico/General": "Central Standard Time (Mexico)",
@@ -666,7 +671,6 @@
     "NZ-CHAT": "Chatham Islands Standard Time",
     "Navajo": "Mountain Standard Time",
     "PRC": "China Standard Time",
-    "PST8PDT": "Pacific Standard Time",
     "Pacific/Apia": "Samoa Standard Time",
     "Pacific/Auckland": "New Zealand Standard Time",
     "Pacific/Bougainville": "Bougainville Standard Time",
@@ -732,5 +736,6 @@
     "UTC": "UTC",
     "Universal": "UTC",
     "W-SU": "Russian Standard Time",
+    "WET": "GMT Standard Time",
     "Zulu": "UTC",
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/tzlocal-5.4.4/update_windows_mappings.py 
new/tzlocal-5.4.5/update_windows_mappings.py
--- old/tzlocal-5.4.4/update_windows_mappings.py        2026-06-29 
10:03:29.000000000 +0200
+++ new/tzlocal-5.4.5/update_windows_mappings.py        2026-10-22 
11:09:17.000000000 +0200
@@ -7,17 +7,15 @@
 #
 # It must be run with Python 3.
 
-import ftplib
 import logging
 import tarfile
 from io import BytesIO
 from pprint import pprint
-from urllib.parse import urlparse
 from urllib.request import urlopen
 from xml.dom import minidom
 
 WIN_ZONES_URL = 
"https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml";
-ZONEINFO_URL = "ftp://ftp.iana.org/tz/tzdata-latest.tar.gz";
+ZONEINFO_URL = 
"https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz";
 
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger("tzlocal")
@@ -26,15 +24,8 @@
 def update_old_names():
     """Fetches the list of old tz names and returns a mapping"""
 
-    url = urlparse(ZONEINFO_URL)
-    log.info(f"Connecting to {url.netloc}")
-    ftp = ftplib.FTP(url.netloc)
-    ftp.login()
-    gzfile = BytesIO()
-
     log.info("Fetching zoneinfo database")
-    ftp.retrbinary("RETR " + url.path, gzfile.write)
-    gzfile.seek(0)
+    gzfile = BytesIO(urlopen(ZONEINFO_URL).read())
 
     log.info("Extracting backwards data")
     archive = tarfile.open(mode="r:gz", fileobj=gzfile)

Reply via email to