diff options
author | ?ukasz Langa <lukasz@langa.pl> | 2013-06-05 12:20:24 +0200 |
---|---|---|
committer | ?ukasz Langa <lukasz@langa.pl> | 2013-06-05 12:20:24 +0200 |
commit | 6293f6bb502a5091a9fdd02277e1a8aad91474d1 (patch) | |
tree | 4185ed2a3a4d914e75037b166832fca1defbbb95 /Lib/pkgutil.py | |
parent | b49d89e9b366a998afe9afa75f54fd3830210fb4 (diff) | |
download | cpython-6293f6bb502a5091a9fdd02277e1a8aad91474d1.tar.gz |
Add reference implementation for PEP 443
PEP accepted: http://mail.python.org/pipermail/python-dev/2013-June/126734.html
Diffstat (limited to 'Lib/pkgutil.py')
-rw-r--r-- | Lib/pkgutil.py | 52 |
1 files changed, 6 insertions, 46 deletions
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py index 1901a5b7ea..d2a6f1ec67 100644 --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -1,12 +1,13 @@ """Utilities to support packages.""" -import os -import sys -import importlib +from functools import singledispatch as simplegeneric import imp +import importlib +import os import os.path -from warnings import warn +import sys from types import ModuleType +from warnings import warn __all__ = [ 'get_importer', 'iter_importers', 'get_loader', 'find_loader', @@ -27,46 +28,6 @@ def read_code(stream): return marshal.load(stream) -def simplegeneric(func): - """Make a trivial single-dispatch generic function""" - registry = {} - def wrapper(*args, **kw): - ob = args[0] - try: - cls = ob.__class__ - except AttributeError: - cls = type(ob) - try: - mro = cls.__mro__ - except AttributeError: - try: - class cls(cls, object): - pass - mro = cls.__mro__[1:] - except TypeError: - mro = object, # must be an ExtensionClass or some such :( - for t in mro: - if t in registry: - return registry[t](*args, **kw) - else: - return func(*args, **kw) - try: - wrapper.__name__ = func.__name__ - except (TypeError, AttributeError): - pass # Python 2.3 doesn't allow functions to be renamed - - def register(typ, func=None): - if func is None: - return lambda f: register(typ, f) - registry[typ] = func - return func - - wrapper.__dict__ = func.__dict__ - wrapper.__doc__ = func.__doc__ - wrapper.register = register - return wrapper - - def walk_packages(path=None, prefix='', onerror=None): """Yields (module_loader, name, ispkg) for all modules recursively on path, or, if path is None, all accessible modules. @@ -148,13 +109,12 @@ def iter_modules(path=None, prefix=''): yield i, name, ispkg -#@simplegeneric +@simplegeneric def iter_importer_modules(importer, prefix=''): if not hasattr(importer, 'iter_modules'): return [] return importer.iter_modules(prefix) -iter_importer_modules = simplegeneric(iter_importer_modules) # Implement a file walker for the normal importlib path hook def _iter_file_finder_modules(importer, prefix=''): |