diff Lib/importlib/abc.py @ 55355:dfaf6de2c8ce

Implement the PEP 302 protocol for get_filename() as importlib.abc.ExecutionLoader. PyLoader now inherits from this ABC instead of InspectLoader directly. Both PyLoader and PyPycLoader provide concrete implementations of get_filename in terms of source_path and bytecode_path.
author Brett Cannon <bcannon@gmail.com>
date Mon, 20 Jul 2009 04:23:48 +0000
parents f50290797fb5
children ad917b8fd64c
line wrap: on
line diff
--- a/Lib/importlib/abc.py	Mon Jul 20 03:19:18 2009 +0000
+++ b/Lib/importlib/abc.py	Mon Jul 20 04:23:48 2009 +0000
@@ -76,7 +76,23 @@
 InspectLoader.register(machinery.FrozenImporter)
 
 
-class PyLoader(_bootstrap.PyLoader, ResourceLoader, InspectLoader):
+class ExecutionLoader(InspectLoader):
+
+    """Abstract base class for loaders that wish to support the execution of
+    modules as scripts.
+
+    This ABC represents one of the optional protocols specified in PEP 302.
+
+    """
+
+    @abc.abstractmethod
+    def get_filename(self, fullname:str) -> str:
+        """Abstract method which should return the value that __file__ is to be
+        set to."""
+        raise NotImplementedError
+
+
+class PyLoader(_bootstrap.PyLoader, ResourceLoader, ExecutionLoader):
 
     """Abstract base class to assist in loading source code by requiring only
     back-end storage methods to be implemented.