summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHervé Beraud <hberaud@redhat.com>2023-02-07 10:32:36 +0100
committerHervé Beraud <hberaud@redhat.com>2023-03-23 17:13:44 +0100
commit7d9fda625fd5e16c91a9b95920c477f857193389 (patch)
tree06ef7932e7d420a89528f7176474c4aa1b9325b4
parent26a920efc6db18ce38990be65fe7cadba7277401 (diff)
downloadoslo-utils-7d9fda625fd5e16c91a9b95920c477f857193389.tar.gz
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
-rw-r--r--oslo_utils/timeutils.py6
-rw-r--r--releasenotes/notes/implement-zoneinfo-to-remove-pytz-fba6f70db09ecdb8.yaml6
-rw-r--r--requirements.txt2
3 files changed, 10 insertions, 4 deletions
diff --git a/oslo_utils/timeutils.py b/oslo_utils/timeutils.py
index 390be53..ba45fda 100644
--- a/oslo_utils/timeutils.py
+++ b/oslo_utils/timeutils.py
@@ -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
diff --git a/releasenotes/notes/implement-zoneinfo-to-remove-pytz-fba6f70db09ecdb8.yaml b/releasenotes/notes/implement-zoneinfo-to-remove-pytz-fba6f70db09ecdb8.yaml
new file mode 100644
index 0000000..24c7d7f
--- /dev/null
+++ b/releasenotes/notes/implement-zoneinfo-to-remove-pytz-fba6f70db09ecdb8.yaml
@@ -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.
diff --git a/requirements.txt b/requirements.txt
index 37374ac..9085e00 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -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