On Mon, Jun 26, 2023 at 8:10 PM Miro Hrončok <mhroncok(a)redhat.com> wrote:
(snip)
> ---
> The current problem with Python without tzdata is:
>
=======================================================================
> >>> from zoneinfo import ZoneInfo
> >>> ZoneInfo("Europe/Prague")
> Traceback (most recent call last):
> File "/usr/lib64/python3.11/zoneinfo/_common.py", line 12, in
load_tzdata
> return
resources.files(package_name).joinpath(resource_name).open("rb")
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "/usr/lib64/python3.11/importlib/resources/_common.py", line 22, in
files
> return from_package(get_package(package))
> ^^^^^^^^^^^^^^^^^^^^
> File "/usr/lib64/python3.11/importlib/resources/_common.py", line 53,
in
> get_package
> resolved = resolve(package)
> ^^^^^^^^^^^^^^^^
> File "/usr/lib64/python3.11/importlib/resources/_common.py", line 44, in
resolve
> return cand if isinstance(cand, types.ModuleType) else
> importlib.import_module(cand)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "/usr/lib64/python3.11/importlib/__init__.py", line 126, in
import_module
> return _bootstrap._gcd_import(name[level:], package, level)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
> File "<frozen importlib._bootstrap>", line 1176, in
_find_and_load
> File "<frozen importlib._bootstrap>", line 1126, in
_find_and_load_unlocked
> File "<frozen importlib._bootstrap>", line 241, in
_call_with_frames_removed
> File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
> File "<frozen importlib._bootstrap>", line 1176, in
_find_and_load
> File "<frozen importlib._bootstrap>", line 1126, in
_find_and_load_unlocked
> File "<frozen importlib._bootstrap>", line 241, in
_call_with_frames_removed
> File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
> File "<frozen importlib._bootstrap>", line 1176, in
_find_and_load
> File "<frozen importlib._bootstrap>", line 1140, in
_find_and_load_unlocked
> ModuleNotFoundError: No module named 'tzdata'
> During handling of the above exception, another exception
occurred:
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module
>
File "/usr/lib64/python3.11/zoneinfo/_common.py", line 24, in load_tzdata
> raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
> zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key
Europe/Prague'
> =======================================================================
> Not that ZoneInfo("UTC") also fails:
>
=======================================================================
> >>> ZoneInfo("UTC")
> Traceback (most recent call last):
> ...
> zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key UTC'
> =======================================================================
> So we would need to patch Python to detect missing tzdata
and report something
> like:
> ZoneInfoNotInstalledError: 'No time zone information
installed on the system,
> you can only use UTC'
> We would also need to ensure UTC work even without tzdata
installed.
> I would be reluctant to carry this as a downstream-only
patch. And the upstream
> window for changes like this has already closed for Python 3.12.
Does this mean that tzdata needs to be present for doing datetime /
timezone calculations at runtime with the zoneinfo module?
Would this Change require that all Python programs that use this
module add "Requires: tzdata"? I don't think that would be a
reasonable change.
There's a similar issue with some Rust libraries (and probably other
language-specific timezone handling libraries), where they explicitly
assume that the timezone database is available, and will either fail
(bad case) or fall back to UTC (less bad case). Similar to the Python
case, I don't think adding "Requires: tzdata" to all packages like
these (either to the library in the case of dynamically linked /
scripting languages, or to all affected *applications* in the case of
statically linked languages) would be reasonable.
Fabio