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)