mirror of
https://github.com/python/cpython.git
synced 2025-09-19 07:00:59 +00:00
Close #15387: inspect.getmodulename() now uses a new importlib.machinery.all_suffixes() API rather than the deprecated inspect.getmoduleinfo()
This commit is contained in:
parent
90db661b43
commit
76e077001d
5 changed files with 40 additions and 6 deletions
|
@ -533,12 +533,23 @@ find and load modules.
|
||||||
|
|
||||||
.. attribute:: EXTENSION_SUFFIXES
|
.. attribute:: EXTENSION_SUFFIXES
|
||||||
|
|
||||||
A list of strings representing the the recognized file suffixes for
|
A list of strings representing the recognized file suffixes for
|
||||||
extension modules.
|
extension modules.
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
|
||||||
|
.. func:: all_suffixes()
|
||||||
|
|
||||||
|
Returns a combined list of strings representing all file suffixes for
|
||||||
|
Python modules recognized by the standard import machinery. This is a
|
||||||
|
helper for code which simply needs to know if a filesystem path
|
||||||
|
potentially represents a Python module (for example,
|
||||||
|
:func:`inspect.getmodulename`)
|
||||||
|
|
||||||
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
|
|
||||||
.. class:: BuiltinImporter
|
.. class:: BuiltinImporter
|
||||||
|
|
||||||
An :term:`importer` for built-in modules. All known built-in modules are
|
An :term:`importer` for built-in modules. All known built-in modules are
|
||||||
|
|
|
@ -198,9 +198,18 @@ attributes:
|
||||||
.. function:: getmodulename(path)
|
.. function:: getmodulename(path)
|
||||||
|
|
||||||
Return the name of the module named by the file *path*, without including the
|
Return the name of the module named by the file *path*, without including the
|
||||||
names of enclosing packages. This uses the same algorithm as the interpreter
|
names of enclosing packages. The file extension is checked against all of
|
||||||
uses when searching for modules. If the name cannot be matched according to the
|
the entries in :func:`importlib.machinery.all_suffixes`. If it matches,
|
||||||
interpreter's rules, ``None`` is returned.
|
the final path component is returned with the extension removed.
|
||||||
|
Otherwise, ``None`` is returned.
|
||||||
|
|
||||||
|
Note that this function *only* returns a meaningful name for actual
|
||||||
|
Python modules - paths that potentially refer to Python packages will
|
||||||
|
still return ``None``.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.3
|
||||||
|
This function is now based directly on :mod:`importlib` rather than the
|
||||||
|
deprecated :func:`getmoduleinfo`.
|
||||||
|
|
||||||
|
|
||||||
.. function:: ismodule(object)
|
.. function:: ismodule(object)
|
||||||
|
|
|
@ -13,3 +13,7 @@ from ._bootstrap import SourcelessFileLoader
|
||||||
from ._bootstrap import ExtensionFileLoader
|
from ._bootstrap import ExtensionFileLoader
|
||||||
|
|
||||||
EXTENSION_SUFFIXES = _imp.extension_suffixes()
|
EXTENSION_SUFFIXES = _imp.extension_suffixes()
|
||||||
|
|
||||||
|
def all_suffixes():
|
||||||
|
"""Returns a list of all recognized module suffixes for this process"""
|
||||||
|
return SOURCE_SUFFIXES + BYTECODE_SUFFIXES + EXTENSION_SUFFIXES
|
||||||
|
|
|
@ -450,8 +450,15 @@ def getmoduleinfo(path):
|
||||||
|
|
||||||
def getmodulename(path):
|
def getmodulename(path):
|
||||||
"""Return the module name for a given file, or None."""
|
"""Return the module name for a given file, or None."""
|
||||||
info = getmoduleinfo(path)
|
fname = os.path.basename(path)
|
||||||
if info: return info[0]
|
# Check for paths that look like an actual module file
|
||||||
|
suffixes = [(-len(suffix), suffix)
|
||||||
|
for suffix in importlib.machinery.all_suffixes()]
|
||||||
|
suffixes.sort() # try longest suffixes first, in case they overlap
|
||||||
|
for neglen, suffix in suffixes:
|
||||||
|
if fname.endswith(suffix):
|
||||||
|
return fname[:neglen]
|
||||||
|
return None
|
||||||
|
|
||||||
def getsourcefile(object):
|
def getsourcefile(object):
|
||||||
"""Return the filename that can be used to locate an object's source.
|
"""Return the filename that can be used to locate an object's source.
|
||||||
|
|
|
@ -41,6 +41,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #15397: inspect.getmodulename() is now based directly on importlib
|
||||||
|
via a new importlib.machinery.all_suffixes() API.
|
||||||
|
|
||||||
- Issue #14635: telnetlib will use poll() rather than select() when possible
|
- Issue #14635: telnetlib will use poll() rather than select() when possible
|
||||||
to avoid failing due to the select() file descriptor limit.
|
to avoid failing due to the select() file descriptor limit.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue