https://github.com/python/cpython/commit/a096a41b922ac90bfd7bf23852cf0a32a4f54faf
commit: a096a41b922ac90bfd7bf23852cf0a32a4f54faf
branch: main
author: Wulian233 <[email protected]>
committer: Eclips4 <[email protected]>
date: 2025-03-27T18:07:09+02:00
summary:
gh-128438: Use `EnvironmentVarGuard` for `datetimetester.py` to manage
environment varibales (#130002)
files:
M Lib/test/datetimetester.py
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index f9d20ef9c626a9..ecb37250ceb6c4 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -1,5 +1,6 @@
"""Test the datetime module."""
import bisect
+import contextlib
import copy
import decimal
import io
@@ -20,7 +21,7 @@
from test import support
from test.support import is_resource_enabled, ALWAYS_EQ, LARGEST, SMALLEST
-from test.support import script_helper, warnings_helper
+from test.support import os_helper, script_helper, warnings_helper
import datetime as datetime_module
from datetime import MINYEAR, MAXYEAR
@@ -6691,6 +6692,17 @@ def test_gaps(self):
ldt = tz.fromutc(udt.replace(tzinfo=tz))
self.assertEqual(ldt.fold, 0)
+ @classmethod
+ @contextlib.contextmanager
+ def _change_tz(cls, new_tzinfo):
+ try:
+ with os_helper.EnvironmentVarGuard() as env:
+ env["TZ"] = new_tzinfo
+ _time.tzset()
+ yield
+ finally:
+ _time.tzset()
+
@unittest.skipUnless(
hasattr(_time, "tzset"), "time module has no attribute tzset"
)
@@ -6705,10 +6717,7 @@ def test_system_transitions(self):
self.zonename.startswith('right/')):
self.skipTest("Skipping %s" % self.zonename)
tz = self.tz
- TZ = os.environ.get('TZ')
- os.environ['TZ'] = self.zonename
- try:
- _time.tzset()
+ with self._change_tz(self.zonename):
for udt, shift in tz.transitions():
if udt.year >= 2037:
# System support for times around the end of 32-bit time_t
@@ -6716,7 +6725,7 @@ def test_system_transitions(self):
break
s0 = (udt - datetime(1970, 1, 1)) // SEC
ss = shift // SEC # shift seconds
- for x in [-40 * 3600, -20*3600, -1, 0,
+ for x in [-40 * 3600, -20 * 3600, -1, 0,
ss - 1, ss + 20 * 3600, ss + 40 * 3600]:
s = s0 + x
sdt = datetime.fromtimestamp(s)
@@ -6735,12 +6744,6 @@ def test_system_transitions(self):
utc0 = dt.astimezone(timezone.utc)
utc1 = dt.replace(fold=1).astimezone(timezone.utc)
self.assertEqual(utc0, utc1 + timedelta(0, ss))
- finally:
- if TZ is None:
- del os.environ['TZ']
- else:
- os.environ['TZ'] = TZ
- _time.tzset()
class ZoneInfoCompleteTest(unittest.TestSuite):
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]