mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
bpo-42136: Deprecate module_repr() as found in importlib (GH-25022)
This commit is contained in:
parent
21a2cabb37
commit
1899087b21
11 changed files with 1545 additions and 1478 deletions
|
@ -675,6 +675,13 @@ Here are the exact rules used:
|
|||
:meth:`~importlib.abc.Loader.module_repr` method, if defined, before
|
||||
trying either approach described above. However, the method is deprecated.
|
||||
|
||||
.. versionchanged:: 3.10
|
||||
|
||||
Calling :meth:`~importlib.abc.Loader.module_repr` now occurs after trying to
|
||||
use a module's ``__spec__`` attribute but before falling back on
|
||||
``__file__``. Use of :meth:`~importlib.abc.Loader.module_repr` is slated to
|
||||
stop in Python 3.12.
|
||||
|
||||
.. _pyc-invalidation:
|
||||
|
||||
Cached bytecode invalidation
|
||||
|
|
|
@ -1010,6 +1010,12 @@ Deprecated
|
|||
for Python 3.12.
|
||||
(Contributed by Brett Cannon in :issue:`42137`.)
|
||||
|
||||
* :meth:`importlib.abc.Loader.module_repr`,
|
||||
:meth:`importlib.machinery.FrozenLoader.module_repr`, and
|
||||
:meth:`importlib.machinery.BuiltinLoader.module_repr` are deprecated and
|
||||
slated for removal in Python 3.12.
|
||||
(Contributed by Brett Cannon in :issue:`42136`.)
|
||||
|
||||
* ``sqlite3.OptimizedUnicode`` has been undocumented and obsolete since Python
|
||||
3.3, when it was made an alias to :class:`str`. It is now deprecated,
|
||||
scheduled for removal in Python 3.12.
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Subset of importlib.abc used to reduce importlib.util imports."""
|
||||
from . import _bootstrap
|
||||
import abc
|
||||
import warnings
|
||||
|
||||
|
||||
class Loader(metaclass=abc.ABCMeta):
|
||||
|
@ -47,5 +48,7 @@ class Loader(metaclass=abc.ABCMeta):
|
|||
This method is deprecated.
|
||||
|
||||
"""
|
||||
warnings.warn("importlib.abc.Loader.module_repr() is deprecated and "
|
||||
"slated for removal in Python 3.12", DeprecationWarning)
|
||||
# The exception will cause ModuleType.__repr__ to ignore this method.
|
||||
raise NotImplementedError
|
||||
|
|
|
@ -302,8 +302,6 @@ def _module_repr(module):
|
|||
except Exception:
|
||||
pass
|
||||
# Fall through to a catch-all which always succeeds.
|
||||
# We could use module.__class__.__name__ instead of 'module' in the
|
||||
# various repr permutations.
|
||||
try:
|
||||
name = module.__name__
|
||||
except AttributeError:
|
||||
|
@ -741,6 +739,8 @@ class BuiltinImporter:
|
|||
The method is deprecated. The import machinery does the job itself.
|
||||
|
||||
"""
|
||||
_warnings.warn("BuiltinImporter.module_repr() is deprecated and "
|
||||
"slated for removal in Python 3.12", DeprecationWarning)
|
||||
return f'<module {module.__name__!r} ({BuiltinImporter._ORIGIN})>'
|
||||
|
||||
@classmethod
|
||||
|
@ -816,6 +816,8 @@ class FrozenImporter:
|
|||
The method is deprecated. The import machinery does the job itself.
|
||||
|
||||
"""
|
||||
_warnings.warn("FrozenImporter.module_repr() is deprecated and "
|
||||
"slated for removal in Python 3.12", DeprecationWarning)
|
||||
return '<module {!r} ({})>'.format(m.__name__, FrozenImporter._ORIGIN)
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -1230,6 +1230,8 @@ class _NamespaceLoader:
|
|||
The method is deprecated. The import machinery does the job itself.
|
||||
|
||||
"""
|
||||
_warnings.warn("_NamespaceLoader.module_repr() is deprecated and "
|
||||
"slated for removal in Python 3.12", DeprecationWarning)
|
||||
return '<module {!r} (namespace)>'.format(module.__name__)
|
||||
|
||||
def is_package(self, fullname):
|
||||
|
|
|
@ -220,8 +220,10 @@ class LoaderDefaultsTests(ABCTestHarness):
|
|||
|
||||
def test_module_repr(self):
|
||||
mod = types.ModuleType('blah')
|
||||
with self.assertRaises(NotImplementedError):
|
||||
self.ins.module_repr(mod)
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
with self.assertRaises(NotImplementedError):
|
||||
self.ins.module_repr(mod)
|
||||
original_repr = repr(mod)
|
||||
mod.__loader__ = self.ins
|
||||
# Should still return a proper repr.
|
||||
|
|
|
@ -3,6 +3,7 @@ import importlib
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
import warnings
|
||||
|
||||
from test.test_importlib import util
|
||||
|
||||
|
@ -82,8 +83,10 @@ class SingleNamespacePackage(NamespacePackageTest):
|
|||
|
||||
def test_module_repr(self):
|
||||
import foo.one
|
||||
self.assertEqual(foo.__spec__.loader.module_repr(foo),
|
||||
"<module 'foo' (namespace)>")
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore")
|
||||
self.assertEqual(foo.__spec__.loader.module_repr(foo),
|
||||
"<module 'foo' (namespace)>")
|
||||
|
||||
|
||||
class DynamicPathNamespacePackage(NamespacePackageTest):
|
||||
|
|
|
@ -7,7 +7,6 @@ import sys
|
|||
import unittest
|
||||
from test import support
|
||||
from test.support import import_helper
|
||||
from distutils.util import get_platform
|
||||
from contextlib import contextmanager
|
||||
from .util import temp_module
|
||||
|
||||
|
@ -18,6 +17,25 @@ from winreg import (
|
|||
EnumKey, CloseKey, DeleteKey, OpenKey
|
||||
)
|
||||
|
||||
def get_platform():
|
||||
# Port of distutils.util.get_platform().
|
||||
TARGET_TO_PLAT = {
|
||||
'x86' : 'win32',
|
||||
'x64' : 'win-amd64',
|
||||
'arm' : 'win-arm32',
|
||||
}
|
||||
if ('VSCMD_ARG_TGT_ARCH' in os.environ and
|
||||
os.environ['VSCMD_ARG_TGT_ARCH'] in TARGET_TO_PLAT):
|
||||
return TARGET_TO_PLAT[os.environ['VSCMD_ARG_TGT_ARCH']]
|
||||
elif 'amd64' in sys.version.lower():
|
||||
return 'win-amd64'
|
||||
elif '(arm)' in sys.version.lower():
|
||||
return 'win-arm32'
|
||||
elif '(arm64)' in sys.version.lower():
|
||||
return 'win-arm64'
|
||||
else:
|
||||
return sys.platform
|
||||
|
||||
def delete_registry_tree(root, subkey):
|
||||
try:
|
||||
hkey = OpenKey(root, subkey, access=KEY_ALL_ACCESS)
|
||||
|
@ -101,7 +119,7 @@ class WindowsExtensionSuffixTests:
|
|||
|
||||
self.assertIn(expected_tag, suffixes)
|
||||
|
||||
# Ensure the tags are in the correct order
|
||||
# Ensure the tags are in the correct order.
|
||||
tagged_i = suffixes.index(expected_tag)
|
||||
self.assertLess(tagged_i, untagged_i)
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Deprecate all module_repr() methods found in importlib as their use is being
|
||||
phased out by Python 3.12.
|
1562
Python/importlib.h
generated
1562
Python/importlib.h
generated
File diff suppressed because it is too large
Load diff
1400
Python/importlib_external.h
generated
1400
Python/importlib_external.h
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue