[Python-Dev] [Python-checkins] cpython: Close #15387: inspect.getmodulename() now uses a new

Nick Coghlan ncoghlan at gmail.com
Thu Jul 19 01:31:52 CEST 2012


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" <jimjjewett at 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-checkins at python.org> wrote:
> > http://hg.python.org/cpython/rev/af7961e1c362
> > changeset:   78161:af7961e1c362
> > user:        Nick Coghlan <ncoghlan at 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-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20120719/4847022e/attachment-0001.html>


More information about the Python-Dev mailing list