[Python-checkins] peps: Issue #26914: Fix formatting of lists in PEP 420
berker.peksag
python-checkins at python.org
Tue May 3 03:36:38 EDT 2016
https://hg.python.org/peps/rev/03a4c21ca991
changeset: 6297:03a4c21ca991
user: Berker Peksag <berker.peksag at gmail.com>
date: Tue May 03 10:36:46 2016 +0300
summary:
Issue #26914: Fix formatting of lists in PEP 420
Patch by Ned Batchelder.
files:
pep-0420.txt | 147 ++++++++++++++++++++------------------
1 files changed, 78 insertions(+), 69 deletions(-)
diff --git a/pep-0420.txt b/pep-0420.txt
--- a/pep-0420.txt
+++ b/pep-0420.txt
@@ -28,20 +28,25 @@
Within this PEP:
- * "package" refers to Python packages as defined by Python's import
- statement.
- * "distribution" refers to separately installable sets of Python
- modules as stored in the Python package index, and installed by
- distutils or setuptools.
- * "vendor package" refers to groups of files installed by an
- operating system's packaging mechanism (e.g. Debian or Redhat
- packages install on Linux systems).
- * "regular package" refers to packages as they are implemented in
- Python 3.2 and earlier.
- * "portion" refers to a set of files in a single directory (possibly
- stored in a zip file) that contribute to a namespace package.
- * "legacy portion" refers to a portion that uses ``__path__``
- manipulation in order to implement namespace packages.
+* "package" refers to Python packages as defined by Python's import
+ statement.
+
+* "distribution" refers to separately installable sets of Python
+ modules as stored in the Python package index, and installed by
+ distutils or setuptools.
+
+* "vendor package" refers to groups of files installed by an
+ operating system's packaging mechanism (e.g. Debian or Redhat
+ packages install on Linux systems).
+
+* "regular package" refers to packages as they are implemented in
+ Python 3.2 and earlier.
+
+* "portion" refers to a set of files in a single directory (possibly
+ stored in a zip file) that contribute to a namespace package.
+
+* "legacy portion" refers to a portion that uses ``__path__``
+ manipulation in order to implement namespace packages.
This PEP defines a new type of package, the "namespace package".
@@ -115,16 +120,16 @@
computed from the parent path at namespace package creation time.
Consider the standard library ``encodings`` package:
- 1. Suppose that ``encodings`` becomes a namespace package.
+1. Suppose that ``encodings`` becomes a namespace package.
- 2. It sometimes gets imported during interpreter startup to
- initialize the standard io streams.
+2. It sometimes gets imported during interpreter startup to
+ initialize the standard io streams.
- 3. An application modifies ``sys.path`` after startup and wants to
- contribute additional encodings from new path entries.
+3. An application modifies ``sys.path`` after startup and wants to
+ contribute additional encodings from new path entries.
- 4. An attempt is made to import an encoding from an ``encodings``
- portion that is found on a path entry added in step 3.
+4. An attempt is made to import an encoding from an ``encodings``
+ portion that is found on a path entry added in step 3.
If the import system was restricted to only finding portions along the
value of ``sys.path`` that existed at the time the ``encodings``
@@ -158,29 +163,29 @@
3.2. While looking for a module or package named "foo", for each
directory in the parent path:
- * If ``<directory>/foo/__init__.py`` is found, a regular package is
- imported and returned.
+* If ``<directory>/foo/__init__.py`` is found, a regular package is
+ imported and returned.
- * If not, but ``<directory>/foo.{py,pyc,so,pyd}`` is found, a module
- is imported and returned. The exact list of extension varies by
- platform and whether the -O flag is specified. The list here is
- representative.
+* If not, but ``<directory>/foo.{py,pyc,so,pyd}`` is found, a module
+ is imported and returned. The exact list of extension varies by
+ platform and whether the -O flag is specified. The list here is
+ representative.
- * If not, but ``<directory>/foo`` is found and is a directory, it is
- recorded and the scan continues with the next directory in the
- parent path.
+* If not, but ``<directory>/foo`` is found and is a directory, it is
+ recorded and the scan continues with the next directory in the
+ parent path.
- * Otherwise the scan continues with the next directory in the parent
- path.
+* Otherwise the scan continues with the next directory in the parent
+ path.
If the scan completes without returning a module or package, and at
least one directory was recorded, then a namespace package is created.
The new namespace package:
- * Has a ``__path__`` attribute set to an iterable of the path strings
- that were found and recorded during the scan.
+* Has a ``__path__`` attribute set to an iterable of the path strings
+ that were found and recorded during the scan.
- * Does not have a ``__file__`` attribute.
+* Does not have a ``__file__`` attribute.
Note that if "import foo" is executed and "foo" is found as a
namespace package (using the above rules), then "foo" is immediately
@@ -247,20 +252,20 @@
Namespace packages and regular packages are very similar. The
differences are:
- * Portions of namespace packages need not all come from the same
- directory structure, or even from the same loader. Regular packages
- are self-contained: all parts live in the same directory hierarchy.
+* Portions of namespace packages need not all come from the same
+ directory structure, or even from the same loader. Regular packages
+ are self-contained: all parts live in the same directory hierarchy.
- * Namespace packages have no ``__file__`` attribute.
+* Namespace packages have no ``__file__`` attribute.
- * Namespace packages' ``__path__`` attribute is a read-only iterable
- of strings, which is automatically updated when the parent path is
- modified.
+* Namespace packages' ``__path__`` attribute is a read-only iterable
+ of strings, which is automatically updated when the parent path is
+ modified.
- * Namespace packages have no ``__init__.py`` module.
+* Namespace packages have no ``__init__.py`` module.
- * Namespace packages have a different type of object for their
- ``__loader__`` attribute.
+* Namespace packages have a different type of object for their
+ ``__loader__`` attribute.
Namespace packages in the standard library
@@ -441,29 +446,29 @@
Nick Coghlan presented a list of his objections to this proposal [4]_.
They are:
- 1. Implicit package directories go against the Zen of Python.
+1. Implicit package directories go against the Zen of Python.
- 2. Implicit package directories pose awkward backwards compatibility
- challenges.
+2. Implicit package directories pose awkward backwards compatibility
+ challenges.
- 3. Implicit package directories introduce ambiguity into file system
- layouts.
+3. Implicit package directories introduce ambiguity into file system
+ layouts.
- 4. Implicit package directories will permanently entrench current
- newbie-hostile behavior in ``__main__``.
+4. Implicit package directories will permanently entrench current
+ newbie-hostile behavior in ``__main__``.
Nick later gave a detailed response to his own objections [5]_, which
is summarized here:
- 1. The practicality of this PEP wins over other proposals and the
- status quo.
+1. The practicality of this PEP wins over other proposals and the
+ status quo.
- 2. Minor backward compatibility issues are okay, as long as they are
- properly documented.
+2. Minor backward compatibility issues are okay, as long as they are
+ properly documented.
- 3. This will be addressed in PEP 395.
+3. This will be addressed in PEP 395.
- 4. This will also be addressed in PEP 395.
+4. This will also be addressed in PEP 395.
The inclusion of namespace packages in the standard library was
motivated by Martin v. Löwis, who wanted the ``encodings`` package to
@@ -547,17 +552,21 @@
This method should return the string to be used verbatim as the repr of the
module. The rules for producing a module repr are now standardized as:
- * If the module has an ``__loader__`` and that loader has a ``module_repr()``
- method, call it with a single argument, which is the module object. The
- value returned is used as the module's repr.
- * If an exception occurs in ``module_repr()``, the exception is
- caught and discarded, and the calculation of the module's repr
- continues as if ``module_repr()`` did not exist.
- * If the module has an ``__file__`` attribute, this is used as part of the
- module's repr.
- * If the module has no ``__file__`` but does have an ``__loader__``, then the
- loader's repr is used as part of the module's repr.
- * Otherwise, just use the module's ``__name__`` in the repr.
+* If the module has an ``__loader__`` and that loader has a ``module_repr()``
+ method, call it with a single argument, which is the module object. The
+ value returned is used as the module's repr.
+
+* If an exception occurs in ``module_repr()``, the exception is
+ caught and discarded, and the calculation of the module's repr
+ continues as if ``module_repr()`` did not exist.
+
+* If the module has an ``__file__`` attribute, this is used as part of the
+ module's repr.
+
+* If the module has no ``__file__`` but does have an ``__loader__``, then the
+ loader's repr is used as part of the module's repr.
+
+* Otherwise, just use the module's ``__name__`` in the repr.
Here is a snippet showing how namespace module reprs are calculated
from its loader::
--
Repository URL: https://hg.python.org/peps
More information about the Python-checkins
mailing list