[Python-checkins] peps: A few cosmetic fixes for PEP 451.

eric.snow python-checkins at python.org
Thu Sep 19 07:07:28 CEST 2013


http://hg.python.org/peps/rev/d9626c2b66da
changeset:   5132:d9626c2b66da
user:        Eric Snow <ericsnowcurrently at gmail.com>
date:        Wed Sep 18 23:04:47 2013 -0600
summary:
  A few cosmetic fixes for PEP 451.

files:
  pep-0451.txt |  68 ++++++++++++++++++---------------------
  1 files changed, 31 insertions(+), 37 deletions(-)


diff --git a/pep-0451.txt b/pep-0451.txt
--- a/pep-0451.txt
+++ b/pep-0451.txt
@@ -96,7 +96,7 @@
 per-module information and takes care of the boilerplate functionality
 involved with loading the module.
 
-(The idea gained momentum during discussions related to another PEP.[1])
+(The idea gained momentum during discussions related to another PEP.[1]_)
 
 
 Specification
@@ -116,18 +116,18 @@
 
 A specification for a module's import-system-related state.
 
-* ModuleSpec(name, loader, \*, origin=None, loading_info=None, is_package=None)
+* ModuleSpec(name, loader, \*, origin=None, loader_state=None, is_package=None)
 
 Attributes:
 
 * name - a string for the name of the module.
-* loader - the loader to use for loading and for module data.
+* loader - the loader to use for loading.
 * origin - a string for the location from which the module is loaded,
   e.g. "builtin" for built-in modules and the filename for modules
   loaded from source.
-* submodule_search_locations - strings for where to find submodules,
-  if a package.
-* loading_info - a container of extra data for use during loading.
+* submodule_search_locations - list of strings for where to find
+  submodules, if a package (None otherwise).
+* loader_state - a container of extra data for use during loading.
 * cached (property) - a string for where the compiled module will be
   stored (see PEP 3147).
 * package (RO-property) - the name of the module's parent (or None).
@@ -161,10 +161,6 @@
 * importlib.find_spec(name, path=None) will return the spec for a
   module.
 
-exec_module() and create_module() should not set any import-related
-module attributes.  The fact that load_module() does is a design flaw
-that this proposal aims to correct.
-
 API Changes
 -----------
 
@@ -201,7 +197,7 @@
   longer be used directly by the import system.
 * Import-related attributes should no longer be added to modules
   directly.
-* The module type's ``__repr__()`` will be thin wrapper around a pure
+* The module type's ``__repr__()`` will be a thin wrapper around a pure
   Python implementation which will leverage ModuleSpec.
 * The spec for the ``__main__`` module will reflect the appropriate
   name and origin.
@@ -254,7 +250,7 @@
 ModuleSpec Users
 ================
 
-``ModuleSpec`` objects has 3 distinct target audiences: Python itself,
+``ModuleSpec`` objects have 3 distinct target audiences: Python itself,
 import hooks, and normal Python users.
 
 Python will use specs in the import machinery, in interpreter startup,
@@ -296,14 +292,12 @@
            module = ModuleType(spec.name)
        spec.init_module_attrs(module)
 
-       spec._initializing = True
        sys.modues[spec.name] = module
        try:
            spec.loader.exec_module(module)
        except Exception:
            del sys.modules[spec.name]
-       finally:
-           spec._initializing = False
+           raise
        return sys.modules[spec.name]
 
 These steps are exactly what ``Loader.load_module()`` is already
@@ -340,12 +334,12 @@
 origin                     __file__*
 cached                     __cached__*,**
 submodule_search_locations __path__**
-loading_info                \-
+loader_state                \-
 has_location                \-
 ========================== ==============
 
-\* Set only if has_location is true.
-\*\* Set only if the spec attribute is not None.
+\* Set on the module only if spec.has_location is true.
+\*\* Set on the module only if the spec attribute is not None.
 
 While package and has_location are read-only properties, the remaining
 attributes can be replaced after the module spec is created and even
@@ -381,10 +375,10 @@
 will.
 
 The corresponding module attribute name, ``__file__``, is somewhat
-inaccurate and potentially confusion, so we will use a more explicit
+inaccurate and potentially confusing, so we will use a more explicit
 combination of origin and has_location to represent the same
-information.  Having a separate filename is unncessary since we have
-origin.
+information.  Having a separate "filename" is unncessary since we have
+"origin".
 
 **submodule_search_locations**
 
@@ -396,9 +390,9 @@
 ambiguous.  Instead of mirroring it, we use a more explicit name that
 makes the purpose clear.
 
-**loading_info**
+**loader_state**
 
-A finder may set loading_info to any value to provide additional
+A finder may set loader_state to any value to provide additional
 data for the loader to use during loading.  A value of None is the
 default and indicates that there is no additional data.  Otherwise it
 can be set to any object, such as a dict, list, or
@@ -408,7 +402,7 @@
 to the loader directly, rather than needing to derive it from origin
 or create a custom loader for each find operation.
 
-loading_info is meant for use by the finder and corresponding loader.
+loader_state is meant for use by the finder and corresponding loader.
 It is not guaranteed to be a stable resource for any other use.
 
 Omitted Attributes and Methods
@@ -418,10 +412,10 @@
 it is easy to use them incorrectly and only the import system really
 needs them (i.e. they would be an attractive nuisance).
 
-* create() - provide a new module to use for loading.
-* exec(module) - execute the spec into a module namespace.
-* load() - prepare a module and execute it in a protected way.
-* reload(module) - re-execute a module in a protected way.
+* _create() - provide a new module to use for loading.
+* _exec(module) - execute the spec into a module namespace.
+* _load() - prepare a module and execute it in a protected way.
+* _reload(module) - re-execute a module in a protected way.
 
 Here are other omissions:
 
@@ -468,7 +462,7 @@
 -----------
 
 Subclasses of ModuleSpec are allowed, but should not be necessary.
-Simply setting loading_info or adding functionality to a custom
+Simply setting loader_state or adding functionality to a custom
 finder or loader will likely be a better fit and should be tried first.
 However, as long as a subclass still fulfills the requirements of the
 import system, objects of that type are completely fine as the return
@@ -552,6 +546,12 @@
 than once for the same spec/module.  This may include returning None or
 raising ImportError.
 
+.. note::
+
+   exec_module() and create_module() should not set any import-related
+   module attributes.  The fact that load_module() does is a design flaw
+   that this proposal aims to correct.
+
 Other changes:
 
 PEP 420 introduced the optional ``module_repr()`` loader method to limit
@@ -614,15 +614,9 @@
 For instance, pickle should be updated in the __main__ case to look at
 ``module.__spec__.name``.
 
-\* Impact on some kinds of lazy loading modules.  See [3].
+\* Add broader reloading support?  See [2]_.
 
-\* Find a better name than loading_info?  Perhaps loading_data,
-loader_state, or loader_info.
-
-\* Change loader.create_module() to prepare_module()?
-
-\* Add more explicit reloading support to exec_module() (and
-prepare_module())?
+\* Impact on some kinds of lazy loading modules.  See [3]_.
 
 
 References

-- 
Repository URL: http://hg.python.org/peps


More information about the Python-checkins mailing list