diff options
author | Brett Cannon <bcannon@gmail.com> | 2008-05-08 18:11:25 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2008-05-08 18:11:25 (GMT) |
commit | 0ec585575d9f27336b17edad5bd70d54a2ee6d03 (patch) | |
tree | 3c97cc768c946440b9f8f2a08c859d93b074e42c /Doc | |
parent | 6d4df9b343b0c2ce9cfebba3f9e09d501f0b239b (diff) | |
download | cpython-0ec585575d9f27336b17edad5bd70d54a2ee6d03.zip cpython-0ec585575d9f27336b17edad5bd70d54a2ee6d03.tar.gz cpython-0ec585575d9f27336b17edad5bd70d54a2ee6d03.tar.bz2 |
Remove the imputil module.
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/library/imputil.rst | 234 | ||||
-rw-r--r-- | Doc/library/modules.rst | 1 |
2 files changed, 0 insertions, 235 deletions
diff --git a/Doc/library/imputil.rst b/Doc/library/imputil.rst deleted file mode 100644 index c05ae1a..0000000 --- a/Doc/library/imputil.rst +++ /dev/null @@ -1,234 +0,0 @@ - -:mod:`imputil` --- Import utilities -=================================== - -.. module:: imputil - :synopsis: Manage and augment the import process. - - -.. index:: statement: import - -This module provides a very handy and useful mechanism for custom -:keyword:`import` hooks. Compared to the older :mod:`ihooks` module, -:mod:`imputil` takes a dramatically simpler and more straight-forward -approach to custom :keyword:`import` functions. - - -.. class:: ImportManager([fs_imp]) - - Manage the import process. - - .. method:: ImportManager.install([namespace]) - - Install this ImportManager into the specified namespace. - - .. method:: ImportManager.uninstall() - - Restore the previous import mechanism. - - .. method:: ImportManager.add_suffix(suffix, importFunc) - - Undocumented. - - -.. class:: Importer() - - Base class for replacing standard import functions. - - .. method:: Importer.import_top(name) - - Import a top-level module. - - .. method:: Importer.get_code(parent, modname, fqname) - - Find and retrieve the code for the given module. - - *parent* specifies a parent module to define a context for importing. - It may be ``None``, indicating no particular context for the search. - - *modname* specifies a single module (not dotted) within the parent. - - *fqname* specifies the fully-qualified module name. This is a - (potentially) dotted name from the "root" of the module namespace - down to the modname. - - If there is no parent, then modname==fqname. - - This method should return ``None``, or a 3-tuple. - - * If the module was not found, then ``None`` should be returned. - - * The first item of the 2- or 3-tuple should be the integer 0 or 1, - specifying whether the module that was found is a package or not. - - * The second item is the code object for the module (it will be - executed within the new module's namespace). This item can also - be a fully-loaded module object (e.g. loaded from a shared lib). - - * The third item is a dictionary of name/value pairs that will be - inserted into new module before the code object is executed. This - is provided in case the module's code expects certain values (such - as where the module was found). When the second item is a module - object, then these names/values will be inserted *after* the module - has been loaded/initialized. - - -.. class:: BuiltinImporter() - - Emulate the import mechanism for builtin and frozen modules. This is a - sub-class of the :class:`Importer` class. - - .. method:: BuiltinImporter.get_code(parent, modname, fqname) - - Undocumented. - -.. function:: py_suffix_importer(filename, finfo, fqname) - - Undocumented. - -.. class:: DynLoadSuffixImporter([desc]) - - Undocumented. - - .. method:: DynLoadSuffixImporter.import_file(filename, finfo, fqname) - - Undocumented. - -.. _examples-imputil: - -Examples --------- - -This is a re-implementation of hierarchical module import. - -This code is intended to be read, not executed. However, it does work --- all you need to do to enable it is "import knee". - -(The name is a pun on the klunkier predecessor of this module, "ni".) - -:: - - import sys, imp, builtins - - # Replacement for __import__() - def import_hook(name, globals=None, locals=None, fromlist=None): - parent = determine_parent(globals) - q, tail = find_head_package(parent, name) - m = load_tail(q, tail) - if not fromlist: - return q - if hasattr(m, "__path__"): - ensure_fromlist(m, fromlist) - return m - - def determine_parent(globals): - if not globals or not "__name__" in globals: - return None - pname = globals['__name__'] - if "__path__" in globals: - parent = sys.modules[pname] - assert globals is parent.__dict__ - return parent - if '.' in pname: - i = pname.rfind('.') - pname = pname[:i] - parent = sys.modules[pname] - assert parent.__name__ == pname - return parent - return None - - def find_head_package(parent, name): - if '.' in name: - i = name.find('.') - head = name[:i] - tail = name[i+1:] - else: - head = name - tail = "" - if parent: - qname = "%s.%s" % (parent.__name__, head) - else: - qname = head - q = import_module(head, qname, parent) - if q: return q, tail - if parent: - qname = head - parent = None - q = import_module(head, qname, parent) - if q: return q, tail - raise ImportError("No module named " + qname) - - def load_tail(q, tail): - m = q - while tail: - i = tail.find('.') - if i < 0: i = len(tail) - head, tail = tail[:i], tail[i+1:] - mname = "%s.%s" % (m.__name__, head) - m = import_module(head, mname, m) - if not m: - raise ImportError("No module named " + mname) - return m - - def ensure_fromlist(m, fromlist, recursive=0): - for sub in fromlist: - if sub == "*": - if not recursive: - try: - all = m.__all__ - except AttributeError: - pass - else: - ensure_fromlist(m, all, 1) - continue - if sub != "*" and not hasattr(m, sub): - subname = "%s.%s" % (m.__name__, sub) - submod = import_module(sub, subname, m) - if not submod: - raise ImportError("No module named " + subname) - - def import_module(partname, fqname, parent): - try: - return sys.modules[fqname] - except KeyError: - pass - try: - fp, pathname, stuff = imp.find_module(partname, - parent and parent.__path__) - except ImportError: - return None - try: - m = imp.load_module(fqname, fp, pathname, stuff) - finally: - if fp: fp.close() - if parent: - setattr(parent, partname, m) - return m - - - # Replacement for reload() - def reload_hook(module): - name = module.__name__ - if '.' not in name: - return import_module(name, name, None) - i = name.rfind('.') - pname = name[:i] - parent = sys.modules[pname] - return import_module(name[i+1:], name, parent) - - - # Save the original hooks - original_import = builtins.__import__ - original_reload = builtins.reload - - # Now install our hooks - builtins.__import__ = import_hook - builtins.reload = reload_hook - -.. index:: - module: knee - -Also see the :mod:`importers` module (which can be found -in :file:`Demo/imputil/` in the Python source distribution) for additional -examples. - diff --git a/Doc/library/modules.rst b/Doc/library/modules.rst index ec6f7cd..2590a3a 100644 --- a/Doc/library/modules.rst +++ b/Doc/library/modules.rst @@ -14,7 +14,6 @@ The full list of modules described in this chapter is: .. toctree:: imp.rst - imputil.rst zipimport.rst pkgutil.rst modulefinder.rst |