Message408851
zoneinfo module currently emits deprecation warnings due to API changes in importlib.resources
./python -Wonce -m test test_zoneinfo
0:00:00 load avg: 0.73 Run tests sequentially
0:00:00 load avg: 0.73 [1/1] test_zoneinfo
/home/karthikeyan/stuff/python/cpython/Lib/zoneinfo/_tzpath.py:121: DeprecationWarning: open_text is deprecated. Use files() instead. Refer to https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy for migration advice.
with resources.open_text("tzdata", "zones") as f:
/home/karthikeyan/stuff/python/cpython/Lib/zoneinfo/_common.py:12: DeprecationWarning: open_binary is deprecated. Use files() instead. Refer to https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy for migration advice.
return importlib.resources.open_binary(package_name, resource_name)
/home/karthikeyan/stuff/python/cpython/Lib/zoneinfo/_tzpath.py:121: DeprecationWarning: open_text is deprecated. Use files() instead. Refer to https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy for migration advice.
with resources.open_text("tzdata", "zones") as f:
/home/karthikeyan/stuff/python/cpython/Lib/zoneinfo/_common.py:12: DeprecationWarning: open_binary is deprecated. Use files() instead. Refer to https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy for migration advice.
return importlib.resources.open_binary(package_name, resource_name)
== Tests result: SUCCESS ==
1 test OK.
Total duration: 376 ms
Tests result: SUCCESS
A fix would be to adapt the _legacy module changes inline like below patch though normalize_path is not public API and need to be inlined too.
diff --git a/Lib/zoneinfo/_common.py b/Lib/zoneinfo/_common.py
index 4c24f01bd7..bfe3fe4c3c 100644
--- a/Lib/zoneinfo/_common.py
+++ b/Lib/zoneinfo/_common.py
@@ -2,14 +2,15 @@
def load_tzdata(key):
- import importlib.resources
+ from importlib.resources import files
+ from importlib._common import normalize_path
components = key.split("/")
package_name = ".".join(["tzdata.zoneinfo"] + components[:-1])
resource_name = components[-1]
try:
- return importlib.resources.open_binary(package_name, resource_name)
+ return (files(package_name) / normalize_path(resource_name)).open('rb')
except (ImportError, FileNotFoundError, UnicodeEncodeError):
# There are three types of exception that can be raised that all amount
# to "we cannot find this key":
diff --git a/Lib/zoneinfo/_tzpath.py b/Lib/zoneinfo/_tzpath.py
index 672560b951..b1efe5d99e 100644
--- a/Lib/zoneinfo/_tzpath.py
+++ b/Lib/zoneinfo/_tzpath.py
@@ -111,14 +111,15 @@ def available_timezones():
determine if a given file on the time zone search path is to open it
and check for the "magic string" at the beginning.
"""
- from importlib import resources
+ from importlib.resources import files
+ from importlib._common import normalize_path
valid_zones = set()
# Start with loading from the tzdata package if it exists: this has a
# pre-assembled list of zones that only requires opening one file.
try:
- with resources.open_text("tzdata", "zones") as f:
+ with (files("tzdata") / normalize_path("zones")).open('r') as f:
for zone in f:
zone = zone.strip()
if zone: |
|
Date |
User |
Action |
Args |
2021-12-18 14:04:22 | xtreak | set | recipients:
+ xtreak, jaraco, p-ganssle |
2021-12-18 14:04:21 | xtreak | set | messageid: <1639836261.99.0.934737788895.issue46124@roundup.psfhosted.org> |
2021-12-18 14:04:21 | xtreak | link | issue46124 messages |
2021-12-18 14:04:21 | xtreak | create | |
|