Hi Miro,
Very much appreciate the feedback. Please see my responses below.
Thank you,
Patsy
On Mon, Jun 26, 2023 at 2:09 PM Miro Hrončok <mhroncok(a)redhat.com> wrote:
Hello Patsy,
On 26. 06. 23 17:54, Aoife Moloney wrote:
>
https://fedoraproject.org/wiki/Changes/AllowRemovalOfTzdata
>
> == Summary ==
> Allow the removal of tzdata especially on containers in order to
minimize size.
> ...
>
> In order for this to work, we need packages that use tzdata at run
> time to switch from Require'ing tzdata to Recommend'ing tzdata. These
> packages should also gracefully handle instances where tzdata has been
> removed. For example, this would require recognizing that tzdata is
> not present and providing an appropriate error, such as recommending
> that the user install tzdata.
> ...
> * python3.XX (3.9, 3.10, 3.11, 3.12)
Who is expected to work on this? Python maintainers or this Change
proposal owners?
This does not change the default. It allows users to remove tzdata if they
want to minimize their container. (Note: currently we are seeing cases
where just the data is removed leaving tzdata in an inconsistent state.)
We will work with maintainers as needed. The respective package owners are
more knowledgeable in the changes needed to check for the availability of
tzdata and respond appropriately, such as informing the user that tzdata
needs to be installed.
*PEP 615 – Support for the IANA Time Zone Database in the Standard
Library* says:
"""
Python distributors are encouraged to ensure that time zone data is
installed
alongside Python whenever possible (e.g. by declaring tzdata as a
dependency
for the python package).
"""
from
https://peps.python.org/pep-0615/#system-time-zone-information
By changing the Requires to Recommends, we would diverge from upstream
recommendation.
---
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'
Yes, or possibly recommend installing tzdata if additional timezone info
is needed.
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.
Understood.
--
Miro Hrončok
--
Phone: +420777974800
IRC: mhroncok