Implement zoneinfo support to drop dependency to pytz

Zoneinfo was introduced within python 3.9.

The support of pytz will be removed within RHEL 10 [1].

2023.2 (bobcat) will move our testing runtime to py3.9 and py3.10
so we want to see pytz removed within this series.

tzdata is required at runtime in our gates, because, by default,
zoneinfo uses the system’s time zone data if available; if no system
time zone data is available, the library will fall back to using the
first-party tzdata package available on PyPI. Apparently our gates have no
time zone data available nor tzdata installed by default because we get the
following error without tzdata installed [3]:
`ModuleNotFoundError: No module named 'tzdata'

So I prefer to add tzdata in our requirements to avoid runtime failure
related to time zone and ensure that time zone are always available.

[1] https://issues.redhat.com/browse/RHEL-219
[2] https://review.opendev.org/c/openstack/governance/+/872232
[3] https://zuul.opendev.org/t/openstack/build/0a1576775e894b09bc31269fea00ba03/log/job-output.txt#1445`

Depends-on: https://review.opendev.org/c/openstack/requirements/+/875854
Change-Id: I1f88bdadc68bfa726eac1da1c5824c1ed352ad98
This commit is contained in:
Hervé Beraud 2023-02-07 10:32:36 +01:00
parent 26a920efc6
commit 7d9fda625f
3 changed files with 10 additions and 4 deletions

View File

@ -22,9 +22,9 @@ import datetime
import functools
import logging
import time
import zoneinfo
import iso8601
import pytz
from oslo_utils import reflection
@ -225,8 +225,8 @@ def unmarshall_time(tyme):
if tzname:
# Need to handle either iso8601 or python UTC format
tzname = 'UTC' if tzname == 'UTC+00:00' else tzname
tzinfo = pytz.timezone(tzname)
dt = tzinfo.localize(dt)
tzinfo = zoneinfo.ZoneInfo(tzname)
dt = dt.replace(tzinfo=tzinfo)
return dt

View File

@ -0,0 +1,6 @@
---
other:
- |
Implement zoneinfo to allow us to remove pytz's dependency. zoneinfo
was introduced by python 3.9, and the series 2023.2 (bobcat) set py39
as the minimal supported runtime, so we are able to remove pytz.

View File

@ -5,9 +5,9 @@
iso8601>=0.1.11 # MIT
oslo.i18n>=3.15.3 # Apache-2.0
pytz>=2013.6 # MIT
netaddr>=0.7.18 # BSD
netifaces>=0.10.4 # MIT
debtcollector>=1.2.0 # Apache-2.0
pyparsing>=2.1.0 # MIT
packaging>=20.4 # BSD
tzdata>=2022.4 # MIT