Merge "Implement zoneinfo support to drop dependency to pytz"

This commit is contained in:
Zuul 2023-04-17 11:26:01 +00:00 committed by Gerrit Code Review
commit adfd830d44
4 changed files with 21 additions and 13 deletions

View File

@ -33,10 +33,10 @@ import functools
import itertools
import uuid
from xmlrpc import client as xmlrpclib
import zoneinfo
import msgpack
from oslo_utils import importutils
from pytz import timezone
netaddr = importutils.try_import("netaddr")
@ -236,7 +236,7 @@ class DateTimeHandler(object):
'microsecond': dt.microsecond,
}
if dt.tzinfo:
tz = dt.tzinfo.tzname(None)
tz = str(dt.tzinfo)
dct['tz'] = tz
return dumps(dct, registry=self._registry)
@ -263,9 +263,9 @@ class DateTimeHandler(object):
minute=dct['minute'],
second=dct['second'],
microsecond=dct['microsecond'])
if 'tz' in dct:
tzinfo = timezone(dct['tz'])
dt = tzinfo.localize(dt)
if 'tz' in dct and dct['tz']:
tzinfo = zoneinfo.ZoneInfo(dct['tz'])
dt = dt.replace(tzinfo=tzinfo)
return dt

View File

@ -15,10 +15,10 @@
import datetime
import itertools
from xmlrpc import client as xmlrpclib
import zoneinfo
import netaddr
from oslotest import base as test_base
from pytz import timezone
from oslo_serialization import msgpackutils
from oslo_utils import uuidutils
@ -145,20 +145,22 @@ class MsgPackUtilsTest(test_base.BaseTestCase):
self.assertEqual(today, _dumps_loads(today))
def test_datetime_tz_clone(self):
eastern = timezone('US/Eastern')
eastern = zoneinfo.ZoneInfo('US/Eastern')
now = datetime.datetime.now()
e_dt = eastern.localize(now)
e_dt = now.replace(tzinfo=eastern)
e_dt2 = _dumps_loads(e_dt)
self.assertEqual(e_dt, e_dt2)
self.assertEqual(e_dt.strftime(_TZ_FMT), e_dt2.strftime(_TZ_FMT))
def test_datetime_tz_different(self):
eastern = timezone('US/Eastern')
pacific = timezone('US/Pacific')
eastern = zoneinfo.ZoneInfo('US/Eastern')
pacific = zoneinfo.ZoneInfo('US/Pacific')
now = datetime.datetime.now()
e_dt = eastern.localize(now)
p_dt = pacific.localize(now)
now = now.replace(tzinfo=eastern)
e_dt = now
now = now.replace(tzinfo=pacific)
p_dt = now
self.assertNotEqual(e_dt, p_dt)
self.assertNotEqual(e_dt.strftime(_TZ_FMT), p_dt.strftime(_TZ_FMT))

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

@ -10,4 +10,4 @@
pbr!=2.1.0,>=2.0.0 # Apache-2.0
msgpack>=0.5.2 # Apache-2.0
oslo.utils>=3.33.0 # Apache-2.0
pytz>=2013.6 # MIT
tzdata>=2022.4 # MIT