diff options
author | Brett Cannon <bcannon@gmail.com> | 2009-03-15 02:20:16 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2009-03-15 02:20:16 (GMT) |
commit | 8d11013169efe085213842307859103f713beec5 (patch) | |
tree | e7b4cace8433ab483d8128524052fba93f442445 /Lib/importlib/_bootstrap.py | |
parent | 2b9fd47da776f75ddf5b488fcc73b8631ece8e2b (diff) | |
download | cpython-8d11013169efe085213842307859103f713beec5.zip cpython-8d11013169efe085213842307859103f713beec5.tar.gz cpython-8d11013169efe085213842307859103f713beec5.tar.bz2 |
Implement InspectLoader for FrozenImporter.
Diffstat (limited to 'Lib/importlib/_bootstrap.py')
-rw-r--r-- | Lib/importlib/_bootstrap.py | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 736e1b6..d5b909e 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -183,6 +183,16 @@ def _requires_builtin(fxn): return wrapper +def _requires_frozen(fxn): + """Decorator to verify the named module is frozen.""" + def wrapper(self, fullname): + if not imp.is_frozen(fullname): + raise ImportError("{0} is not a frozen 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() @@ -261,10 +271,9 @@ class FrozenImporter: @classmethod @set_package @set_loader + @_requires_frozen def load_module(cls, fullname): """Load a frozen module.""" - if cls.find_module(fullname) is None: - raise ImportError("{0} is not a frozen module".format(fullname)) is_reload = fullname in sys.modules try: return imp.init_frozen(fullname) @@ -273,6 +282,24 @@ class FrozenImporter: del sys.modules[fullname] raise + @classmethod + @_requires_frozen + def get_code(cls, fullname): + """Return the code object for the frozen module.""" + return imp.get_frozen_object(fullname) + + @classmethod + @_requires_frozen + def get_source(cls, fullname): + """Return None as frozen modules do not have source code.""" + return None + + @classmethod + @_requires_frozen + def is_package(cls, fullname): + """Return if the frozen module is a package.""" + return imp.is_frozen_package(fullname) + class PyLoader: |