|
1 | 1 | import copy
|
2 | 2 | import functools
|
3 | 3 | import pickle
|
| 4 | +import sys |
4 | 5 | import unittest
|
5 | 6 | from datetime import datetime, timedelta, timezone, tzinfo
|
6 | 7 |
|
7 | 8 | from pydantic_core import SchemaValidator, TzInfo, core_schema
|
8 | 9 |
|
| 10 | +if sys.version_info >= (3, 9): |
| 11 | + from zoneinfo import ZoneInfo |
| 12 | + |
9 | 13 |
|
10 | 14 | class _ALWAYS_EQ:
|
11 | 15 | """
|
@@ -80,6 +84,7 @@ class TestTzInfo(unittest.TestCase):
|
80 | 84 | def setUp(self):
|
81 | 85 | self.ACDT = TzInfo(timedelta(hours=9.5).total_seconds())
|
82 | 86 | self.EST = TzInfo(-timedelta(hours=5).total_seconds())
|
| 87 | + self.UTC = TzInfo(timedelta(0).total_seconds()) |
83 | 88 | self.DT = datetime(2010, 1, 1)
|
84 | 89 |
|
85 | 90 | def test_str(self):
|
@@ -163,6 +168,17 @@ def test_comparison(self):
|
163 | 168 | self.assertFalse(tz <= SMALLEST)
|
164 | 169 | self.assertTrue(tz >= SMALLEST)
|
165 | 170 |
|
| 171 | + # offset based comparion tests for tzinfo derived classes like datetime.timezone. |
| 172 | + utcdatetime = self.DT.replace(tzinfo=timezone.utc) |
| 173 | + self.assertTrue(tz == utcdatetime.tzinfo) |
| 174 | + estdatetime = self.DT.replace(tzinfo=timezone(-timedelta(hours=5))) |
| 175 | + self.assertTrue(self.EST == estdatetime.tzinfo) |
| 176 | + self.assertTrue(tz > estdatetime.tzinfo) |
| 177 | + if sys.version_info >= (3, 9) and sys.platform == 'linux': |
| 178 | + self.assertFalse(tz == ZoneInfo('Europe/London')) |
| 179 | + with self.assertRaises(TypeError): |
| 180 | + tz > ZoneInfo('Europe/London') |
| 181 | + |
166 | 182 | def test_copy(self):
|
167 | 183 | for tz in self.ACDT, self.EST:
|
168 | 184 | tz_copy = copy.copy(tz)
|
|
0 commit comments