Because the concepts it is based on are no longer used internally - determining the kind of module is now the province of importlib's finders and loaders.
-- Sent from my phone, thus the relative brevity :) On Jul 19, 2012 2:50 AM, "Jim Jewett" <jimjjew...@gmail.com> wrote: > 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-checkins mailing list > python-check...@python.org > http://mail.python.org/mailman/listinfo/python-checkins >
_______________________________________________ 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