Mercurial > cpython-lru_cache-weakref
diff Lib/importlib/_bootstrap.py @ 52166:69cd615b76fb
Implement InspectLoader for BuiltinImporter.
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Sun, 15 Mar 2009 01:41:33 +0000 |
| parents | 62f9dad628de |
| children | 70f5f9113ae1 |
line wrap: on
line diff
--- a/Lib/importlib/_bootstrap.py Sun Mar 15 00:53:05 2009 +0000 +++ b/Lib/importlib/_bootstrap.py Sun Mar 15 01:41:33 2009 +0000 @@ -173,6 +173,16 @@ return inner +def _requires_builtin(fxn): + """Decorator to verify the named module is built-in.""" + def wrapper(self, fullname): + if fullname not in sys.builtin_module_names: + raise ImportError("{0} is not a built-in module".format(fullname)) + return fxn(self, fullname) + _wrap(wrapper, fxn) + return wrapper + + def _suffix_list(suffix_type): """Return a list of file suffixes based on the imp file type.""" return [suffix[0] for suffix in imp.get_suffixes() @@ -204,10 +214,9 @@ @classmethod @set_package @set_loader + @_requires_builtin def load_module(cls, fullname): """Load a built-in module.""" - if fullname not in sys.builtin_module_names: - raise ImportError("{0} is not a built-in module".format(fullname)) is_reload = fullname in sys.modules try: return imp.init_builtin(fullname) @@ -216,6 +225,24 @@ del sys.modules[fullname] raise + @classmethod + @_requires_builtin + def get_code(cls, fullname): + """Return None as built-in modules do not have code objects.""" + return None + + @classmethod + @_requires_builtin + def get_source(cls, fullname): + """Return None as built-in modules do not have source code.""" + return None + + @classmethod + @_requires_builtin + def is_package(cls, fullname): + """Return None as built-in module are never packages.""" + return False + class FrozenImporter:
