[Python-checkins] peps: PJE's feedback on PEP 426 exports

nick.coghlan python-checkins at python.org
Sat Aug 3 15:43:07 CEST 2013


http://hg.python.org/peps/rev/59bc3da3abc8
changeset:   5029:59bc3da3abc8
user:        Nick Coghlan <ncoghlan at gmail.com>
date:        Sat Aug 03 23:42:56 2013 +1000
summary:
  PJE's feedback on PEP 426 exports

files:
  pep-0426.txt                |  45 +++++++++++++++----------
  pep-0426/pydist-schema.json |  23 ++++++++----
  2 files changed, 42 insertions(+), 26 deletions(-)


diff --git a/pep-0426.txt b/pep-0426.txt
--- a/pep-0426.txt
+++ b/pep-0426.txt
@@ -1454,10 +1454,6 @@
 * ``requires_extra``: indicates the export will only work correctly if the
   additional dependencies named in the given extra are available.
 
-Note that installation of extras is not tracked directly: they are merely
-a convenient way to refer to a set of dependencies that will be checked for
-at runtime.
-
 .. note::
 
    I tried this as a mapping with subfields, and it made the examples below
@@ -1520,19 +1516,21 @@
 * ``prebuilt``: scripts created by the distribution's build process and
   installed directly to the configured scripts directory
 
-``wrap_console`` and ``wrap_gui`` are both mappings of relatively arbitrary
-script names to export specifiers. The script names must follow the rules
-for distribution names. The export specifiers must refer to
-either a package with a __main__ submodule (if no ``name`` subfield is
-given in the export specifier) or else to a callable inside the named
-module.
+``wrap_console`` and ``wrap_gui`` are both mappings of script names to
+export specifiers. The script names must follow the same naming rules as
+distribution names.
+
+The export specifiers for wrapper scripts must refer to either a package
+with a __main__ submodule (if no ``name`` subfield is given in the export
+specifier) or else to a callable inside the named module.
 
 Installation tools should generate appropriate wrappers as part of the
 installation process.
 
 .. note::
 
-   Still needs more detail on what "appropriate wrapper" means.
+   Still needs more detail on what "appropriate wrapper" means. For now,
+   refer to what setuptools and zc.buildout generate as wrapper scripts.
 
 ``prebuilt`` is a list of script paths, relative to the scripts directory in
 a wheel file or following installation. They are provided for informational
@@ -1553,17 +1551,22 @@
 Exports
 -------
 
-The ``exports`` mapping contains relatively arbitrary subfields, each
-defining an export group. Each export group is then a mapping of relatively
-arbitrary subfields to export specifiers.
+The ``exports`` field is a mapping containing dotted names as keys. Each
+key defines an export group. Export group names SHOULD correspond to
+module names in the distribution responsible that defines the meaning
+of the export group.
+
+Each export group is then a mapping of arbitrary non-empty string keys
+to export specifiers. The interpretation of the individual export keys is
+defined by the distribution that i
 
 Both export group names and export names must follow the rules for
 distribution identifiers. It is suggested that export groups be named
 after distributions to help avoid name conflicts.
 
-The meaning of exports within an export group is up to those defining the
-export group. One common use case is to advertise plugins for use by other
-software.
+The meaning of exports within an export group is up to the distribution
+that defines the export group. One common use case is to allow other
+distributions to advertise plugins for use by the defining distribution.
 
 
 Install hooks
@@ -1703,13 +1706,19 @@
 ==============================
 
 Extras are additional dependencies that enable an optional aspect
-of the distribution, generally corresponding to a ``try: import
+of the distribution, often corresponding to a ``try: import
 optional_dependency ...`` block in the code.  To support the use of the
 distribution with or without the optional dependencies they are listed
 separately from the distribution's core dependencies and must be requested
 explicitly, either in the dependency specifications of another distribution,
 or else when issuing a command to an installation tool.
 
+Note that installation of extras is not tracked directly by installation
+tools: extras are merely a convenient way to indicate a set of dependencies
+that is needed to provide some optional functionality of the distribution.
+If selective *installation* of components is desired, then multiple
+distributions must be defined rather than relying on the extras system.
+
 The names of extras MUST abide by the same restrictions as those for
 distribution names.
 
diff --git a/pep-0426/pydist-schema.json b/pep-0426/pydist-schema.json
--- a/pep-0426/pydist-schema.json
+++ b/pep-0426/pydist-schema.json
@@ -17,7 +17,7 @@
     "name": {
       "description": "The name of the distribution.",
       "type": "string",
-      "$ref": "#/definitions/valid_name"
+      "$ref": "#/definitions/distribution_name"
     },
     "version": {
       "description": "The distribution's public version identifier",
@@ -252,11 +252,11 @@
       "properties": {
         "wrap_console": {
           "type": "object",
-          "$ref": "#/definitions/export_map"
+          "$ref": "#/definitions/command_map"
         },
         "wrap_gui": {
           "type": "object",
-          "$ref": "#/definitions/export_map"
+          "$ref": "#/definitions/command_map"
         },
         "prebuilt": {
           "type": "array",
@@ -271,22 +271,29 @@
     "exports": {
       "type": "object",
       "patternProperties": {
-        "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$": {
+        "^[A-Za-z]([0-9A-Za-z_])*([.][A-Za-z]([0-9A-Za-z_])*)*$": {
           "type": "object",
-          "$ref": "#/definitions/export_map"
+          "patternProperties": {
+            ".": {
+              "type": "string",
+              "$ref": "#/definitions/export_specifier"
+            }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
     },
-    "export_map": {
+    "command_map": {
       "type": "object",
       "patternProperties": {
         "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$": {
           "type": "string",
           "$ref": "#/definitions/export_specifier"
-        }
       },
-    "valid_name": {
+      "additionalProperties": false
+      },
+    "distribution_name": {
         "type": "string",
         "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$"
     },

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


More information about the Python-checkins mailing list