[Python-checkins] r75597 - peps/trunk/pep-0391.txt

vinay.sajip python-checkins at python.org
Thu Oct 22 10:06:15 CEST 2009


Author: vinay.sajip
Date: Thu Oct 22 10:06:15 2009
New Revision: 75597

Log:
Incorporated comments by Jim Jewett.

Modified:
   peps/trunk/pep-0391.txt

Modified: peps/trunk/pep-0391.txt
==============================================================================
--- peps/trunk/pep-0391.txt	(original)
+++ peps/trunk/pep-0391.txt	Thu Oct 22 10:06:15 2009
@@ -92,24 +92,13 @@
 
 The logging.config module will have the following additions:
 
-* A class, called ``DictConfigurator``, whose constructor is passed
-  the dictionary used for configuration, and which has a
-  ``configure()`` method.
-
-* A callable, called ``dictConfigClass``, which will (by default) be
-  set to ``DictConfigurator``.  This is provided so that if desired,
-  ``DictConfigurator`` can be replaced with a suitable user-defined
-  implementation.
-
 * A function, called ``dictConfig()``, which takes a single argument
-  - the dictionary holding the configuration.  This function will
-  call ``dictConfigClass`` passing the specified dictionary, and then
-  call the ``configure()`` method on the returned object to actually
-  put the configuration into effect::
-
-      def dictConfig(config):
-          dictConfigClass(config).configure()
+  - the dictionary holding the configuration. Nothing will be
+  returned, though exceptions will be raised if there are errors
+  while processing the dictionary.
 
+It will be possible to customize this API - see the section on API
+customization.
 
 Dictionary Schema - Overview
 ----------------------------
@@ -333,6 +322,17 @@
 using the corresponding integer value, falling back to the string
 value if needed.
 
+Given a string ``int://handlers.myhandler.mykey.123``, this will
+resolve to ``config_dict['handlers']['myhandler']['mykey']['123']``.
+If the string is specified as ``int://handlers.myhandler.mykey[123]``,
+the system will attempt to retrieve the value from
+``config_dict['handlers']['myhandler']['mykey'][123]``, ad fall back
+to ``config_dict['handlers']['myhandler']['mykey']['123']`` if that
+fails.
+
+Note: the ``ext`` and ``int`` prefixes are provisional.  If better
+alternatives are suggested during the PEP review process, they will be
+used.
 
 Dictionary Schema - Detail
 --------------------------
@@ -520,6 +520,49 @@
 ``level`` and ``propagate`` settings in the ``loggers`` and ``root``
 entries.
 
+It's certainly possible to provide incremental configuration by other
+means, for example making ``dictConfig()`` take an ``incremental``
+keyword argument which defaults to ``False``. The reason for
+suggesting that a flag in the configuration dict be used is that it
+allows for configurations to be sent over the wire as pickled dicts
+to a socket listener. Thus, the logging verbosity of a long-running
+application can be altered over time with no need to stop and
+restart the application.
+
+Note: Feedback on incremental configuration needs based on your
+practical experience will be particularly welcome.
+
+
+API Customization
+=================
+
+The bare-bones ``dictConfig()`` API will not be sufficient for all
+use cases.  Provision for customization of the API will be made by
+providing the following:
+
+* A class, called ``DictConfigurator``, whose constructor is passed
+  the dictionary used for configuration, and which has a
+  ``configure()`` method.
+
+* A callable, called ``dictConfigClass``, which will (by default) be
+  set to ``DictConfigurator``.  This is provided so that if desired,
+  ``DictConfigurator`` can be replaced with a suitable user-defined
+  implementation.
+
+The ``dictConfig()`` function will call ``dictConfigClass`` passing
+the specified dictionary, and then call the ``configure()`` method on
+the returned object to actually put the configuration into effect::
+
+      def dictConfig(config):
+          dictConfigClass(config).configure()
+
+This should cater to all customization needs. For example, a subclass
+of ``DictConfigurator`` could call ``DictConfigurator.__init__()`` in
+its own ``__init__()``, then set up custom prefixes which would be
+usable in the subsequent ``configure() call``. The ``dictConfigClass``
+would be bound to the subclass, and then ``dictConfig()`` could be
+called exactly as in the default, uncustomized state.
+
 
 Configuration Errors
 ====================
@@ -540,6 +583,7 @@
 
 * Inability to resolve to an internal or external object
 
+
 References
 ==========
 


More information about the Python-checkins mailing list