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@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