diff --git a/docs/conf.py b/docs/conf.py index 805e1fb..d0f2850 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -17,7 +17,6 @@ autodoc_mock_imports = [ 'cairocffi', 'flask', - 'pytz', 'pyparsing', 'structlog', 'tzlocal', diff --git a/graphite_render/app.py b/graphite_render/app.py index c31d51d..9e6f8f8 100644 --- a/graphite_render/app.py +++ b/graphite_render/app.py @@ -5,8 +5,8 @@ from collections import defaultdict from datetime import datetime from io import BytesIO, StringIO +from zoneinfo import ZoneInfo, ZoneInfoNotFoundError -import pytz from flask import Flask from structlog import get_logger from werkzeug.http import http_date @@ -309,12 +309,12 @@ def render(): continue graph_options[opt] = value - tzinfo = pytz.timezone(app.config['TIME_ZONE']) + tzinfo = ZoneInfo(app.config['TIME_ZONE']) tz = RequestParams.get('tz') if tz: try: - tzinfo = pytz.timezone(tz) - except pytz.UnknownTimeZoneError: + tzinfo = ZoneInfo(tz) + except ZoneInfoNotFoundError: errors['tz'] = "Unknown timezone: '{0}'.".format(tz) request_options['tzinfo'] = tzinfo diff --git a/graphite_render/render/attime.py b/graphite_render/render/attime.py index 3e6d4b2..4d189a3 100644 --- a/graphite_render/render/attime.py +++ b/graphite_render/render/attime.py @@ -11,10 +11,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.""" -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from time import daylight - -import pytz +from zoneinfo import ZoneInfo months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'] @@ -24,7 +23,7 @@ def parseATTime(s, tzinfo=None, now=None): if tzinfo is None: from ..app import app - tzinfo = pytz.timezone(app.config['TIME_ZONE']) + tzinfo = ZoneInfo(app.config['TIME_ZONE']) s = s.strip().lower().replace('_', '').replace(',', '').replace(' ', '') if s.isdigit(): if ( @@ -37,7 +36,7 @@ def parseATTime(s, tzinfo=None, now=None): else: return datetime.fromtimestamp(int(s), tzinfo) elif ':' in s and len(s) == 13: - return tzinfo.localize(datetime.strptime(s, '%H:%M%Y%m%d'), daylight) + return datetime.strptime(s, '%H:%M%Y%m%d').replace(tzinfo=tzinfo) if '+' in s: ref, offset = s.split('+', 1) offset = '+' + offset @@ -54,7 +53,7 @@ def parseTimeReference(ref): if isinstance(ref, datetime): return ref if not ref or ref == 'now': - return datetime.now(pytz.utc) + return datetime.now(timezone.utc) # Time-of-day reference i = ref.find(':') @@ -78,7 +77,7 @@ def parseTimeReference(ref): hour, min = 16, 0 ref = ref[7:] - refDate = datetime.now(pytz.utc).replace(hour=hour, minute=min, second=0) + refDate = datetime.now(timezone.utc).replace(hour=hour, minute=min, second=0) # Day reference if ref in ('yesterday', 'today', 'tomorrow'): # yesterday, today, tomorrow diff --git a/graphite_render/render/glyph.py b/graphite_render/render/glyph.py index 9b9622b..aa9a6e3 100644 --- a/graphite_render/render/glyph.py +++ b/graphite_render/render/glyph.py @@ -19,9 +19,9 @@ from datetime import datetime, timedelta from io import BytesIO from urllib.parse import unquote_plus +from zoneinfo import ZoneInfo import cairocffi as cairo -import pytz from .datalib import TimeSeries from ..utils import to_seconds @@ -1815,9 +1815,9 @@ def setupTwoYAxes(self): def setupXAxis(self): from ..app import app if self.userTimeZone: - tzinfo = pytz.timezone(self.userTimeZone) + tzinfo = ZoneInfo(self.userTimeZone) else: - tzinfo = pytz.timezone(app.config['TIME_ZONE']) + tzinfo = ZoneInfo(app.config['TIME_ZONE']) self.start_dt = datetime.fromtimestamp(self.startTime, tzinfo) self.end_dt = datetime.fromtimestamp(self.endTime, tzinfo) diff --git a/graphite_render/utils.py b/graphite_render/utils.py index 69d771f..8f8a7fc 100644 --- a/graphite_render/utils.py +++ b/graphite_render/utils.py @@ -13,8 +13,7 @@ limitations under the License.""" import calendar import hashlib - -import pytz +from datetime import timezone from flask import request @@ -111,4 +110,4 @@ def epoch(dt): """ Returns the epoch timestamp of a timezone-aware datetime object. """ - return calendar.timegm(dt.astimezone(pytz.utc).timetuple()) + return calendar.timegm(dt.astimezone(timezone.utc).timetuple()) diff --git a/pyproject.toml b/pyproject.toml index c62275f..e35961a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,6 @@ dependencies = [ "PyYAML", "cairocffi", "pyparsing>2.0.0", - "pytz", "structlog", "tzlocal", ] diff --git a/tests/test_attime.py b/tests/test_attime.py index 7063d9e..90da159 100644 --- a/tests/test_attime.py +++ b/tests/test_attime.py @@ -1,6 +1,7 @@ import datetime import time -import pytz +from datetime import timezone +from zoneinfo import ZoneInfo from graphite_render.render.attime import parseATTime @@ -8,18 +9,18 @@ class AtTestCase(TestCase): - default_tz = pytz.utc - specified_tz = pytz.timezone('America/Los_Angeles') + default_tz = timezone.utc + specified_tz = ZoneInfo('America/Los_Angeles') def test_absolute_time(self): time_string = '12:0020150308' - expected_time = self.default_tz.localize( - datetime.datetime.strptime(time_string, '%H:%M%Y%m%d')) + expected_time = datetime.datetime.strptime( + time_string, '%H:%M%Y%m%d').replace(tzinfo=self.default_tz) actual_time = parseATTime(time_string) self.assertEqual(actual_time, expected_time) - expected_time = self.specified_tz.localize( - datetime.datetime.strptime(time_string, '%H:%M%Y%m%d')) + expected_time = datetime.datetime.strptime( + time_string, '%H:%M%Y%m%d').replace(tzinfo=self.specified_tz) actual_time = parseATTime(time_string, self.specified_tz) self.assertEqual(actual_time, expected_time) diff --git a/tests/test_functions.py b/tests/test_functions.py index 494c114..e4e6ae1 100644 --- a/tests/test_functions.py +++ b/tests/test_functions.py @@ -2,9 +2,8 @@ import math import time -from datetime import datetime - -import pytz +from datetime import datetime, timezone +from zoneinfo import ZoneInfo try: from unittest.mock import patch, call, MagicMock @@ -526,9 +525,9 @@ def test_draw_as_infinite(self): def test_vertical_line(self): result = functions.verticalLine({ - 'startTime': datetime(1970, 1, 1, 1, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 1, 2, 0, 0, pytz.utc), - 'tzinfo': pytz.timezone('UTC'), + 'startTime': datetime(1970, 1, 1, 1, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 1, 2, 0, 0, timezone.utc), + 'tzinfo': ZoneInfo('UTC'), }, "01:0019700101", "foo") expectedResult = [TimeSeries('foo', 3600, 3600, 1.0, [1.0, 1.0])] expectedResult[0].options = {'drawAsInfinite': True} @@ -536,9 +535,9 @@ def test_vertical_line(self): def test_vertical_line_color(self): result = functions.verticalLine({ - 'startTime': datetime(1970, 1, 1, 1, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 1, 2, 0, 0, pytz.utc), - 'tzinfo': pytz.timezone('UTC'), + 'startTime': datetime(1970, 1, 1, 1, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 1, 2, 0, 0, timezone.utc), + 'tzinfo': ZoneInfo('UTC'), }, "01:0019700101", "foo", "white") expectedResult = [TimeSeries('foo', 3600, 3600, 1.0, [1.0, 1.0])] expectedResult[0].options = {'drawAsInfinite': True} @@ -548,17 +547,17 @@ def test_vertical_line_color(self): def test_vertical_line_before_start(self): with self.assertRaises(ValueError): functions.verticalLine({ - 'startTime': datetime(1971, 1, 1, 1, 0, 0, 0, pytz.utc), - 'endTime': datetime(1971, 1, 1, 1, 2, 0, 0, pytz.utc), - 'tzinfo': pytz.timezone('UTC'), + 'startTime': datetime(1971, 1, 1, 1, 0, 0, 0, timezone.utc), + 'endTime': datetime(1971, 1, 1, 1, 2, 0, 0, timezone.utc), + 'tzinfo': ZoneInfo('UTC'), }, "01:0019700101", "foo") def test_vertical_line_after_end(self): with self.assertRaises(ValueError): functions.verticalLine({ - 'startTime': datetime(1970, 1, 1, 1, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 1, 2, 0, 0, pytz.utc), - 'tzinfo': pytz.timezone('UTC'), + 'startTime': datetime(1970, 1, 1, 1, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 1, 2, 0, 0, timezone.utc), + 'tzinfo': ZoneInfo('UTC'), }, "01:0019710101", "foo") def test_line_width(self): @@ -1072,8 +1071,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.exponentialMovingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1110,8 +1109,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.exponentialMovingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1137,8 +1136,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.exponentialMovingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) @@ -1177,16 +1176,16 @@ def frange(x, y, jump): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.exponentialMovingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) self.assertEqual(result, expectedResults[0]) result = functions.exponentialMovingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, "-1min") self.assertEqual(result, expectedResults[1]) @@ -1223,8 +1222,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMedian({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1259,8 +1258,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMedian({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1286,8 +1285,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMedian({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) @@ -1319,16 +1318,16 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMedian({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) self.assertEqual(result, expectedResults[0]) result = functions.movingMedian({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, "-1min") self.assertEqual(result, expectedResults[1]) @@ -1418,8 +1417,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1455,8 +1454,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1482,8 +1481,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) @@ -1520,16 +1519,16 @@ def frange(x, y, jump): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) self.assertEqual(result, expectedResults[0]) result = functions.movingAverage({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, "-1min") self.assertEqual(result, expectedResults[1]) @@ -1566,8 +1565,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMin({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1602,8 +1601,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMin({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1629,8 +1628,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMin({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) @@ -1662,16 +1661,16 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMin({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) self.assertEqual(result, expectedResults[0]) result = functions.movingMin({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, "-1min") self.assertEqual(result, expectedResults[1]) @@ -1708,8 +1707,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMax({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1744,8 +1743,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMax({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1771,8 +1770,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMax({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) @@ -1804,16 +1803,16 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingMax({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) self.assertEqual(result, expectedResults[0]) result = functions.movingMax({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, "-1min") self.assertEqual(result, expectedResults[1]) @@ -1850,8 +1849,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingSum({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1886,8 +1885,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingSum({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 10) @@ -1913,8 +1912,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingSum({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) @@ -1946,16 +1945,16 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.movingSum({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, 60) self.assertEqual(result, expectedResults[0]) result = functions.movingSum({ 'args': ({}, {}), - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, "-1min") self.assertEqual(result, expectedResults[1]) @@ -2430,8 +2429,8 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.holtWintersForecast({ 'args': ({}, {}), - 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series) self.assertEqual(result, expectedResults) @@ -2511,24 +2510,24 @@ def mock_evaluate(reqCtx, tokens, store=None): with patch('graphite_render.functions.evaluateTokens', mock_evaluate): result = functions.holtWintersConfidenceBands({ 'args': ({}, {}), - 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, timezone.utc), 'data': [] }, series) self.assertEqual(result, expectedResults[0]) result = functions.holtWintersConfidenceArea({ 'args': ({}, {}), - 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, timezone.utc), 'data': [] }, series) self.assertEqual(result, expectedResults[1]) result = functions.holtWintersAberration({ 'args': ({}, {}), - 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 2, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 2, 1, 0, 9, 0, 0, timezone.utc), 'data': [] }, series) self.assertEqual(result, expectedResults[2]) @@ -2658,8 +2657,8 @@ def test_empty_count(self): TimeSeries('0', 0, 600, 300, [0, 0, 0]), ] ctx = { - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 10, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 10, 0, 0, timezone.utc), } result = functions.countSeries(ctx) self.assertEqual(result, expectedResult) @@ -2717,7 +2716,7 @@ def test_smart_summarize(self): ctx = { 'startTime': parseATTime('-1min'), 'endTime': parseATTime('now'), - 'tzinfo': pytz.timezone('UTC'), + 'tzinfo': ZoneInfo('UTC'), } series = self._generate_series_list(config=[range(100)]) for s in series: @@ -2754,7 +2753,7 @@ def test_hitcount(self): ctx = { 'startTime': parseATTime('-1min'), 'endTime': parseATTime('now'), - 'tzinfo': pytz.timezone('UTC'), + 'tzinfo': ZoneInfo('UTC'), } series = self._generate_series_list(config=[list(range(99)) + [None]]) for s in series: @@ -2828,8 +2827,8 @@ def test_timeslice(self): ] results = functions.timeSlice({ - 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, pytz.utc), - 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, pytz.utc), + 'startTime': datetime(1970, 1, 1, 0, 0, 0, 0, timezone.utc), + 'endTime': datetime(1970, 1, 1, 0, 9, 0, 0, timezone.utc), 'data': [], }, series, '00:03 19700101', '00:08 19700101') self.assertEqual(results, expected)