mirror of https://github.com/python/cpython
gh-120782: Update internal type cache when reloading datetime (#120829)
This commit is contained in:
parent
6f1d448bc1
commit
a81d434c06
|
@ -6870,6 +6870,23 @@ class ExtensionModuleTests(unittest.TestCase):
|
|||
""")
|
||||
script_helper.assert_python_ok('-c', script)
|
||||
|
||||
def test_update_type_cache(self):
|
||||
# gh-120782
|
||||
script = textwrap.dedent("""
|
||||
import sys
|
||||
for i in range(5):
|
||||
import _datetime
|
||||
_datetime.date.max > _datetime.date.min
|
||||
_datetime.time.max > _datetime.time.min
|
||||
_datetime.datetime.max > _datetime.datetime.min
|
||||
_datetime.timedelta.max > _datetime.timedelta.min
|
||||
isinstance(_datetime.timezone.min, _datetime.tzinfo)
|
||||
isinstance(_datetime.timezone.utc, _datetime.tzinfo)
|
||||
isinstance(_datetime.timezone.max, _datetime.tzinfo)
|
||||
del sys.modules['_datetime']
|
||||
""")
|
||||
script_helper.assert_python_ok('-c', script)
|
||||
|
||||
|
||||
def load_tests(loader, standard_tests, pattern):
|
||||
standard_tests.addTest(ZoneInfoCompleteTest())
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fix wrong references of the :mod:`datetime` types after reloading the module.
|
|
@ -7296,6 +7296,12 @@ _datetime_exec(PyObject *module)
|
|||
static_assert(DI100Y == 25 * DI4Y - 1, "DI100Y");
|
||||
assert(DI100Y == days_before_year(100+1));
|
||||
|
||||
if (reloading) {
|
||||
for (size_t i = 0; i < Py_ARRAY_LENGTH(capi_types); i++) {
|
||||
PyType_Modified(capi_types[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (set_current_module(interp, module) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue