Merge "Implement zoneinfo support to drop dependency to pytz"
This commit is contained in:
commit
adfd830d44
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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.
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue