[Python-checkins] r50819 - python/trunk/Lib/pkgutil.py

Neal Norwitz nnorwitz at gmail.com
Wed Jul 26 05:41:09 CEST 2006


Can we get a Misc/NEWS entry for this puppy?

It would be great to start a test for pkgutil too.  Anyone?  it's a
good way to start learning about the python core and everyone(*) will
thank you.

n

(*) where everyone is defined as me and whoever else wants to join me
in thanks ;-)
--

On 7/25/06, georg.brandl <python-checkins at python.org> wrote:
> Author: georg.brandl
> Date: Tue Jul 25 12:22:34 2006
> New Revision: 50819
>
> Modified:
>    python/trunk/Lib/pkgutil.py
> Log:
> Patch #1525766: correctly pass onerror arg to recursive calls
> of pkg.walk_packages. Also improve the docstrings.
>
>
>
> Modified: python/trunk/Lib/pkgutil.py
> ==============================================================================
> --- python/trunk/Lib/pkgutil.py (original)
> +++ python/trunk/Lib/pkgutil.py Tue Jul 25 12:22:34 2006
> @@ -69,7 +69,28 @@
>
>
>  def walk_packages(path=None, prefix='', onerror=None):
> -    """Yield submodule names+loaders recursively, for path or sys.path"""
> +    """Yields (module_loader, name, ispkg) for all modules recursively
> +    on path, or, if path is None, all accessible modules.
> +
> +    'path' should be either None or a list of paths to look for
> +    modules in.
> +
> +    'prefix' is a string to output on the front of every module name
> +    on output.
> +
> +    Note that this function must import all *packages* (NOT all
> +    modules!) on the given path, in order to access the __path__
> +    attribute to find submodules.
> +
> +    'onerror' is a function which gets called with one argument (the
> +    name of the package which was being imported) if an ImportError
> +    occurs trying to import a package. By default the ImportError is
> +    caught and ignored.
> +
> +    Examples:
> +    walk_packages() : list all modules python can access
> +    walk_packages(ctypes.__path__, ctypes.__name__+'.') : list all submodules of ctypes
> +    """
>
>      def seen(p, m={}):
>          if p in m:
> @@ -84,19 +105,28 @@
>                  __import__(name)
>              except ImportError:
>                  if onerror is not None:
> -                    onerror()
> +                    onerror(name)
>              else:
>                  path = getattr(sys.modules[name], '__path__', None) or []
>
>                  # don't traverse path items we've seen before
>                  path = [p for p in path if not seen(p)]
>
> -                for item in walk_packages(path, name+'.'):
> +                for item in walk_packages(path, name+'.', onerror):
>                      yield item
>
>
>  def iter_modules(path=None, prefix=''):
> -    """Yield submodule names+loaders for path or sys.path"""
> +    """Yields (module_loader, name, ispkg) for all submodules on path,
> +    or, if path is None, all top-level modules on sys.path.
> +
> +    'path' should be either None or a list of paths to look for
> +    modules in.
> +
> +    'prefix' is a string to output on the front of every module name
> +    on output.
> +    """
> +
>      if path is None:
>          importers = iter_importers()
>      else:
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>


More information about the Python-checkins mailing list