summaryrefslogtreecommitdiff
path: root/tests/timezones
diff options
context:
space:
mode:
authorCarlton Gibson <carlton.gibson@noumenal.es>2021-09-09 15:15:44 +0200
committerCarlton Gibson <carlton.gibson@noumenal.es>2021-09-16 12:11:05 +0200
commit306607d5b99b6eca6ae2c1e726d8eb32b9b2ca1b (patch)
tree607d1b06feafaf28fc2e09c70652d30659707537 /tests/timezones
parent7132d17de1399345a38858c20221850bdef43d0e (diff)
downloaddjango-306607d5b99b6eca6ae2c1e726d8eb32b9b2ca1b.tar.gz
Fixed #32365 -- Made zoneinfo the default timezone implementation.
Thanks to Adam Johnson, Aymeric Augustin, David Smith, Mariusz Felisiak, Nick Pope, and Paul Ganssle for reviews.
Diffstat (limited to 'tests/timezones')
-rw-r--r--tests/timezones/tests.py43
1 files changed, 32 insertions, 11 deletions
diff --git a/tests/timezones/tests.py b/tests/timezones/tests.py
index 98c5cdac33..71bc94f490 100644
--- a/tests/timezones/tests.py
+++ b/tests/timezones/tests.py
@@ -5,15 +5,15 @@ from contextlib import contextmanager
from unittest import SkipTest, skipIf
from xml.dom.minidom import parseString
-import pytz
-
try:
import zoneinfo
except ImportError:
- try:
- from backports import zoneinfo
- except ImportError:
- zoneinfo = None
+ from backports import zoneinfo
+
+try:
+ import pytz
+except ImportError:
+ pytz = None
from django.contrib.auth.models import User
from django.core import serializers
@@ -61,9 +61,9 @@ UTC = timezone.utc
EAT = timezone.get_fixed_timezone(180) # Africa/Nairobi
ICT = timezone.get_fixed_timezone(420) # Asia/Bangkok
-ZONE_CONSTRUCTORS = (pytz.timezone,)
-if zoneinfo is not None:
- ZONE_CONSTRUCTORS += (zoneinfo.ZoneInfo,)
+ZONE_CONSTRUCTORS = (zoneinfo.ZoneInfo,)
+if pytz is not None:
+ ZONE_CONSTRUCTORS += (pytz.timezone,)
def get_timezones(key):
@@ -363,6 +363,23 @@ class NewDatabaseTests(TestCase):
self.assertEqual(Event.objects.filter(dt__in=(prev, dt, next)).count(), 1)
self.assertEqual(Event.objects.filter(dt__range=(prev, next)).count(), 1)
+ @ignore_warnings(category=RemovedInDjango50Warning)
+ def test_connection_timezone(self):
+ tests = [
+ (False, None, datetime.timezone),
+ (False, 'Africa/Nairobi', zoneinfo.ZoneInfo),
+ ]
+ if pytz is not None:
+ tests += [
+ (True, None, datetime.timezone),
+ (True, 'Africa/Nairobi', pytz.BaseTzInfo),
+ ]
+ for use_pytz, connection_tz, expected_type in tests:
+ with self.subTest(use_pytz=use_pytz, connection_tz=connection_tz):
+ with self.settings(USE_DEPRECATED_PYTZ=use_pytz):
+ with override_database_connection_timezone(connection_tz):
+ self.assertIsInstance(connection.timezone, expected_type)
+
def test_query_convert_timezones(self):
# Connection timezone is equal to the current timezone, datetime
# shouldn't be converted.
@@ -921,7 +938,7 @@ class TemplateTests(SimpleTestCase):
tpl = Template("{% load tz %}{{ dt|timezone:tz }}")
ctx = Context({
'dt': datetime.datetime(2011, 9, 1, 13, 20, 30),
- 'tz': pytz.timezone('Europe/Paris'),
+ 'tz': tz,
})
self.assertEqual(tpl.render(ctx), "2011-09-01T12:20:30+02:00")
@@ -994,11 +1011,15 @@ class TemplateTests(SimpleTestCase):
})
self.assertEqual(tpl.render(ctx), "2011-09-01T12:20:30+02:00")
+ @ignore_warnings(category=RemovedInDjango50Warning)
def test_timezone_templatetag_invalid_argument(self):
with self.assertRaises(TemplateSyntaxError):
Template("{% load tz %}{% timezone %}{% endtimezone %}").render()
- with self.assertRaises(pytz.UnknownTimeZoneError):
+ with self.assertRaises(zoneinfo.ZoneInfoNotFoundError):
Template("{% load tz %}{% timezone tz %}{% endtimezone %}").render(Context({'tz': 'foobar'}))
+ if pytz is not None:
+ with override_settings(USE_DEPRECATED_PYTZ=True), self.assertRaises(pytz.UnknownTimeZoneError):
+ Template("{% load tz %}{% timezone tz %}{% endtimezone %}").render(Context({'tz': 'foobar'}))
@skipIf(sys.platform == 'win32', "Windows uses non-standard time zone names")
def test_get_current_timezone_templatetag(self):