summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/_bootstrap.py
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2009-03-15 02:20:16 (GMT)
committerBrett Cannon <bcannon@gmail.com>2009-03-15 02:20:16 (GMT)
commit8d11013169efe085213842307859103f713beec5 (patch)
treee7b4cace8433ab483d8128524052fba93f442445 /Lib/importlib/_bootstrap.py
parent2b9fd47da776f75ddf5b488fcc73b8631ece8e2b (diff)
downloadcpython-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.py31
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: