Use zoneinfo instead of pytz if available
The zoneinfo module was introduced in Python 3.9. We can use that built-in module instead of the 3rd party library (pytz). This is based on change I1f88bdadc68bfa726eac1da1c5824c1ed352ad98 in oslo.utils. Change-Id: I539120a6bfb850b0c4e384e51caa021761a4f6b8
This commit is contained in:
parent
313a5afa6a
commit
84ca8a18e0
@ -14,7 +14,13 @@
|
|||||||
import croniter
|
import croniter
|
||||||
import eventlet
|
import eventlet
|
||||||
import netaddr
|
import netaddr
|
||||||
import pytz
|
|
||||||
|
try:
|
||||||
|
import zoneinfo
|
||||||
|
except ImportError:
|
||||||
|
# zoneinfo is available in Python >= 3.9
|
||||||
|
import pytz
|
||||||
|
zoneinfo = None
|
||||||
|
|
||||||
from neutron_lib.api import validators
|
from neutron_lib.api import validators
|
||||||
from oslo_utils import timeutils
|
from oslo_utils import timeutils
|
||||||
@ -167,7 +173,10 @@ class TimezoneConstraint(constraints.BaseCustomConstraint):
|
|||||||
if not value:
|
if not value:
|
||||||
return True
|
return True
|
||||||
try:
|
try:
|
||||||
pytz.timezone(value)
|
if zoneinfo:
|
||||||
|
zoneinfo.ZoneInfo(value)
|
||||||
|
else:
|
||||||
|
pytz.timezone(value)
|
||||||
return True
|
return True
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
self._error_message = _(
|
self._error_message = _(
|
||||||
|
@ -14,7 +14,13 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import pytz
|
try:
|
||||||
|
import zoneinfo
|
||||||
|
except ImportError:
|
||||||
|
# zoneinfo is available in Python >= 3.9
|
||||||
|
import pytz
|
||||||
|
zoneinfo = None
|
||||||
|
|
||||||
from testtools import matchers
|
from testtools import matchers
|
||||||
|
|
||||||
from heat.engine.clients.os import swift
|
from heat.engine.clients.os import swift
|
||||||
@ -126,8 +132,12 @@ class SwiftUtilsTest(SwiftClientPluginTestCase):
|
|||||||
|
|
||||||
def test_parse_last_modified(self):
|
def test_parse_last_modified(self):
|
||||||
self.assertIsNone(self.swift_plugin.parse_last_modified(None))
|
self.assertIsNone(self.swift_plugin.parse_last_modified(None))
|
||||||
|
if zoneinfo:
|
||||||
|
tz = zoneinfo.ZoneInfo('GMT')
|
||||||
|
else:
|
||||||
|
tz = pytz.timezone('GMT')
|
||||||
now = datetime.datetime(
|
now = datetime.datetime(
|
||||||
2015, 2, 5, 1, 4, 40, 0, pytz.timezone('GMT'))
|
2015, 2, 5, 1, 4, 40, 0, tz)
|
||||||
now_naive = datetime.datetime(
|
now_naive = datetime.datetime(
|
||||||
2015, 2, 5, 1, 4, 40, 0)
|
2015, 2, 5, 1, 4, 40, 0)
|
||||||
last_modified = now.strftime('%a, %d %b %Y %H:%M:%S %Z')
|
last_modified = now.strftime('%a, %d %b %Y %H:%M:%S %Z')
|
||||||
|
@ -13,6 +13,12 @@
|
|||||||
|
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
|
try:
|
||||||
|
import zoneinfo
|
||||||
|
except ImportError:
|
||||||
|
# zoneinfo is available in Python >= 3.9
|
||||||
|
zoneinfo = None
|
||||||
|
|
||||||
from heat.engine.constraint import common_constraints as cc
|
from heat.engine.constraint import common_constraints as cc
|
||||||
from heat.tests import common
|
from heat.tests import common
|
||||||
from heat.tests import utils
|
from heat.tests import utils
|
||||||
@ -279,7 +285,10 @@ class TimezoneConstraintTest(common.HeatTestCase):
|
|||||||
|
|
||||||
def test_validation_error(self):
|
def test_validation_error(self):
|
||||||
timezone = "wrong_timezone"
|
timezone = "wrong_timezone"
|
||||||
expected = "Invalid timezone: '%s'" % timezone
|
err = timezone
|
||||||
|
if zoneinfo:
|
||||||
|
err = "No time zone found with key %s" % timezone
|
||||||
|
expected = "Invalid timezone: '%s'" % err
|
||||||
|
|
||||||
self.assertFalse(self.constraint.validate(timezone, self.ctx))
|
self.assertFalse(self.constraint.validate(timezone, self.ctx))
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
|
@ -16,6 +16,12 @@ import copy
|
|||||||
import json
|
import json
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
|
try:
|
||||||
|
import zoneinfo
|
||||||
|
except ImportError:
|
||||||
|
# zoneinfo is available in Python >= 3.9
|
||||||
|
zoneinfo = None
|
||||||
|
|
||||||
from heat.common import exception
|
from heat.common import exception
|
||||||
from heat.common import template_format
|
from heat.common import template_format
|
||||||
from heat.engine.clients.os import aodh
|
from heat.engine.clients.os import aodh
|
||||||
@ -579,11 +585,14 @@ class AodhAlarmTest(common.HeatTestCase):
|
|||||||
exception.ResourceFailure,
|
exception.ResourceFailure,
|
||||||
scheduler.TaskRunner(rsrc.update, snippet)
|
scheduler.TaskRunner(rsrc.update, snippet)
|
||||||
)
|
)
|
||||||
|
err = timezone
|
||||||
|
if zoneinfo:
|
||||||
|
err = "No time zone found with key %s" % timezone
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
"StackValidationFailed: resources.MEMAlarmHigh: Property error: "
|
"StackValidationFailed: resources.MEMAlarmHigh: Property error: "
|
||||||
"Properties.time_constraints[0].timezone: Error "
|
"Properties.time_constraints[0].timezone: Error "
|
||||||
"validating value '%s': Invalid timezone: '%s'"
|
"validating value '%s': Invalid timezone: '%s'"
|
||||||
% (timezone, timezone),
|
% (timezone, err),
|
||||||
error.message)
|
error.message)
|
||||||
|
|
||||||
def test_alarm_live_state(self):
|
def test_alarm_live_state(self):
|
||||||
|
@ -51,10 +51,11 @@ python-troveclient>=2.2.0 # Apache-2.0
|
|||||||
python-vitrageclient>=2.7.0 # Apache-2.0
|
python-vitrageclient>=2.7.0 # Apache-2.0
|
||||||
python-zaqarclient>=1.3.0 # Apache-2.0
|
python-zaqarclient>=1.3.0 # Apache-2.0
|
||||||
python-zunclient>=3.4.0 # Apache-2.0
|
python-zunclient>=3.4.0 # Apache-2.0
|
||||||
pytz>=2013.6 # MIT
|
pytz>=2013.6;python_version<"3.9" # MIT
|
||||||
PyYAML>=5.1 # MIT
|
PyYAML>=5.1 # MIT
|
||||||
requests>=2.23.0 # Apache-2.0
|
requests>=2.23.0 # Apache-2.0
|
||||||
tenacity>=6.1.0 # Apache-2.0
|
tenacity>=6.1.0 # Apache-2.0
|
||||||
|
tzdata>=2022.4;python_version>="3.9" # MIT
|
||||||
Routes>=2.3.1 # MIT
|
Routes>=2.3.1 # MIT
|
||||||
SQLAlchemy>=1.4.0 # MIT
|
SQLAlchemy>=1.4.0 # MIT
|
||||||
stevedore>=3.1.0 # Apache-2.0
|
stevedore>=3.1.0 # Apache-2.0
|
||||||
|
Loading…
Reference in New Issue
Block a user