Why is inspect.getmoduleinfo() deprecated? Is it just to remove circular dependencies?
FWIW, I much prefer an API like: tell_me_about(object) to one like: for test_data in (X, Y, Z): usable = tester(object, test_data) if valid(usable): return possible_results[test_data] and to me, inspect.getmoduleinfo(path) looks like the first, while checking the various import.machinery.*SUFFIXES looks like the second. -jJ On 7/18/12, nick.coghlan <python-check...@python.org> wrote: > http://hg.python.org/cpython/rev/af7961e1c362 > changeset: 78161:af7961e1c362 > user: Nick Coghlan <ncogh...@gmail.com> > date: Wed Jul 18 23:14:57 2012 +1000 > summary: > Close #15387: inspect.getmodulename() now uses a new > importlib.machinery.all_suffixes() API rather than the deprecated > inspect.getmoduleinfo() > > files: > Doc/library/importlib.rst | 13 ++++++++++++- > Doc/library/inspect.rst | 15 ++++++++++++--- > Lib/importlib/machinery.py | 4 ++++ > Lib/inspect.py | 11 +++++++++-- > Misc/NEWS | 3 +++ > 5 files changed, 40 insertions(+), 6 deletions(-) > > > diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst > --- a/Doc/library/importlib.rst > +++ b/Doc/library/importlib.rst > @@ -533,12 +533,23 @@ > > .. 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. > > .. 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 > > An :term:`importer` for built-in modules. All known built-in modules > are > diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst > --- a/Doc/library/inspect.rst > +++ b/Doc/library/inspect.rst > @@ -198,9 +198,18 @@ > .. function:: getmodulename(path) > > 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 > - uses when searching for modules. If the name cannot be matched > according to the > - interpreter's rules, ``None`` is returned. > + names of enclosing packages. The file extension is checked against all > of > + the entries in :func:`importlib.machinery.all_suffixes`. If it matches, > + 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) > diff --git a/Lib/importlib/machinery.py b/Lib/importlib/machinery.py > --- a/Lib/importlib/machinery.py > +++ b/Lib/importlib/machinery.py > @@ -13,3 +13,7 @@ > from ._bootstrap import ExtensionFileLoader > > 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 > diff --git a/Lib/inspect.py b/Lib/inspect.py > --- a/Lib/inspect.py > +++ b/Lib/inspect.py > @@ -450,8 +450,15 @@ > > def getmodulename(path): > """Return the module name for a given file, or None.""" > - info = getmoduleinfo(path) > - if info: return info[0] > + fname = os.path.basename(path) > + # 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): > """Return the filename that can be used to locate an object's source. > diff --git a/Misc/NEWS b/Misc/NEWS > --- a/Misc/NEWS > +++ b/Misc/NEWS > @@ -41,6 +41,9 @@ > 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 > to avoid failing due to the select() file descriptor limit. > > > -- > Repository URL: http://hg.python.org/cpython > _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com