Skip to content

Commit 97c8a36

Browse files
gh-137754: Fix import of zoneinfo if _datetime is not available
Both modules should use the Python implementation in that case.
1 parent 03f5519 commit 97c8a36

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

Lib/test/test_zoneinfo/test_zoneinfo.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import re
1313
import shutil
1414
import struct
15+
import sys
1516
import tempfile
1617
import unittest
1718
from datetime import date, datetime, time, timedelta, timezone
@@ -1946,6 +1947,21 @@ class CTestModule(TestModule):
19461947
module = c_zoneinfo
19471948

19481949

1950+
class MiscTests(unittest.TestCase):
1951+
def test_pydatetime(self):
1952+
with CleanImport('zoneinfo', 'zoneinfo._tzpath', 'zoneinfo._zoneinfo',
1953+
'_zoneinfo', 'datetime', '_pydatetime', '_datetime'):
1954+
sys.modules['_datetime'] = None
1955+
import datetime
1956+
import zoneinfo
1957+
zoneinfo.ZoneInfo.clear_cache()
1958+
tzinfo = zoneinfo.ZoneInfo('Europe/Paris')
1959+
datetime.datetime(2025, 10, 26, 2, 0, tzinfo=tzinfo)
1960+
self.assertIn('_pydatetime', sys.modules)
1961+
self.assertNotIn('_zoneinfo', sys.modules)
1962+
self.assertIn('zoneinfo._zoneinfo', sys.modules)
1963+
1964+
19491965
class ExtensionBuiltTest(unittest.TestCase):
19501966
"""Smoke test to ensure that the C and Python extensions are both tested.
19511967

Lib/zoneinfo/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212

1313
try:
1414
from _zoneinfo import ZoneInfo
15-
except ImportError: # pragma: nocover
15+
except (ImportError, AttributeError): # pragma: nocover
16+
# AttributeError: module 'datetime' has no attribute 'datetime_CAPI'.
17+
# This happens when the '_datetime' module is not available and the
18+
# pure Python implementation is used instead.
1619
from ._zoneinfo import ZoneInfo
1720

1821
reset_tzpath = _tzpath.reset_tzpath
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix import of the :mod:`zoneinfo` module if the C implementation of the
2+
:mod:`datetime` module is not available.

0 commit comments

Comments
 (0)