| 
									
										
										
										
											2023-12-27 09:35:15 +00:00
										 |  |  | # Copyright 2001-2023 by Vinay Sajip. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # Permission to use, copy, modify, and distribute this software and its | 
					
						
							|  |  |  | # documentation for any purpose and without fee is hereby granted, | 
					
						
							|  |  |  | # provided that the above copyright notice appear in all copies and that | 
					
						
							|  |  |  | # both that copyright notice and this permission notice appear in | 
					
						
							|  |  |  | # supporting documentation, and that the name of Vinay Sajip | 
					
						
							|  |  |  | # not be used in advertising or publicity pertaining to distribution | 
					
						
							|  |  |  | # of the software without specific, written prior permission. | 
					
						
							|  |  |  | # VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | 
					
						
							|  |  |  | # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL | 
					
						
							|  |  |  | # VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | 
					
						
							|  |  |  | # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | 
					
						
							|  |  |  | # IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | 
					
						
							|  |  |  | # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2004-02-28 16:07:46 +00:00
										 |  |  | Configuration functions for the logging package for Python. The core package | 
					
						
							|  |  |  | is based on PEP 282 and comments thereto in comp.lang.python, and influenced | 
					
						
							|  |  |  | by Apache's log4j system. | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  | Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | To use, simply 'import logging' and log away! | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 13:03:17 +00:00
										 |  |  | import errno | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  | import functools | 
					
						
							| 
									
										
										
										
											2011-11-07 19:43:05 +01:00
										 |  |  | import io | 
					
						
							| 
									
										
										
										
											2014-03-20 13:03:17 +00:00
										 |  |  | import logging | 
					
						
							|  |  |  | import logging.handlers | 
					
						
							| 
									
										
										
										
											2023-05-18 09:50:47 +05:30
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  | import queue | 
					
						
							| 
									
										
										
										
											2014-03-20 13:03:17 +00:00
										 |  |  | import re | 
					
						
							|  |  |  | import struct | 
					
						
							| 
									
										
										
										
											2017-09-07 18:56:24 +02:00
										 |  |  | import threading | 
					
						
							| 
									
										
										
										
											2014-03-20 13:03:17 +00:00
										 |  |  | import traceback | 
					
						
							| 
									
										
										
										
											2005-02-18 11:54:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-12 02:31:37 +00:00
										 |  |  | from socketserver import ThreadingTCPServer, StreamRequestHandler | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEFAULT_LOGGING_CONFIG_PORT = 9030 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 13:03:17 +00:00
										 |  |  | RESET_ERROR = errno.ECONNRESET | 
					
						
							| 
									
										
										
										
											2004-02-20 13:16:36 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | # | 
					
						
							|  |  |  | #   The following code implements a socket listener for on-the-fly | 
					
						
							|  |  |  | #   reconfiguration of logging. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #   _listener holds the server object doing the listening | 
					
						
							|  |  |  | _listener = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-13 18:17:03 +09:00
										 |  |  | def fileConfig(fname, defaults=None, disable_existing_loggers=True, encoding=None): | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Read the logging configuration from a ConfigParser-format file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This can be called several times from an application, allowing an end user | 
					
						
							|  |  |  |     the ability to select from various pre-canned configurations (if the | 
					
						
							|  |  |  |     developer provides a mechanism to present the choices and load the chosen | 
					
						
							|  |  |  |     configuration). | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2008-05-14 22:59:42 +00:00
										 |  |  |     import configparser | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 09:50:47 +05:30
										 |  |  |     if isinstance(fname, str): | 
					
						
							|  |  |  |         if not os.path.exists(fname): | 
					
						
							|  |  |  |             raise FileNotFoundError(f"{fname} doesn't exist") | 
					
						
							|  |  |  |         elif not os.path.getsize(fname): | 
					
						
							| 
									
										
										
										
											2023-05-21 03:56:49 +05:30
										 |  |  |             raise RuntimeError(f'{fname} is an empty file') | 
					
						
							| 
									
										
										
										
											2023-05-18 09:50:47 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-09 09:06:03 +01:00
										 |  |  |     if isinstance(fname, configparser.RawConfigParser): | 
					
						
							|  |  |  |         cp = fname | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2023-05-18 09:50:47 +05:30
										 |  |  |         try: | 
					
						
							|  |  |  |             cp = configparser.ConfigParser(defaults) | 
					
						
							|  |  |  |             if hasattr(fname, 'readline'): | 
					
						
							|  |  |  |                 cp.read_file(fname) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 encoding = io.text_encoding(encoding) | 
					
						
							|  |  |  |                 cp.read(fname, encoding=encoding) | 
					
						
							|  |  |  |         except configparser.ParsingError as e: | 
					
						
							| 
									
										
										
										
											2023-05-21 03:56:49 +05:30
										 |  |  |             raise RuntimeError(f'{fname} is invalid: {e}') | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     formatters = _create_formatters(cp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # critical section | 
					
						
							| 
									
										
										
										
											2023-09-27 17:26:41 +01:00
										 |  |  |     with logging._lock: | 
					
						
							| 
									
										
										
										
											2018-07-02 14:27:46 +05:30
										 |  |  |         _clearExistingHandlers() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         # Handlers add themselves to logging._handlers | 
					
						
							|  |  |  |         handlers = _install_handlers(cp, formatters) | 
					
						
							| 
									
										
											  
											
												Merged revisions 64365,64370,64406,64408-64409,64412,64416-64417,64420-64421,64425-64428 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r64365 | raymond.hettinger | 2008-06-17 19:56:57 -0500 (Tue, 17 Jun 2008) | 1 line
  Fix double decref.
........
  r64370 | mark.dickinson | 2008-06-18 04:20:17 -0500 (Wed, 18 Jun 2008) | 2 lines
  Typo fix
........
  r64406 | andrew.kuchling | 2008-06-19 09:02:30 -0500 (Thu, 19 Jun 2008) | 1 line
  Only include update_lines_cols() function when it's actually going to be used
........
  r64408 | amaury.forgeotdarc | 2008-06-19 14:57:39 -0500 (Thu, 19 Jun 2008) | 2 lines
  test_macos can be skipped on non-mac platforms.
........
  r64409 | andrew.kuchling | 2008-06-19 15:33:31 -0500 (Thu, 19 Jun 2008) | 1 line
  Put threading in front of thread
........
  r64412 | amaury.forgeotdarc | 2008-06-19 16:17:12 -0500 (Thu, 19 Jun 2008) | 3 lines
  In test_site, correctly escape backslashes in path names.
  This allows the test to pass when the username begins with a lowercase 't'...
........
  r64416 | vinay.sajip | 2008-06-19 17:40:17 -0500 (Thu, 19 Jun 2008) | 2 lines
  Bug #3136: fileConfig()'s disabling of old loggers is now conditional via an optional disable_existing_loggers parameter, but the default value is such that the old behaviour is preserved.
  Thanks to Leandro Lucarella for the patch.
........
  r64417 | vinay.sajip | 2008-06-19 17:41:08 -0500 (Thu, 19 Jun 2008) | 1 line
  Updated with fix for #3136.
........
  r64420 | andrew.kuchling | 2008-06-19 21:05:57 -0500 (Thu, 19 Jun 2008) | 1 line
  Various items
........
  r64421 | andrew.kuchling | 2008-06-19 21:11:42 -0500 (Thu, 19 Jun 2008) | 1 line
  Fix comment typos
........
  r64425 | andrew.kuchling | 2008-06-20 06:39:54 -0500 (Fri, 20 Jun 2008) | 1 line
  Various items
........
  r64426 | mark.dickinson | 2008-06-20 09:53:43 -0500 (Fri, 20 Jun 2008) | 4 lines
  Issue #3004:  Minor fix to slice.indices().  slice(-10).indices(9) now
  returns (0, 0, 1) instead of (0, -1, 1), and slice(None, 10, -1).indices(10)
  returns (9, 9, -1) instead of (9, 10, -1).
........
  r64427 | mark.dickinson | 2008-06-20 10:17:41 -0500 (Fri, 20 Jun 2008) | 2 lines
  Fix outdated count of the number of new math module functions.
........
  r64428 | mark.dickinson | 2008-06-20 10:26:19 -0500 (Fri, 20 Jun 2008) | 2 lines
  Fix another typo in math_sum comment
........
											
										 
											2008-07-02 16:11:42 +00:00
										 |  |  |         _install_loggers(cp, handlers, disable_existing_loggers) | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-20 18:28:03 +00:00
										 |  |  | def _resolve(name): | 
					
						
							|  |  |  |     """Resolve a dotted name to a global object.""" | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  |     name = name.split('.') | 
					
						
							| 
									
										
										
										
											2006-01-20 18:28:03 +00:00
										 |  |  |     used = name.pop(0) | 
					
						
							|  |  |  |     found = __import__(used) | 
					
						
							|  |  |  |     for n in name: | 
					
						
							|  |  |  |         used = used + '.' + n | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             found = getattr(found, n) | 
					
						
							|  |  |  |         except AttributeError: | 
					
						
							|  |  |  |             __import__(used) | 
					
						
							|  |  |  |             found = getattr(found, n) | 
					
						
							|  |  |  |     return found | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  | def _strip_spaces(alist): | 
					
						
							| 
									
										
										
										
											2017-11-15 14:58:11 +05:30
										 |  |  |     return map(str.strip, alist) | 
					
						
							| 
									
										
										
										
											2006-01-20 18:28:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | def _create_formatters(cp): | 
					
						
							|  |  |  |     """Create and return formatters""" | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |     flist = cp["formatters"]["keys"] | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     if not len(flist): | 
					
						
							|  |  |  |         return {} | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  |     flist = flist.split(",") | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |     flist = _strip_spaces(flist) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     formatters = {} | 
					
						
							|  |  |  |     for form in flist: | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |         sectname = "formatter_%s" % form | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         fs = cp.get(sectname, "format", raw=True, fallback=None) | 
					
						
							|  |  |  |         dfs = cp.get(sectname, "datefmt", raw=True, fallback=None) | 
					
						
							| 
									
										
										
										
											2014-04-15 14:24:53 +01:00
										 |  |  |         stl = cp.get(sectname, "style", raw=True, fallback='%') | 
					
						
							| 
									
										
										
										
											2023-04-12 08:35:56 +01:00
										 |  |  |         defaults = cp.get(sectname, "defaults", raw=True, fallback=None) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-01-20 18:28:03 +00:00
										 |  |  |         c = logging.Formatter | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         class_name = cp[sectname].get("class") | 
					
						
							|  |  |  |         if class_name: | 
					
						
							|  |  |  |             c = _resolve(class_name) | 
					
						
							| 
									
										
										
										
											2023-04-12 08:35:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if defaults is not None: | 
					
						
							|  |  |  |             defaults = eval(defaults, vars(logging)) | 
					
						
							|  |  |  |             f = c(fs, dfs, stl, defaults=defaults) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             f = c(fs, dfs, stl) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         formatters[form] = f | 
					
						
							|  |  |  |     return formatters | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _install_handlers(cp, formatters): | 
					
						
							|  |  |  |     """Install and return handlers""" | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |     hlist = cp["handlers"]["keys"] | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     if not len(hlist): | 
					
						
							|  |  |  |         return {} | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  |     hlist = hlist.split(",") | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |     hlist = _strip_spaces(hlist) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     handlers = {} | 
					
						
							|  |  |  |     fixups = [] #for inter-handler references | 
					
						
							|  |  |  |     for hand in hlist: | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         section = cp["handler_%s" % hand] | 
					
						
							|  |  |  |         klass = section["class"] | 
					
						
							|  |  |  |         fmt = section.get("formatter", "") | 
					
						
							| 
									
										
											  
											
												Merged revisions 65012,65035,65037-65040,65048,65057,65077,65091-65095,65097-65099,65127-65128,65131,65133-65136,65139,65149-65151,65155,65158-65159,65176-65178,65183-65184,65187-65190,65192,65194 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r65012 | jesse.noller | 2008-07-16 15:24:06 +0200 (Wed, 16 Jul 2008) | 2 lines
  Apply patch for issue 3090: ARCHFLAGS parsing incorrect
........
  r65035 | georg.brandl | 2008-07-16 23:19:28 +0200 (Wed, 16 Jul 2008) | 2 lines
  #3045: fix pydoc behavior for TEMP path with spaces.
........
  r65037 | georg.brandl | 2008-07-16 23:31:41 +0200 (Wed, 16 Jul 2008) | 2 lines
  #1608818: errno can get set by every call to readdir().
........
  r65038 | georg.brandl | 2008-07-17 00:04:20 +0200 (Thu, 17 Jul 2008) | 2 lines
  #3305: self->stream can be NULL.
........
  r65039 | georg.brandl | 2008-07-17 00:09:17 +0200 (Thu, 17 Jul 2008) | 2 lines
  #3345: fix docstring.
........
  r65040 | georg.brandl | 2008-07-17 00:33:18 +0200 (Thu, 17 Jul 2008) | 2 lines
  #3312: fix two sqlite3 crashes.
........
  r65048 | georg.brandl | 2008-07-17 01:35:54 +0200 (Thu, 17 Jul 2008) | 2 lines
  #3388: add a paragraph about using "with" for file objects.
........
  r65057 | gregory.p.smith | 2008-07-17 05:13:05 +0200 (Thu, 17 Jul 2008) | 2 lines
  news note for r63052
........
  r65077 | jesse.noller | 2008-07-17 23:01:05 +0200 (Thu, 17 Jul 2008) | 3 lines
  Fix issue 3395, update _debugInfo to be _debug_info
........
  r65091 | ronald.oussoren | 2008-07-18 07:48:03 +0200 (Fri, 18 Jul 2008) | 2 lines
  Last bit of a fix for issue3381 (addon for my patch in r65061)
........
  r65092 | vinay.sajip | 2008-07-18 10:59:06 +0200 (Fri, 18 Jul 2008) | 1 line
  Issue #3389: Allow resolving dotted names for handlers in logging configuration files. Thanks to Philip Jenvey for the patch.
........
  r65093 | vinay.sajip | 2008-07-18 11:00:00 +0200 (Fri, 18 Jul 2008) | 1 line
  Issue #3389: Allow resolving dotted names for handlers in logging configuration files. Thanks to Philip Jenvey for the patch.
........
  r65094 | vinay.sajip | 2008-07-18 11:00:35 +0200 (Fri, 18 Jul 2008) | 1 line
  Issue #3389: Allow resolving dotted names for handlers in logging configuration files. Thanks to Philip Jenvey for the patch.
........
  r65095 | vinay.sajip | 2008-07-18 11:01:10 +0200 (Fri, 18 Jul 2008) | 1 line
  Issue #3389: Allow resolving dotted names for handlers in logging configuration files. Thanks to Philip Jenvey for the patch.
........
  r65097 | georg.brandl | 2008-07-18 12:20:59 +0200 (Fri, 18 Jul 2008) | 2 lines
  Remove duplicate entry in __all__.
........
  r65098 | georg.brandl | 2008-07-18 12:29:30 +0200 (Fri, 18 Jul 2008) | 2 lines
  Correct attribute name.
........
  r65099 | georg.brandl | 2008-07-18 13:15:06 +0200 (Fri, 18 Jul 2008) | 3 lines
  Document the different meaning of precision for {:f} and {:g}.
  Also document how inf and nan are formatted. #3404.
........
  r65127 | raymond.hettinger | 2008-07-19 02:42:03 +0200 (Sat, 19 Jul 2008) | 1 line
  Improve accuracy of gamma test function
........
  r65128 | raymond.hettinger | 2008-07-19 02:43:00 +0200 (Sat, 19 Jul 2008) | 1 line
  Add recipe to the itertools docs.
........
  r65131 | georg.brandl | 2008-07-19 12:08:55 +0200 (Sat, 19 Jul 2008) | 2 lines
  #3378: in case of no memory, don't leak even more memory. :)
........
  r65133 | georg.brandl | 2008-07-19 14:39:10 +0200 (Sat, 19 Jul 2008) | 3 lines
  #3302: fix segfaults when passing None for arguments that can't
  be NULL for the C functions.
........
  r65134 | georg.brandl | 2008-07-19 14:46:12 +0200 (Sat, 19 Jul 2008) | 2 lines
  #3303: fix crash with invalid Py_DECREF in strcoll().
........
  r65135 | georg.brandl | 2008-07-19 15:00:22 +0200 (Sat, 19 Jul 2008) | 3 lines
  #3319: don't raise ZeroDivisionError if number of rounds is so
  low that benchtime is zero.
........
  r65136 | georg.brandl | 2008-07-19 15:09:42 +0200 (Sat, 19 Jul 2008) | 3 lines
  #3323: mention that if inheriting from a class without __slots__,
  the subclass will have a __dict__ available too.
........
  r65139 | georg.brandl | 2008-07-19 15:48:44 +0200 (Sat, 19 Jul 2008) | 2 lines
  Add ordering info for findall and finditer.
........
  r65149 | raymond.hettinger | 2008-07-20 01:21:57 +0200 (Sun, 20 Jul 2008) | 1 line
  Fix compress() recipe in docs to use itertools.
........
  r65150 | raymond.hettinger | 2008-07-20 01:58:47 +0200 (Sun, 20 Jul 2008) | 1 line
  Clean-up itertools docs and recipes.
........
  r65151 | gregory.p.smith | 2008-07-20 02:22:08 +0200 (Sun, 20 Jul 2008) | 9 lines
  fix issue3120 - don't truncate handles on 64-bit Windows.
  This is still messy, realistically PC/_subprocess.c should never cast pointers
  to python numbers and back at all.
  I don't have a 64-bit windows build environment because microsoft apparently
  thinks that should cost money.  Time to watch the buildbots.  It builds and
  passes tests on 32-bit windows.
........
  r65155 | georg.brandl | 2008-07-20 13:50:29 +0200 (Sun, 20 Jul 2008) | 2 lines
  #926501: add info where to put the docstring.
........
  r65158 | neal.norwitz | 2008-07-20 21:35:23 +0200 (Sun, 20 Jul 2008) | 1 line
  Fix a couple of names in error messages that were wrong
........
  r65159 | neal.norwitz | 2008-07-20 22:39:36 +0200 (Sun, 20 Jul 2008) | 1 line
  Fix misspeeld method name (negative)
........
  r65176 | amaury.forgeotdarc | 2008-07-21 23:36:24 +0200 (Mon, 21 Jul 2008) | 4 lines
  Increment version number in NEWS file, and move items that were added after 2.6b2.
  (I thought there was a script to automate this kind of updates)
........
  r65177 | amaury.forgeotdarc | 2008-07-22 00:00:38 +0200 (Tue, 22 Jul 2008) | 5 lines
  Issue2378: pdb would delete free variables when stepping into a class statement.
  The problem was introduced by r53954, the correction is to restore the symmetry between
  PyFrame_FastToLocals and PyFrame_LocalsToFast
........
  r65178 | benjamin.peterson | 2008-07-22 00:05:34 +0200 (Tue, 22 Jul 2008) | 1 line
  don't use assert statement
........
  r65183 | ronald.oussoren | 2008-07-22 09:06:00 +0200 (Tue, 22 Jul 2008) | 2 lines
  Fix buglet in fix for issue3381
........
  r65184 | ronald.oussoren | 2008-07-22 09:06:33 +0200 (Tue, 22 Jul 2008) | 2 lines
  Fix build issue on OSX 10.4, somehow this wasn't committed before.
........
  r65187 | raymond.hettinger | 2008-07-22 20:54:02 +0200 (Tue, 22 Jul 2008) | 1 line
  Remove out-of-date section on Exact/Inexact.
........
  r65188 | raymond.hettinger | 2008-07-22 21:00:47 +0200 (Tue, 22 Jul 2008) | 1 line
  Tuples now have both count() and index().
........
  r65189 | raymond.hettinger | 2008-07-22 21:03:05 +0200 (Tue, 22 Jul 2008) | 1 line
  Fix credits for math.sum()
........
  r65190 | raymond.hettinger | 2008-07-22 21:18:50 +0200 (Tue, 22 Jul 2008) | 1 line
  One more attribution.
........
  r65192 | benjamin.peterson | 2008-07-23 01:44:37 +0200 (Wed, 23 Jul 2008) | 1 line
  remove unneeded import
........
  r65194 | benjamin.peterson | 2008-07-23 15:25:06 +0200 (Wed, 23 Jul 2008) | 1 line
  use isinstance
........
											
										 
											2008-07-23 16:10:53 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             klass = eval(klass, vars(logging)) | 
					
						
							|  |  |  |         except (AttributeError, NameError): | 
					
						
							|  |  |  |             klass = _resolve(klass) | 
					
						
							| 
									
										
										
										
											2017-08-02 15:44:28 -05:00
										 |  |  |         args = section.get("args", '()') | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         args = eval(args, vars(logging)) | 
					
						
							| 
									
										
										
										
											2017-08-02 15:44:28 -05:00
										 |  |  |         kwargs = section.get("kwargs", '{}') | 
					
						
							|  |  |  |         kwargs = eval(kwargs, vars(logging)) | 
					
						
							|  |  |  |         h = klass(*args, **kwargs) | 
					
						
							| 
									
										
										
										
											2019-10-31 09:06:25 +01:00
										 |  |  |         h.name = hand | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         if "level" in section: | 
					
						
							|  |  |  |             level = section["level"] | 
					
						
							| 
									
										
										
										
											2013-05-25 03:20:34 -07:00
										 |  |  |             h.setLevel(level) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         if len(fmt): | 
					
						
							|  |  |  |             h.setFormatter(formatters[fmt]) | 
					
						
							| 
									
										
											  
											
												Merged revisions 64475,64544-64545,64550,64557-64558,64565,64570,64577,64582-64583,64585,64590,64592-64593,64625,64630,64638,64647,64655-64656,64663-64664 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r64475 | raymond.hettinger | 2008-06-22 22:29:28 -0500 (Sun, 22 Jun 2008) | 1 line
  Issue 3161: Missing import and test.
........
  r64544 | georg.brandl | 2008-06-26 16:12:55 -0500 (Thu, 26 Jun 2008) | 2 lines
  Use newer versions of externals.
........
  r64545 | benjamin.peterson | 2008-06-26 16:23:30 -0500 (Thu, 26 Jun 2008) | 1 line
  add a htmlview directive
........
  r64550 | brett.cannon | 2008-06-26 19:32:16 -0500 (Thu, 26 Jun 2008) | 2 lines
  Ignore .pyc and .pyo files.
........
  r64557 | mark.dickinson | 2008-06-27 05:11:52 -0500 (Fri, 27 Jun 2008) | 3 lines
  Remove trailing 'L's from numerator and denominator in the
  repr() of a Fraction instance.
........
  r64558 | mark.dickinson | 2008-06-27 06:03:21 -0500 (Fri, 27 Jun 2008) | 2 lines
  Add Jean Brouwers for his work on math.sum
........
  r64565 | raymond.hettinger | 2008-06-27 16:34:24 -0500 (Fri, 27 Jun 2008) | 1 line
  Fix whitespace in example code.
........
  r64570 | hyeshik.chang | 2008-06-27 20:04:31 -0500 (Fri, 27 Jun 2008) | 8 lines
  Give information for compililation of _multiprocessing.SemLock on FreeBSD:
  FreeBSD's P1003.1b semaphore support is highly experimental and
  it's disabled by default.  Even if a user loads the experimental
  kernel module manually, _multiprocessing doesn't work correctly due
  to several known incompatibilities around sem_unlink and sem_getvalue,
  yet.
........
  r64577 | raymond.hettinger | 2008-06-28 17:16:53 -0500 (Sat, 28 Jun 2008) | 1 line
  Issue 3230:  Do not the set specific size macro.
........
  r64582 | benjamin.peterson | 2008-06-28 18:06:05 -0500 (Sat, 28 Jun 2008) | 2 lines
  convert test_audioop to unittest. Thanks to Giampaolo Rodola.
........
  r64583 | benjamin.peterson | 2008-06-28 18:06:49 -0500 (Sat, 28 Jun 2008) | 1 line
  rewrap
........
  r64585 | benjamin.peterson | 2008-06-28 18:35:31 -0500 (Sat, 28 Jun 2008) | 1 line
  fix typo
........
  r64590 | benjamin.peterson | 2008-06-29 08:43:07 -0500 (Sun, 29 Jun 2008) | 1 line
  reinstate the ending backtick. thanks Nick :)
........
  r64592 | vinay.sajip | 2008-06-29 16:25:28 -0500 (Sun, 29 Jun 2008) | 2 lines
  Removed out-of-date comment in _install_handlers and
  used issubclass in place of equality comparison of classes.
........
  r64593 | vinay.sajip | 2008-06-29 16:27:15 -0500 (Sun, 29 Jun 2008) | 1 line
  Updated to reflect change in logging.config to remove out-of-date comment in _install_handlers and the use of issubclass in place of equality comparison of classes.
........
  r64625 | georg.brandl | 2008-07-01 14:59:00 -0500 (Tue, 01 Jul 2008) | 2 lines
  Add a link to PEP 324.
........
  r64630 | georg.brandl | 2008-07-01 15:18:10 -0500 (Tue, 01 Jul 2008) | 2 lines
  #3216: fix Execute's parameter description.
........
  r64638 | georg.brandl | 2008-07-01 15:50:02 -0500 (Tue, 01 Jul 2008) | 2 lines
  #1410739: add a footnote about "is" and "unusual" behavior.
........
  r64647 | benjamin.peterson | 2008-07-01 18:33:06 -0500 (Tue, 01 Jul 2008) | 1 line
  add ABC to the glossary
........
  r64655 | mark.dickinson | 2008-07-02 04:37:01 -0500 (Wed, 02 Jul 2008) | 7 lines
  Replace occurrences of '\d' with '[0-9]' in Decimal regex, to make sure
  that the behaviour of Decimal doesn't change if/when re.UNICODE becomes
  assumed in Python 3.0.
  Also add a check that alternative Unicode digits (e.g. u'\N{FULLWIDTH
  DIGIT ONE}') are *not* accepted in a numeric string.
........
  r64656 | nick.coghlan | 2008-07-02 08:09:19 -0500 (Wed, 02 Jul 2008) | 1 line
  Issue 3190: pydoc now hides module __package__ attributes
........
  r64663 | jesse.noller | 2008-07-02 11:44:09 -0500 (Wed, 02 Jul 2008) | 1 line
  Reenable the manager tests with Amaury's threading fix
........
  r64664 | facundo.batista | 2008-07-02 11:52:55 -0500 (Wed, 02 Jul 2008) | 4 lines
  Issue #449227: Now with the rlcompleter module, callable objects are
  added a '(' when completed.
........
											
										 
											2008-07-02 20:22:54 +00:00
										 |  |  |         if issubclass(klass, logging.handlers.MemoryHandler): | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |             target = section.get("target", "") | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |             if len(target): #the target handler may not be loaded yet, so keep for later... | 
					
						
							|  |  |  |                 fixups.append((h, target)) | 
					
						
							|  |  |  |         handlers[hand] = h | 
					
						
							|  |  |  |     #now all handlers are loaded, fixup inter-handler references... | 
					
						
							|  |  |  |     for h, t in fixups: | 
					
						
							|  |  |  |         h.setTarget(handlers[t]) | 
					
						
							|  |  |  |     return handlers | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-30 19:02:14 +00:00
										 |  |  | def _handle_existing_loggers(existing, child_loggers, disable_existing): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     When (re)configuring logging, handle loggers which were in the previous | 
					
						
							|  |  |  |     configuration but are not in the new configuration. There's no point | 
					
						
							|  |  |  |     deleting them as other threads may continue to hold references to them; | 
					
						
							|  |  |  |     and by disabling them, you stop them doing any logging. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     However, don't disable children of named loggers, as that's probably not | 
					
						
							|  |  |  |     what was intended by the user. Also, allow existing loggers to NOT be | 
					
						
							|  |  |  |     disabled if disable_existing is false. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     root = logging.root | 
					
						
							|  |  |  |     for log in existing: | 
					
						
							|  |  |  |         logger = root.manager.loggerDict[log] | 
					
						
							|  |  |  |         if log in child_loggers: | 
					
						
							| 
									
										
										
										
											2019-09-22 03:51:51 +01:00
										 |  |  |             if not isinstance(logger, logging.PlaceHolder): | 
					
						
							|  |  |  |                 logger.setLevel(logging.NOTSET) | 
					
						
							|  |  |  |                 logger.handlers = [] | 
					
						
							|  |  |  |                 logger.propagate = True | 
					
						
							| 
									
										
										
										
											2013-03-23 11:18:45 +00:00
										 |  |  |         else: | 
					
						
							|  |  |  |             logger.disabled = disable_existing | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-30 19:02:14 +00:00
										 |  |  | def _install_loggers(cp, handlers, disable_existing): | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     """Create and install loggers""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # configure the root first | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |     llist = cp["loggers"]["keys"] | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  |     llist = llist.split(",") | 
					
						
							| 
									
										
										
										
											2017-11-15 14:58:11 +05:30
										 |  |  |     llist = list(_strip_spaces(llist)) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     llist.remove("root") | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |     section = cp["logger_root"] | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     root = logging.root | 
					
						
							|  |  |  |     log = root | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |     if "level" in section: | 
					
						
							|  |  |  |         level = section["level"] | 
					
						
							| 
									
										
										
										
											2013-05-25 03:20:34 -07:00
										 |  |  |         log.setLevel(level) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     for h in root.handlers[:]: | 
					
						
							|  |  |  |         root.removeHandler(h) | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |     hlist = section["handlers"] | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     if len(hlist): | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  |         hlist = hlist.split(",") | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |         hlist = _strip_spaces(hlist) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         for hand in hlist: | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |             log.addHandler(handlers[hand]) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     #and now the others... | 
					
						
							|  |  |  |     #we don't want to lose the existing loggers, | 
					
						
							|  |  |  |     #since other threads may have pointers to them. | 
					
						
							|  |  |  |     #existing is set to contain all existing loggers, | 
					
						
							|  |  |  |     #and as we go through the new configuration we | 
					
						
							|  |  |  |     #remove any which are configured. At the end, | 
					
						
							|  |  |  |     #what's left in existing is the set of loggers | 
					
						
							|  |  |  |     #which were in the previous configuration but | 
					
						
							|  |  |  |     #which are not in the new configuration. | 
					
						
							| 
									
										
										
										
											2007-02-12 00:07:01 +00:00
										 |  |  |     existing = list(root.manager.loggerDict.keys()) | 
					
						
							| 
									
										
										
										
											2007-11-12 01:32:03 +00:00
										 |  |  |     #The list needs to be sorted so that we can | 
					
						
							|  |  |  |     #avoid disabling child loggers of explicitly | 
					
						
							|  |  |  |     #named loggers. With a sorted list it is easier | 
					
						
							|  |  |  |     #to find the child loggers. | 
					
						
							| 
									
										
										
										
											2011-11-07 19:43:05 +01:00
										 |  |  |     existing.sort() | 
					
						
							| 
									
										
										
										
											2007-11-12 01:32:03 +00:00
										 |  |  |     #We'll keep the list of existing loggers | 
					
						
							|  |  |  |     #which are children of named loggers here... | 
					
						
							|  |  |  |     child_loggers = [] | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |     #now set up the new ones... | 
					
						
							|  |  |  |     for log in llist: | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         section = cp["logger_%s" % log] | 
					
						
							|  |  |  |         qn = section["qualname"] | 
					
						
							|  |  |  |         propagate = section.getint("propagate", fallback=1) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         logger = logging.getLogger(qn) | 
					
						
							|  |  |  |         if qn in existing: | 
					
						
							| 
									
										
										
										
											2011-03-07 17:49:33 +00:00
										 |  |  |             i = existing.index(qn) + 1 # start with the entry after qn | 
					
						
							| 
									
										
										
										
											2007-11-12 01:32:03 +00:00
										 |  |  |             prefixed = qn + "." | 
					
						
							|  |  |  |             pflen = len(prefixed) | 
					
						
							|  |  |  |             num_existing = len(existing) | 
					
						
							| 
									
										
										
										
											2011-03-07 17:49:33 +00:00
										 |  |  |             while i < num_existing: | 
					
						
							|  |  |  |                 if existing[i][:pflen] == prefixed: | 
					
						
							|  |  |  |                     child_loggers.append(existing[i]) | 
					
						
							|  |  |  |                 i += 1 | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |             existing.remove(qn) | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         if "level" in section: | 
					
						
							|  |  |  |             level = section["level"] | 
					
						
							| 
									
										
										
										
											2013-05-25 03:20:34 -07:00
										 |  |  |             logger.setLevel(level) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         for h in logger.handlers[:]: | 
					
						
							|  |  |  |             logger.removeHandler(h) | 
					
						
							|  |  |  |         logger.propagate = propagate | 
					
						
							|  |  |  |         logger.disabled = 0 | 
					
						
							| 
									
										
										
										
											2010-11-10 18:57:39 +00:00
										 |  |  |         hlist = section["handlers"] | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |         if len(hlist): | 
					
						
							| 
									
										
										
										
											2007-04-17 08:48:32 +00:00
										 |  |  |             hlist = hlist.split(",") | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |             hlist = _strip_spaces(hlist) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  |             for hand in hlist: | 
					
						
							| 
									
										
											  
											
												Merged revisions 66141,66145,66150,66180,66211,66217,66219,66226,66231,66244,66246,66249-66250,66264,66268,66272,66294,66306 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r66141 | gregory.p.smith | 2008-09-02 00:29:51 -0500 (Tue, 02 Sep 2008) | 3 lines
  Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.
........
  r66145 | marc-andre.lemburg | 2008-09-02 05:32:34 -0500 (Tue, 02 Sep 2008) | 5 lines
  Add quotes around the file name to avoid issues with spaces.
  Closes #3719.
........
  r66150 | marc-andre.lemburg | 2008-09-02 07:11:19 -0500 (Tue, 02 Sep 2008) | 3 lines
  Add news item for #3719.
........
  r66180 | vinay.sajip | 2008-09-03 04:20:05 -0500 (Wed, 03 Sep 2008) | 1 line
  Issue #3726: Allowed spaces in separators in logging configuration files.
........
  r66211 | vinay.sajip | 2008-09-04 02:31:21 -0500 (Thu, 04 Sep 2008) | 1 line
  Issue #3772: Fixed regression problem in StreamHandler.emit().
........
  r66217 | andrew.kuchling | 2008-09-04 08:26:24 -0500 (Thu, 04 Sep 2008) | 1 line
  #3671: various corrections and markup fixes noted by Kent Johnson
........
  r66219 | hirokazu.yamamoto | 2008-09-04 09:25:30 -0500 (Thu, 04 Sep 2008) | 1 line
  Added NEWS
........
  r66226 | benjamin.peterson | 2008-09-04 18:31:27 -0500 (Thu, 04 Sep 2008) | 1 line
  flesh out the documentation on using 2to3
........
  r66231 | andrew.kuchling | 2008-09-05 10:15:56 -0500 (Fri, 05 Sep 2008) | 1 line
  #3671: Typo fix
........
  r66244 | jesse.noller | 2008-09-05 20:20:11 -0500 (Fri, 05 Sep 2008) | 2 lines
  Fix typo in multiprocessing doc, cancel_join_thread was missing _thread
........
  r66246 | benjamin.peterson | 2008-09-05 22:00:00 -0500 (Fri, 05 Sep 2008) | 1 line
  actually tell the name of the flag to use
........
  r66249 | andrew.kuchling | 2008-09-06 07:50:05 -0500 (Sat, 06 Sep 2008) | 1 line
  Various corrections
........
  r66250 | andrew.kuchling | 2008-09-06 08:04:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #3040: include 'dest' argument in example; trim some trailing whitespace
........
  r66264 | benjamin.peterson | 2008-09-06 14:42:39 -0500 (Sat, 06 Sep 2008) | 1 line
  docs are pretty good about new-style classes these days
........
  r66268 | andrew.kuchling | 2008-09-06 15:28:01 -0500 (Sat, 06 Sep 2008) | 1 line
  #3669 from Robert Lehmann: simplify use of iterator in example
........
  r66272 | andrew.kuchling | 2008-09-06 16:26:02 -0500 (Sat, 06 Sep 2008) | 1 line
  #1317: describe the does_esmtp, ehlo_resp, esmtp_features, and helo_resp attributes
........
  r66294 | georg.brandl | 2008-09-07 12:00:17 -0500 (Sun, 07 Sep 2008) | 2 lines
  Add a new howto about Python and the web, by Marek Kubica.
........
  r66306 | mark.summerfield | 2008-09-08 09:45:37 -0500 (Mon, 08 Sep 2008) | 3 lines
  Added xrefs to each other.
........
											
										 
											2008-09-08 23:05:23 +00:00
										 |  |  |                 logger.addHandler(handlers[hand]) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     #Disable any old loggers. There's no point deleting | 
					
						
							|  |  |  |     #them as other threads may continue to hold references | 
					
						
							|  |  |  |     #and by disabling them, you stop them doing any logging. | 
					
						
							| 
									
										
										
										
											2007-11-12 01:32:03 +00:00
										 |  |  |     #However, don't disable children of named loggers, as that's | 
					
						
							|  |  |  |     #probably not what was intended by the user. | 
					
						
							| 
									
										
										
										
											2010-08-30 19:02:14 +00:00
										 |  |  |     #for log in existing: | 
					
						
							|  |  |  |     #    logger = root.manager.loggerDict[log] | 
					
						
							|  |  |  |     #    if log in child_loggers: | 
					
						
							|  |  |  |     #        logger.level = logging.NOTSET | 
					
						
							|  |  |  |     #        logger.handlers = [] | 
					
						
							|  |  |  |     #        logger.propagate = 1 | 
					
						
							|  |  |  |     #    elif disable_existing_loggers: | 
					
						
							|  |  |  |     #        logger.disabled = 1 | 
					
						
							|  |  |  |     _handle_existing_loggers(existing, child_loggers, disable_existing) | 
					
						
							| 
									
										
										
										
											2006-01-16 21:28:37 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 14:27:46 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | def _clearExistingHandlers(): | 
					
						
							|  |  |  |     """Clear and close existing handlers""" | 
					
						
							|  |  |  |     logging._handlers.clear() | 
					
						
							|  |  |  |     logging.shutdown(logging._handlerList[:]) | 
					
						
							|  |  |  |     del logging._handlerList[:] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def valid_ident(s): | 
					
						
							|  |  |  |     m = IDENTIFIER.match(s) | 
					
						
							|  |  |  |     if not m: | 
					
						
							|  |  |  |         raise ValueError('Not a valid Python identifier: %r' % s) | 
					
						
							|  |  |  |     return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  | class ConvertingMixin(object): | 
					
						
							|  |  |  |     """For ConvertingXXX's, this mixin class provides common functions""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def convert_with_key(self, key, value, replace=True): | 
					
						
							|  |  |  |         result = self.configurator.convert(value) | 
					
						
							|  |  |  |         #If the converted value is different, save for next time | 
					
						
							|  |  |  |         if value is not result: | 
					
						
							|  |  |  |             if replace: | 
					
						
							|  |  |  |                 self[key] = result | 
					
						
							|  |  |  |             if type(result) in (ConvertingDict, ConvertingList, | 
					
						
							|  |  |  |                                ConvertingTuple): | 
					
						
							|  |  |  |                 result.parent = self | 
					
						
							|  |  |  |                 result.key = key | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def convert(self, value): | 
					
						
							|  |  |  |         result = self.configurator.convert(value) | 
					
						
							|  |  |  |         if value is not result: | 
					
						
							|  |  |  |             if type(result) in (ConvertingDict, ConvertingList, | 
					
						
							|  |  |  |                                ConvertingTuple): | 
					
						
							|  |  |  |                 result.parent = self | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | # The ConvertingXXX classes are wrappers around standard Python containers, | 
					
						
							|  |  |  | # and they serve to convert any suitable values in the container. The | 
					
						
							|  |  |  | # conversion converts base dicts, lists and tuples to their wrapped | 
					
						
							|  |  |  | # equivalents, whereas strings which match a conversion format are converted | 
					
						
							|  |  |  | # appropriately. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Each wrapper should have a configurator attribute holding the actual | 
					
						
							|  |  |  | # configurator to use for conversion. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  | class ConvertingDict(dict, ConvertingMixin): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |     """A converting dictionary wrapper.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __getitem__(self, key): | 
					
						
							|  |  |  |         value = dict.__getitem__(self, key) | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  |         return self.convert_with_key(key, value) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def get(self, key, default=None): | 
					
						
							|  |  |  |         value = dict.get(self, key, default) | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  |         return self.convert_with_key(key, value) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def pop(self, key, default=None): | 
					
						
							|  |  |  |         value = dict.pop(self, key, default) | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  |         return self.convert_with_key(key, value, replace=False) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  | class ConvertingList(list, ConvertingMixin): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |     """A converting list wrapper.""" | 
					
						
							|  |  |  |     def __getitem__(self, key): | 
					
						
							|  |  |  |         value = list.__getitem__(self, key) | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  |         return self.convert_with_key(key, value) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def pop(self, idx=-1): | 
					
						
							|  |  |  |         value = list.pop(self, idx) | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  |         return self.convert(value) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  | class ConvertingTuple(tuple, ConvertingMixin): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |     """A converting tuple wrapper.""" | 
					
						
							|  |  |  |     def __getitem__(self, key): | 
					
						
							|  |  |  |         value = tuple.__getitem__(self, key) | 
					
						
							| 
									
										
										
										
											2014-03-20 13:14:39 +00:00
										 |  |  |         # Can't replace a tuple entry. | 
					
						
							|  |  |  |         return self.convert_with_key(key, value, replace=False) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class BaseConfigurator(object): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     The configurator base class which defines some useful defaults. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     CONVERT_PATTERN = re.compile(r'^(?P<prefix>[a-z]+)://(?P<suffix>.*)$') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') | 
					
						
							|  |  |  |     DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') | 
					
						
							| 
									
										
										
										
											2023-08-25 13:45:26 +05:30
										 |  |  |     INDEX_PATTERN = re.compile(r'^\[([^\[\]]*)\]\s*') | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |     DIGIT_PATTERN = re.compile(r'^\d+$') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     value_converters = { | 
					
						
							|  |  |  |         'ext' : 'ext_convert', | 
					
						
							|  |  |  |         'cfg' : 'cfg_convert', | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # We might want to use a different one, e.g. importlib | 
					
						
							| 
									
										
										
										
											2010-06-12 00:39:28 +00:00
										 |  |  |     importer = staticmethod(__import__) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, config): | 
					
						
							|  |  |  |         self.config = ConvertingDict(config) | 
					
						
							|  |  |  |         self.config.configurator = self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def resolve(self, s): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Resolve strings to objects using standard import and attribute | 
					
						
							|  |  |  |         syntax. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         name = s.split('.') | 
					
						
							|  |  |  |         used = name.pop(0) | 
					
						
							| 
									
										
										
										
											2010-06-27 20:54:28 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             found = self.importer(used) | 
					
						
							|  |  |  |             for frag in name: | 
					
						
							|  |  |  |                 used += '.' + frag | 
					
						
							|  |  |  |                 try: | 
					
						
							|  |  |  |                     found = getattr(found, frag) | 
					
						
							|  |  |  |                 except AttributeError: | 
					
						
							|  |  |  |                     self.importer(used) | 
					
						
							|  |  |  |                     found = getattr(found, frag) | 
					
						
							|  |  |  |             return found | 
					
						
							| 
									
										
										
										
											2022-01-10 18:59:21 +00:00
										 |  |  |         except ImportError as e: | 
					
						
							| 
									
										
										
										
											2010-06-27 20:54:28 +00:00
										 |  |  |             v = ValueError('Cannot resolve %r: %s' % (s, e)) | 
					
						
							| 
									
										
										
										
											2022-01-10 18:59:21 +00:00
										 |  |  |             raise v from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def ext_convert(self, value): | 
					
						
							|  |  |  |         """Default converter for the ext:// protocol.""" | 
					
						
							|  |  |  |         return self.resolve(value) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def cfg_convert(self, value): | 
					
						
							|  |  |  |         """Default converter for the cfg:// protocol.""" | 
					
						
							|  |  |  |         rest = value | 
					
						
							|  |  |  |         m = self.WORD_PATTERN.match(rest) | 
					
						
							|  |  |  |         if m is None: | 
					
						
							|  |  |  |             raise ValueError("Unable to convert %r" % value) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             rest = rest[m.end():] | 
					
						
							|  |  |  |             d = self.config[m.groups()[0]] | 
					
						
							|  |  |  |             #print d, rest | 
					
						
							|  |  |  |             while rest: | 
					
						
							|  |  |  |                 m = self.DOT_PATTERN.match(rest) | 
					
						
							|  |  |  |                 if m: | 
					
						
							|  |  |  |                     d = d[m.groups()[0]] | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     m = self.INDEX_PATTERN.match(rest) | 
					
						
							|  |  |  |                     if m: | 
					
						
							|  |  |  |                         idx = m.groups()[0] | 
					
						
							|  |  |  |                         if not self.DIGIT_PATTERN.match(idx): | 
					
						
							|  |  |  |                             d = d[idx] | 
					
						
							|  |  |  |                         else: | 
					
						
							|  |  |  |                             try: | 
					
						
							|  |  |  |                                 n = int(idx) # try as number first (most likely) | 
					
						
							|  |  |  |                                 d = d[n] | 
					
						
							|  |  |  |                             except TypeError: | 
					
						
							|  |  |  |                                 d = d[idx] | 
					
						
							|  |  |  |                 if m: | 
					
						
							|  |  |  |                     rest = rest[m.end():] | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     raise ValueError('Unable to convert ' | 
					
						
							|  |  |  |                                      '%r at %r' % (value, rest)) | 
					
						
							|  |  |  |         #rest should be empty | 
					
						
							|  |  |  |         return d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def convert(self, value): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Convert values to an appropriate type. dicts, lists and tuples are | 
					
						
							|  |  |  |         replaced by their converting alternatives. Strings are checked to | 
					
						
							|  |  |  |         see if they have a conversion format and are converted if they do. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         if not isinstance(value, ConvertingDict) and isinstance(value, dict): | 
					
						
							|  |  |  |             value = ConvertingDict(value) | 
					
						
							|  |  |  |             value.configurator = self | 
					
						
							|  |  |  |         elif not isinstance(value, ConvertingList) and isinstance(value, list): | 
					
						
							|  |  |  |             value = ConvertingList(value) | 
					
						
							|  |  |  |             value.configurator = self | 
					
						
							|  |  |  |         elif not isinstance(value, ConvertingTuple) and\ | 
					
						
							| 
									
										
										
										
											2020-01-01 19:32:11 +00:00
										 |  |  |                  isinstance(value, tuple) and not hasattr(value, '_fields'): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             value = ConvertingTuple(value) | 
					
						
							|  |  |  |             value.configurator = self | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 12:48:53 -0600 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 14:18:28 -0600 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r77973 | vinay.sajip | 2010-02-04 14:23:45 -0600 (Thu, 04 Feb 2010) | 1 line
  Issue #7851: logging: clarification on logging configuration files.
........
  r77979 | vinay.sajip | 2010-02-04 15:40:56 -0600 (Thu, 04 Feb 2010) | 1 line
  Added unit test for cfg:// resolution.
........
  r77985 | vinay.sajip | 2010-02-05 08:52:05 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener test now uses find_unused_port().
........
  r77986 | vinay.sajip | 2010-02-05 09:40:20 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener tests disabled for now.
........
  r78009 | vinay.sajip | 2010-02-05 17:43:11 -0600 (Fri, 05 Feb 2010) | 1 line
  test_logging: minor tweaks to timeouts, listening tests marked as skipped.
........
  r78029 | vinay.sajip | 2010-02-06 14:00:43 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Tentatively re-enabling one test to see effect on buildbots.
........
  r78031 | vinay.sajip | 2010-02-06 14:28:36 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Gave server thread more time to get ready, and re-enabled a skipped test.
........
  r78032 | georg.brandl | 2010-02-06 15:54:40 -0600 (Sat, 06 Feb 2010) | 1 line
  Remove unused imports from test_logging.
........
  r78033 | benjamin.peterson | 2010-02-06 16:08:15 -0600 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78081 | vinay.sajip | 2010-02-07 06:56:54 -0600 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 07:06:51 -0600 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78103 | vinay.sajip | 2010-02-08 00:50:14 -0600 (Mon, 08 Feb 2010) | 1 line
  Removed spurious print statement in test.
........
  r78105 | vinay.sajip | 2010-02-08 09:32:08 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: skipped listening tests because they're not working reliably.
........
  r78106 | vinay.sajip | 2010-02-08 10:05:50 -0600 (Mon, 08 Feb 2010) | 1 line
  Issue #7857: Another attempt to keep the buildbots happy.
........
  r78108 | vinay.sajip | 2010-02-08 15:18:15 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
  r78246 | vinay.sajip | 2010-02-19 17:53:17 -0600 (Fri, 19 Feb 2010) | 1 line
  logging: Documented warnings module integration.
........
  r78703 | vinay.sajip | 2010-03-05 16:11:24 -0600 (Fri, 05 Mar 2010) | 1 line
  Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future.
........
  r78728 | vinay.sajip | 2010-03-06 09:12:08 -0600 (Sat, 06 Mar 2010) | 1 line
  Added schema version test in dictConfig.
........
  r78731 | vinay.sajip | 2010-03-06 09:56:03 -0600 (Sat, 06 Mar 2010) | 1 line
  Added checks for tuples in dictConfig.
........
  r78853 | vinay.sajip | 2010-03-12 00:01:21 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: logging: Improved algorithm for computing initial rollover time.
........
  r78855 | vinay.sajip | 2010-03-12 03:16:10 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: Updated NEWS entry and added to logging documentation.
........
											
										 
											2010-03-13 22:30:34 +00:00
										 |  |  |         elif isinstance(value, str): # str for py3k | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             m = self.CONVERT_PATTERN.match(value) | 
					
						
							|  |  |  |             if m: | 
					
						
							|  |  |  |                 d = m.groupdict() | 
					
						
							|  |  |  |                 prefix = d['prefix'] | 
					
						
							|  |  |  |                 converter = self.value_converters.get(prefix, None) | 
					
						
							|  |  |  |                 if converter: | 
					
						
							|  |  |  |                     suffix = d['suffix'] | 
					
						
							|  |  |  |                     converter = getattr(self, converter) | 
					
						
							|  |  |  |                     value = converter(suffix) | 
					
						
							|  |  |  |         return value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def configure_custom(self, config): | 
					
						
							|  |  |  |         """Configure an object with a user-supplied factory.""" | 
					
						
							|  |  |  |         c = config.pop('()') | 
					
						
							| 
									
										
										
										
											2011-10-28 14:45:05 +02:00
										 |  |  |         if not callable(c): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             c = self.resolve(c) | 
					
						
							|  |  |  |         # Check for valid identifiers | 
					
						
							| 
									
										
										
										
											2023-11-09 18:55:22 +00:00
										 |  |  |         kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))} | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         result = c(**kwargs) | 
					
						
							| 
									
										
										
										
											2023-11-09 18:55:22 +00:00
										 |  |  |         props = config.pop('.', None) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         if props: | 
					
						
							|  |  |  |             for name, value in props.items(): | 
					
						
							|  |  |  |                 setattr(result, name, value) | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 12:48:53 -0600 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 14:18:28 -0600 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r77973 | vinay.sajip | 2010-02-04 14:23:45 -0600 (Thu, 04 Feb 2010) | 1 line
  Issue #7851: logging: clarification on logging configuration files.
........
  r77979 | vinay.sajip | 2010-02-04 15:40:56 -0600 (Thu, 04 Feb 2010) | 1 line
  Added unit test for cfg:// resolution.
........
  r77985 | vinay.sajip | 2010-02-05 08:52:05 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener test now uses find_unused_port().
........
  r77986 | vinay.sajip | 2010-02-05 09:40:20 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener tests disabled for now.
........
  r78009 | vinay.sajip | 2010-02-05 17:43:11 -0600 (Fri, 05 Feb 2010) | 1 line
  test_logging: minor tweaks to timeouts, listening tests marked as skipped.
........
  r78029 | vinay.sajip | 2010-02-06 14:00:43 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Tentatively re-enabling one test to see effect on buildbots.
........
  r78031 | vinay.sajip | 2010-02-06 14:28:36 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Gave server thread more time to get ready, and re-enabled a skipped test.
........
  r78032 | georg.brandl | 2010-02-06 15:54:40 -0600 (Sat, 06 Feb 2010) | 1 line
  Remove unused imports from test_logging.
........
  r78033 | benjamin.peterson | 2010-02-06 16:08:15 -0600 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78081 | vinay.sajip | 2010-02-07 06:56:54 -0600 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 07:06:51 -0600 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78103 | vinay.sajip | 2010-02-08 00:50:14 -0600 (Mon, 08 Feb 2010) | 1 line
  Removed spurious print statement in test.
........
  r78105 | vinay.sajip | 2010-02-08 09:32:08 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: skipped listening tests because they're not working reliably.
........
  r78106 | vinay.sajip | 2010-02-08 10:05:50 -0600 (Mon, 08 Feb 2010) | 1 line
  Issue #7857: Another attempt to keep the buildbots happy.
........
  r78108 | vinay.sajip | 2010-02-08 15:18:15 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
  r78246 | vinay.sajip | 2010-02-19 17:53:17 -0600 (Fri, 19 Feb 2010) | 1 line
  logging: Documented warnings module integration.
........
  r78703 | vinay.sajip | 2010-03-05 16:11:24 -0600 (Fri, 05 Mar 2010) | 1 line
  Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future.
........
  r78728 | vinay.sajip | 2010-03-06 09:12:08 -0600 (Sat, 06 Mar 2010) | 1 line
  Added schema version test in dictConfig.
........
  r78731 | vinay.sajip | 2010-03-06 09:56:03 -0600 (Sat, 06 Mar 2010) | 1 line
  Added checks for tuples in dictConfig.
........
  r78853 | vinay.sajip | 2010-03-12 00:01:21 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: logging: Improved algorithm for computing initial rollover time.
........
  r78855 | vinay.sajip | 2010-03-12 03:16:10 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: Updated NEWS entry and added to logging documentation.
........
											
										 
											2010-03-13 22:30:34 +00:00
										 |  |  |     def as_tuple(self, value): | 
					
						
							|  |  |  |         """Utility function which converts lists to tuples.""" | 
					
						
							|  |  |  |         if isinstance(value, list): | 
					
						
							|  |  |  |             value = tuple(value) | 
					
						
							|  |  |  |         return value | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-08-02 14:07:27 +02:00
										 |  |  | def _is_queue_like_object(obj): | 
					
						
							|  |  |  |     """Check that *obj* implements the Queue API.""" | 
					
						
							|  |  |  |     if isinstance(obj, queue.Queue): | 
					
						
							|  |  |  |         return True | 
					
						
							|  |  |  |     # defer importing multiprocessing as much as possible | 
					
						
							|  |  |  |     from multiprocessing.queues import Queue as MPQueue | 
					
						
							|  |  |  |     if isinstance(obj, MPQueue): | 
					
						
							|  |  |  |         return True | 
					
						
							|  |  |  |     # Depending on the multiprocessing start context, we cannot create | 
					
						
							|  |  |  |     # a multiprocessing.managers.BaseManager instance 'mm' to get the | 
					
						
							|  |  |  |     # runtime type of mm.Queue() or mm.JoinableQueue() (see gh-119819). | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Since we only need an object implementing the Queue API, we only | 
					
						
							|  |  |  |     # do a protocol check, but we do not use typing.runtime_checkable() | 
					
						
							|  |  |  |     # and typing.Protocol to reduce import time (see gh-121723). | 
					
						
							|  |  |  |     # | 
					
						
							|  |  |  |     # Ideally, we would have wanted to simply use strict type checking | 
					
						
							|  |  |  |     # instead of a protocol-based type checking since the latter does | 
					
						
							|  |  |  |     # not check the method signatures. | 
					
						
							|  |  |  |     queue_interface = [ | 
					
						
							|  |  |  |         'empty', 'full', 'get', 'get_nowait', | 
					
						
							|  |  |  |         'put', 'put_nowait', 'join', 'qsize', | 
					
						
							|  |  |  |         'task_done', | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     return all(callable(getattr(obj, method, None)) | 
					
						
							|  |  |  |                for method in queue_interface) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | class DictConfigurator(BaseConfigurator): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Configure logging using a dictionary-like object to describe the | 
					
						
							|  |  |  |     configuration. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def configure(self): | 
					
						
							|  |  |  |         """Do the configuration.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         config = self.config | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 12:48:53 -0600 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 14:18:28 -0600 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r77973 | vinay.sajip | 2010-02-04 14:23:45 -0600 (Thu, 04 Feb 2010) | 1 line
  Issue #7851: logging: clarification on logging configuration files.
........
  r77979 | vinay.sajip | 2010-02-04 15:40:56 -0600 (Thu, 04 Feb 2010) | 1 line
  Added unit test for cfg:// resolution.
........
  r77985 | vinay.sajip | 2010-02-05 08:52:05 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener test now uses find_unused_port().
........
  r77986 | vinay.sajip | 2010-02-05 09:40:20 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener tests disabled for now.
........
  r78009 | vinay.sajip | 2010-02-05 17:43:11 -0600 (Fri, 05 Feb 2010) | 1 line
  test_logging: minor tweaks to timeouts, listening tests marked as skipped.
........
  r78029 | vinay.sajip | 2010-02-06 14:00:43 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Tentatively re-enabling one test to see effect on buildbots.
........
  r78031 | vinay.sajip | 2010-02-06 14:28:36 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Gave server thread more time to get ready, and re-enabled a skipped test.
........
  r78032 | georg.brandl | 2010-02-06 15:54:40 -0600 (Sat, 06 Feb 2010) | 1 line
  Remove unused imports from test_logging.
........
  r78033 | benjamin.peterson | 2010-02-06 16:08:15 -0600 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78081 | vinay.sajip | 2010-02-07 06:56:54 -0600 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 07:06:51 -0600 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78103 | vinay.sajip | 2010-02-08 00:50:14 -0600 (Mon, 08 Feb 2010) | 1 line
  Removed spurious print statement in test.
........
  r78105 | vinay.sajip | 2010-02-08 09:32:08 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: skipped listening tests because they're not working reliably.
........
  r78106 | vinay.sajip | 2010-02-08 10:05:50 -0600 (Mon, 08 Feb 2010) | 1 line
  Issue #7857: Another attempt to keep the buildbots happy.
........
  r78108 | vinay.sajip | 2010-02-08 15:18:15 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
  r78246 | vinay.sajip | 2010-02-19 17:53:17 -0600 (Fri, 19 Feb 2010) | 1 line
  logging: Documented warnings module integration.
........
  r78703 | vinay.sajip | 2010-03-05 16:11:24 -0600 (Fri, 05 Mar 2010) | 1 line
  Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future.
........
  r78728 | vinay.sajip | 2010-03-06 09:12:08 -0600 (Sat, 06 Mar 2010) | 1 line
  Added schema version test in dictConfig.
........
  r78731 | vinay.sajip | 2010-03-06 09:56:03 -0600 (Sat, 06 Mar 2010) | 1 line
  Added checks for tuples in dictConfig.
........
  r78853 | vinay.sajip | 2010-03-12 00:01:21 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: logging: Improved algorithm for computing initial rollover time.
........
  r78855 | vinay.sajip | 2010-03-12 03:16:10 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: Updated NEWS entry and added to logging documentation.
........
											
										 
											2010-03-13 22:30:34 +00:00
										 |  |  |         if 'version' not in config: | 
					
						
							|  |  |  |             raise ValueError("dictionary doesn't specify a version") | 
					
						
							|  |  |  |         if config['version'] != 1: | 
					
						
							|  |  |  |             raise ValueError("Unsupported version: %s" % config['version']) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         incremental = config.pop('incremental', False) | 
					
						
							|  |  |  |         EMPTY_DICT = {} | 
					
						
							| 
									
										
										
										
											2023-09-27 17:26:41 +01:00
										 |  |  |         with logging._lock: | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             if incremental: | 
					
						
							|  |  |  |                 handlers = config.get('handlers', EMPTY_DICT) | 
					
						
							|  |  |  |                 for name in handlers: | 
					
						
							|  |  |  |                     if name not in logging._handlers: | 
					
						
							|  |  |  |                         raise ValueError('No handler found with ' | 
					
						
							|  |  |  |                                          'name %r'  % name) | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         try: | 
					
						
							|  |  |  |                             handler = logging._handlers[name] | 
					
						
							|  |  |  |                             handler_config = handlers[name] | 
					
						
							|  |  |  |                             level = handler_config.get('level', None) | 
					
						
							|  |  |  |                             if level: | 
					
						
							|  |  |  |                                 handler.setLevel(logging._checkLevel(level)) | 
					
						
							|  |  |  |                         except Exception as e: | 
					
						
							|  |  |  |                             raise ValueError('Unable to configure handler ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                              '%r' % name) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 loggers = config.get('loggers', EMPTY_DICT) | 
					
						
							|  |  |  |                 for name in loggers: | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         self.configure_logger(name, loggers[name], True) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure logger ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          '%r' % name) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 root = config.get('root', None) | 
					
						
							|  |  |  |                 if root: | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         self.configure_root(root, True) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure root ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          'logger') from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 disable_existing = config.pop('disable_existing_loggers', True) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 14:27:46 +05:30
										 |  |  |                 _clearExistingHandlers() | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 # Do formatters first - they don't refer to anything else | 
					
						
							|  |  |  |                 formatters = config.get('formatters', EMPTY_DICT) | 
					
						
							|  |  |  |                 for name in formatters: | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         formatters[name] = self.configure_formatter( | 
					
						
							|  |  |  |                                                             formatters[name]) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          'formatter %r' % name) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 # Next, do filters - they don't refer to anything else, either | 
					
						
							|  |  |  |                 filters = config.get('filters', EMPTY_DICT) | 
					
						
							|  |  |  |                 for name in filters: | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         filters[name] = self.configure_filter(filters[name]) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          'filter %r' % name) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 # Next, do handlers - they refer to formatters and filters | 
					
						
							|  |  |  |                 # As handlers can refer to other handlers, sort the keys | 
					
						
							|  |  |  |                 # to allow a deterministic order of configuration | 
					
						
							|  |  |  |                 handlers = config.get('handlers', EMPTY_DICT) | 
					
						
							| 
									
										
										
										
											2013-03-22 15:19:54 +00:00
										 |  |  |                 deferred = [] | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 for name in sorted(handlers): | 
					
						
							| 
									
										
										
										
											2013-03-22 15:19:54 +00:00
										 |  |  |                     try: | 
					
						
							|  |  |  |                         handler = self.configure_handler(handlers[name]) | 
					
						
							|  |  |  |                         handler.name = name | 
					
						
							|  |  |  |                         handlers[name] = handler | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |                         if ' not configured yet' in str(e.__cause__): | 
					
						
							| 
									
										
										
										
											2013-03-22 15:19:54 +00:00
										 |  |  |                             deferred.append(name) | 
					
						
							|  |  |  |                         else: | 
					
						
							|  |  |  |                             raise ValueError('Unable to configure handler ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                              '%r' % name) from e | 
					
						
							| 
									
										
										
										
											2013-03-22 15:19:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 # Now do any that were deferred | 
					
						
							|  |  |  |                 for name in deferred: | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                     try: | 
					
						
							|  |  |  |                         handler = self.configure_handler(handlers[name]) | 
					
						
							|  |  |  |                         handler.name = name | 
					
						
							|  |  |  |                         handlers[name] = handler | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure handler ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          '%r' % name) from e | 
					
						
							| 
									
										
										
										
											2013-03-22 15:19:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 # Next, do loggers - they refer to handlers and filters | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 #we don't want to lose the existing loggers, | 
					
						
							|  |  |  |                 #since other threads may have pointers to them. | 
					
						
							|  |  |  |                 #existing is set to contain all existing loggers, | 
					
						
							|  |  |  |                 #and as we go through the new configuration we | 
					
						
							|  |  |  |                 #remove any which are configured. At the end, | 
					
						
							|  |  |  |                 #what's left in existing is the set of loggers | 
					
						
							|  |  |  |                 #which were in the previous configuration but | 
					
						
							|  |  |  |                 #which are not in the new configuration. | 
					
						
							|  |  |  |                 root = logging.root | 
					
						
							|  |  |  |                 existing = list(root.manager.loggerDict.keys()) | 
					
						
							|  |  |  |                 #The list needs to be sorted so that we can | 
					
						
							|  |  |  |                 #avoid disabling child loggers of explicitly | 
					
						
							|  |  |  |                 #named loggers. With a sorted list it is easier | 
					
						
							|  |  |  |                 #to find the child loggers. | 
					
						
							| 
									
										
										
										
											2011-11-07 19:43:05 +01:00
										 |  |  |                 existing.sort() | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 #We'll keep the list of existing loggers | 
					
						
							|  |  |  |                 #which are children of named loggers here... | 
					
						
							|  |  |  |                 child_loggers = [] | 
					
						
							|  |  |  |                 #now set up the new ones... | 
					
						
							|  |  |  |                 loggers = config.get('loggers', EMPTY_DICT) | 
					
						
							|  |  |  |                 for name in loggers: | 
					
						
							|  |  |  |                     if name in existing: | 
					
						
							| 
									
										
										
										
											2011-03-07 18:02:57 +00:00
										 |  |  |                         i = existing.index(name) + 1 # look after name | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                         prefixed = name + "." | 
					
						
							|  |  |  |                         pflen = len(prefixed) | 
					
						
							|  |  |  |                         num_existing = len(existing) | 
					
						
							| 
									
										
										
										
											2011-03-07 18:02:57 +00:00
										 |  |  |                         while i < num_existing: | 
					
						
							|  |  |  |                             if existing[i][:pflen] == prefixed: | 
					
						
							|  |  |  |                                 child_loggers.append(existing[i]) | 
					
						
							|  |  |  |                             i += 1 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                         existing.remove(name) | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         self.configure_logger(name, loggers[name]) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure logger ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          '%r' % name) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 #Disable any old loggers. There's no point deleting | 
					
						
							|  |  |  |                 #them as other threads may continue to hold references | 
					
						
							|  |  |  |                 #and by disabling them, you stop them doing any logging. | 
					
						
							|  |  |  |                 #However, don't disable children of named loggers, as that's | 
					
						
							|  |  |  |                 #probably not what was intended by the user. | 
					
						
							| 
									
										
										
										
											2010-08-30 19:02:14 +00:00
										 |  |  |                 #for log in existing: | 
					
						
							|  |  |  |                 #    logger = root.manager.loggerDict[log] | 
					
						
							|  |  |  |                 #    if log in child_loggers: | 
					
						
							|  |  |  |                 #        logger.level = logging.NOTSET | 
					
						
							|  |  |  |                 #        logger.handlers = [] | 
					
						
							|  |  |  |                 #        logger.propagate = True | 
					
						
							|  |  |  |                 #    elif disable_existing: | 
					
						
							|  |  |  |                 #        logger.disabled = True | 
					
						
							|  |  |  |                 _handle_existing_loggers(existing, child_loggers, | 
					
						
							|  |  |  |                                          disable_existing) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 # And finally, do the root logger | 
					
						
							|  |  |  |                 root = config.get('root', None) | 
					
						
							|  |  |  |                 if root: | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         self.configure_root(root) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to configure root ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                          'logger') from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def configure_formatter(self, config): | 
					
						
							|  |  |  |         """Configure a formatter from a dictionary.""" | 
					
						
							|  |  |  |         if '()' in config: | 
					
						
							|  |  |  |             factory = config['()'] # for use in exception handler | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 result = self.configure_custom(config) | 
					
						
							|  |  |  |             except TypeError as te: | 
					
						
							|  |  |  |                 if "'format'" not in str(te): | 
					
						
							|  |  |  |                     raise | 
					
						
							| 
									
										
										
										
											2024-02-13 09:47:40 +01:00
										 |  |  |                 # logging.Formatter and its subclasses expect the `fmt` | 
					
						
							|  |  |  |                 # parameter instead of `format`. Retry passing configuration | 
					
						
							|  |  |  |                 # with `fmt`. | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 config['fmt'] = config.pop('format') | 
					
						
							|  |  |  |                 config['()'] = factory | 
					
						
							|  |  |  |                 result = self.configure_custom(config) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             fmt = config.get('format', None) | 
					
						
							|  |  |  |             dfmt = config.get('datefmt', None) | 
					
						
							| 
									
										
										
										
											2013-03-29 17:56:54 +00:00
										 |  |  |             style = config.get('style', '%') | 
					
						
							| 
									
										
										
										
											2014-04-15 14:24:53 +01:00
										 |  |  |             cname = config.get('class', None) | 
					
						
							| 
									
										
										
										
											2023-04-12 08:35:56 +01:00
										 |  |  |             defaults = config.get('defaults', None) | 
					
						
							| 
									
										
										
										
											2018-10-15 19:41:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-15 14:24:53 +01:00
										 |  |  |             if not cname: | 
					
						
							|  |  |  |                 c = logging.Formatter | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 c = _resolve(cname) | 
					
						
							| 
									
										
										
										
											2018-10-15 19:41:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-12 08:35:56 +01:00
										 |  |  |             kwargs  = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Add defaults only if it exists. | 
					
						
							|  |  |  |             # Prevents TypeError in custom formatter callables that do not | 
					
						
							|  |  |  |             # accept it. | 
					
						
							|  |  |  |             if defaults is not None: | 
					
						
							|  |  |  |                 kwargs['defaults'] = defaults | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-15 19:41:36 +01:00
										 |  |  |             # A TypeError would be raised if "validate" key is passed in with a formatter callable | 
					
						
							|  |  |  |             # that does not accept "validate" as a parameter | 
					
						
							|  |  |  |             if 'validate' in config:  # if user hasn't mentioned it, the default will be fine | 
					
						
							| 
									
										
										
										
											2023-04-12 08:35:56 +01:00
										 |  |  |                 result = c(fmt, dfmt, style, config['validate'], **kwargs) | 
					
						
							| 
									
										
										
										
											2018-10-15 19:41:36 +01:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2023-04-12 08:35:56 +01:00
										 |  |  |                 result = c(fmt, dfmt, style, **kwargs) | 
					
						
							| 
									
										
										
										
											2018-10-15 19:41:36 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def configure_filter(self, config): | 
					
						
							|  |  |  |         """Configure a filter from a dictionary.""" | 
					
						
							|  |  |  |         if '()' in config: | 
					
						
							|  |  |  |             result = self.configure_custom(config) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             name = config.get('name', '') | 
					
						
							|  |  |  |             result = logging.Filter(name) | 
					
						
							|  |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def add_filters(self, filterer, filters): | 
					
						
							|  |  |  |         """Add filters to a filterer from a list of names.""" | 
					
						
							|  |  |  |         for f in filters: | 
					
						
							|  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2022-01-24 13:39:50 +01:00
										 |  |  |                 if callable(f) or callable(getattr(f, 'filter', None)): | 
					
						
							|  |  |  |                     filter_ = f | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     filter_ = self.config['filters'][f] | 
					
						
							|  |  |  |                 filterer.addFilter(filter_) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             except Exception as e: | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                 raise ValueError('Unable to add filter %r' % f) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |     def _configure_queue_handler(self, klass, **kwargs): | 
					
						
							|  |  |  |         if 'queue' in kwargs: | 
					
						
							| 
									
										
										
										
											2024-06-04 14:18:11 +02:00
										 |  |  |             q = kwargs.pop('queue') | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |         else: | 
					
						
							|  |  |  |             q = queue.Queue()  # unbounded | 
					
						
							| 
									
										
										
										
											2024-06-04 14:18:11 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         rhl = kwargs.pop('respect_handler_level', False) | 
					
						
							|  |  |  |         lklass = kwargs.pop('listener', logging.handlers.QueueListener) | 
					
						
							|  |  |  |         handlers = kwargs.pop('handlers', []) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         listener = lklass(q, *handlers, respect_handler_level=rhl) | 
					
						
							|  |  |  |         handler = klass(q, **kwargs) | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |         handler.listener = listener | 
					
						
							|  |  |  |         return handler | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |     def configure_handler(self, config): | 
					
						
							|  |  |  |         """Configure a handler from a dictionary.""" | 
					
						
							| 
									
										
										
										
											2013-03-29 17:56:54 +00:00
										 |  |  |         config_copy = dict(config)  # for restoring in case of error | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         formatter = config.pop('formatter', None) | 
					
						
							|  |  |  |         if formatter: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 formatter = self.config['formatters'][formatter] | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							|  |  |  |                 raise ValueError('Unable to set formatter ' | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                                  '%r' % formatter) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         level = config.pop('level', None) | 
					
						
							|  |  |  |         filters = config.pop('filters', None) | 
					
						
							|  |  |  |         if '()' in config: | 
					
						
							|  |  |  |             c = config.pop('()') | 
					
						
							| 
									
										
										
										
											2011-10-28 14:45:05 +02:00
										 |  |  |             if not callable(c): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                 c = self.resolve(c) | 
					
						
							|  |  |  |             factory = c | 
					
						
							|  |  |  |         else: | 
					
						
							| 
									
										
										
										
											2013-03-22 15:19:54 +00:00
										 |  |  |             cname = config.pop('class') | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |             if callable(cname): | 
					
						
							|  |  |  |                 klass = cname | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 klass = self.resolve(cname) | 
					
						
							| 
									
										
										
										
											2024-04-17 13:55:18 +01:00
										 |  |  |             if issubclass(klass, logging.handlers.MemoryHandler): | 
					
						
							|  |  |  |                 if 'flushLevel' in config: | 
					
						
							|  |  |  |                     config['flushLevel'] = logging._checkLevel(config['flushLevel']) | 
					
						
							|  |  |  |                 if 'target' in config: | 
					
						
							|  |  |  |                     # Special case for handler which refers to another handler | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         tn = config['target'] | 
					
						
							|  |  |  |                         th = self.config['handlers'][tn] | 
					
						
							|  |  |  |                         if not isinstance(th, logging.Handler): | 
					
						
							|  |  |  |                             config.update(config_copy)  # restore for deferred cfg | 
					
						
							|  |  |  |                             raise TypeError('target not configured yet') | 
					
						
							|  |  |  |                         config['target'] = th | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to set target handler %r' % tn) from e | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |             elif issubclass(klass, logging.handlers.QueueHandler): | 
					
						
							|  |  |  |                 # Another special case for handler which refers to other handlers | 
					
						
							| 
									
										
										
										
											2023-12-27 09:35:15 +00:00
										 |  |  |                 # if 'handlers' not in config: | 
					
						
							|  |  |  |                     # raise ValueError('No handlers specified for a QueueHandler') | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |                 if 'queue' in config: | 
					
						
							|  |  |  |                     qspec = config['queue'] | 
					
						
							| 
									
										
										
										
											2024-06-27 11:09:17 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |                     if isinstance(qspec, str): | 
					
						
							|  |  |  |                         q = self.resolve(qspec) | 
					
						
							|  |  |  |                         if not callable(q): | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |                             raise TypeError('Invalid queue specifier %r' % qspec) | 
					
						
							| 
									
										
										
										
											2024-06-27 11:09:17 +02:00
										 |  |  |                         config['queue'] = q() | 
					
						
							|  |  |  |                     elif isinstance(qspec, dict): | 
					
						
							|  |  |  |                         if '()' not in qspec: | 
					
						
							|  |  |  |                             raise TypeError('Invalid queue specifier %r' % qspec) | 
					
						
							|  |  |  |                         config['queue'] = self.configure_custom(dict(qspec)) | 
					
						
							| 
									
										
										
										
											2024-08-02 14:07:27 +02:00
										 |  |  |                     elif not _is_queue_like_object(qspec): | 
					
						
							|  |  |  |                         raise TypeError('Invalid queue specifier %r' % qspec) | 
					
						
							| 
									
										
										
										
											2024-06-27 11:09:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |                 if 'listener' in config: | 
					
						
							|  |  |  |                     lspec = config['listener'] | 
					
						
							|  |  |  |                     if isinstance(lspec, type): | 
					
						
							|  |  |  |                         if not issubclass(lspec, logging.handlers.QueueListener): | 
					
						
							|  |  |  |                             raise TypeError('Invalid listener specifier %r' % lspec) | 
					
						
							|  |  |  |                     else: | 
					
						
							|  |  |  |                         if isinstance(lspec, str): | 
					
						
							|  |  |  |                             listener = self.resolve(lspec) | 
					
						
							|  |  |  |                             if isinstance(listener, type) and\ | 
					
						
							|  |  |  |                                 not issubclass(listener, logging.handlers.QueueListener): | 
					
						
							|  |  |  |                                 raise TypeError('Invalid listener specifier %r' % lspec) | 
					
						
							|  |  |  |                         elif isinstance(lspec, dict): | 
					
						
							|  |  |  |                             if '()' not in lspec: | 
					
						
							|  |  |  |                                 raise TypeError('Invalid listener specifier %r' % lspec) | 
					
						
							|  |  |  |                             listener = self.configure_custom(dict(lspec)) | 
					
						
							|  |  |  |                         else: | 
					
						
							|  |  |  |                             raise TypeError('Invalid listener specifier %r' % lspec) | 
					
						
							|  |  |  |                         if not callable(listener): | 
					
						
							|  |  |  |                             raise TypeError('Invalid listener specifier %r' % lspec) | 
					
						
							|  |  |  |                         config['listener'] = listener | 
					
						
							| 
									
										
										
										
											2023-12-27 09:35:15 +00:00
										 |  |  |                 if 'handlers' in config: | 
					
						
							|  |  |  |                     hlist = [] | 
					
						
							|  |  |  |                     try: | 
					
						
							|  |  |  |                         for hn in config['handlers']: | 
					
						
							|  |  |  |                             h = self.config['handlers'][hn] | 
					
						
							|  |  |  |                             if not isinstance(h, logging.Handler): | 
					
						
							|  |  |  |                                 config.update(config_copy)  # restore for deferred cfg | 
					
						
							|  |  |  |                                 raise TypeError('Required handler %r ' | 
					
						
							|  |  |  |                                                 'is not configured yet' % hn) | 
					
						
							|  |  |  |                             hlist.append(h) | 
					
						
							|  |  |  |                     except Exception as e: | 
					
						
							|  |  |  |                         raise ValueError('Unable to set required handler %r' % hn) from e | 
					
						
							|  |  |  |                     config['handlers'] = hlist | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,77973,77979,77985-77986,78009,78029,78031-78033,78081,78085,78103,78105-78106,78108,78246,78703,78728,78731,78853,78855 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 12:48:53 -0600 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 14:18:28 -0600 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r77973 | vinay.sajip | 2010-02-04 14:23:45 -0600 (Thu, 04 Feb 2010) | 1 line
  Issue #7851: logging: clarification on logging configuration files.
........
  r77979 | vinay.sajip | 2010-02-04 15:40:56 -0600 (Thu, 04 Feb 2010) | 1 line
  Added unit test for cfg:// resolution.
........
  r77985 | vinay.sajip | 2010-02-05 08:52:05 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener test now uses find_unused_port().
........
  r77986 | vinay.sajip | 2010-02-05 09:40:20 -0600 (Fri, 05 Feb 2010) | 1 line
  Issue #7857: test_logging: listener tests disabled for now.
........
  r78009 | vinay.sajip | 2010-02-05 17:43:11 -0600 (Fri, 05 Feb 2010) | 1 line
  test_logging: minor tweaks to timeouts, listening tests marked as skipped.
........
  r78029 | vinay.sajip | 2010-02-06 14:00:43 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Tentatively re-enabling one test to see effect on buildbots.
........
  r78031 | vinay.sajip | 2010-02-06 14:28:36 -0600 (Sat, 06 Feb 2010) | 1 line
  Issue #7857: Gave server thread more time to get ready, and re-enabled a skipped test.
........
  r78032 | georg.brandl | 2010-02-06 15:54:40 -0600 (Sat, 06 Feb 2010) | 1 line
  Remove unused imports from test_logging.
........
  r78033 | benjamin.peterson | 2010-02-06 16:08:15 -0600 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78081 | vinay.sajip | 2010-02-07 06:56:54 -0600 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 07:06:51 -0600 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78103 | vinay.sajip | 2010-02-08 00:50:14 -0600 (Mon, 08 Feb 2010) | 1 line
  Removed spurious print statement in test.
........
  r78105 | vinay.sajip | 2010-02-08 09:32:08 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: skipped listening tests because they're not working reliably.
........
  r78106 | vinay.sajip | 2010-02-08 10:05:50 -0600 (Mon, 08 Feb 2010) | 1 line
  Issue #7857: Another attempt to keep the buildbots happy.
........
  r78108 | vinay.sajip | 2010-02-08 15:18:15 -0600 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
  r78246 | vinay.sajip | 2010-02-19 17:53:17 -0600 (Fri, 19 Feb 2010) | 1 line
  logging: Documented warnings module integration.
........
  r78703 | vinay.sajip | 2010-03-05 16:11:24 -0600 (Fri, 05 Mar 2010) | 1 line
  Factored out time usage determination into a method, to facilitate alternative formatting implementations in the future.
........
  r78728 | vinay.sajip | 2010-03-06 09:12:08 -0600 (Sat, 06 Mar 2010) | 1 line
  Added schema version test in dictConfig.
........
  r78731 | vinay.sajip | 2010-03-06 09:56:03 -0600 (Sat, 06 Mar 2010) | 1 line
  Added checks for tuples in dictConfig.
........
  r78853 | vinay.sajip | 2010-03-12 00:01:21 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: logging: Improved algorithm for computing initial rollover time.
........
  r78855 | vinay.sajip | 2010-03-12 03:16:10 -0600 (Fri, 12 Mar 2010) | 1 line
  Issue #8117: Updated NEWS entry and added to logging documentation.
........
											
										 
											2010-03-13 22:30:34 +00:00
										 |  |  |             elif issubclass(klass, logging.handlers.SMTPHandler) and\ | 
					
						
							|  |  |  |                 'mailhost' in config: | 
					
						
							|  |  |  |                 config['mailhost'] = self.as_tuple(config['mailhost']) | 
					
						
							|  |  |  |             elif issubclass(klass, logging.handlers.SysLogHandler) and\ | 
					
						
							|  |  |  |                 'address' in config: | 
					
						
							|  |  |  |                 config['address'] = self.as_tuple(config['address']) | 
					
						
							| 
									
										
										
										
											2022-06-07 09:20:35 +01:00
										 |  |  |             if issubclass(klass, logging.handlers.QueueHandler): | 
					
						
							|  |  |  |                 factory = functools.partial(self._configure_queue_handler, klass) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 factory = klass | 
					
						
							| 
									
										
										
										
											2023-11-09 18:55:22 +00:00
										 |  |  |         kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))} | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             result = factory(**kwargs) | 
					
						
							|  |  |  |         except TypeError as te: | 
					
						
							|  |  |  |             if "'stream'" not in str(te): | 
					
						
							|  |  |  |                 raise | 
					
						
							|  |  |  |             #The argument name changed from strm to stream | 
					
						
							|  |  |  |             #Retry with old name. | 
					
						
							|  |  |  |             #This is so that code can be used with older Python versions | 
					
						
							|  |  |  |             #(e.g. by Django) | 
					
						
							|  |  |  |             kwargs['strm'] = kwargs.pop('stream') | 
					
						
							|  |  |  |             result = factory(**kwargs) | 
					
						
							|  |  |  |         if formatter: | 
					
						
							|  |  |  |             result.setFormatter(formatter) | 
					
						
							|  |  |  |         if level is not None: | 
					
						
							|  |  |  |             result.setLevel(logging._checkLevel(level)) | 
					
						
							|  |  |  |         if filters: | 
					
						
							|  |  |  |             self.add_filters(result, filters) | 
					
						
							| 
									
										
										
										
											2023-11-09 18:55:22 +00:00
										 |  |  |         props = config.pop('.', None) | 
					
						
							| 
									
										
										
										
											2012-11-15 14:20:18 +00:00
										 |  |  |         if props: | 
					
						
							|  |  |  |             for name, value in props.items(): | 
					
						
							|  |  |  |                 setattr(result, name, value) | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def add_handlers(self, logger, handlers): | 
					
						
							|  |  |  |         """Add handlers to a logger from a list of names.""" | 
					
						
							|  |  |  |         for h in handlers: | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 logger.addHandler(self.config['handlers'][h]) | 
					
						
							|  |  |  |             except Exception as e: | 
					
						
							| 
									
										
										
										
											2016-10-03 19:45:50 +01:00
										 |  |  |                 raise ValueError('Unable to add handler %r' % h) from e | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def common_logger_config(self, logger, config, incremental=False): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Perform configuration which is common to root and non-root loggers. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         level = config.get('level', None) | 
					
						
							|  |  |  |         if level is not None: | 
					
						
							|  |  |  |             logger.setLevel(logging._checkLevel(level)) | 
					
						
							|  |  |  |         if not incremental: | 
					
						
							|  |  |  |             #Remove any existing handlers | 
					
						
							|  |  |  |             for h in logger.handlers[:]: | 
					
						
							|  |  |  |                 logger.removeHandler(h) | 
					
						
							|  |  |  |             handlers = config.get('handlers', None) | 
					
						
							|  |  |  |             if handlers: | 
					
						
							|  |  |  |                 self.add_handlers(logger, handlers) | 
					
						
							|  |  |  |             filters = config.get('filters', None) | 
					
						
							|  |  |  |             if filters: | 
					
						
							|  |  |  |                 self.add_filters(logger, filters) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def configure_logger(self, name, config, incremental=False): | 
					
						
							|  |  |  |         """Configure a non-root logger from a dictionary.""" | 
					
						
							|  |  |  |         logger = logging.getLogger(name) | 
					
						
							|  |  |  |         self.common_logger_config(logger, config, incremental) | 
					
						
							| 
									
										
										
										
											2022-09-03 13:38:38 +01:00
										 |  |  |         logger.disabled = False | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |         propagate = config.get('propagate', None) | 
					
						
							|  |  |  |         if propagate is not None: | 
					
						
							|  |  |  |             logger.propagate = propagate | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def configure_root(self, config, incremental=False): | 
					
						
							|  |  |  |         """Configure a root logger from a dictionary.""" | 
					
						
							|  |  |  |         root = logging.getLogger() | 
					
						
							|  |  |  |         self.common_logger_config(root, config, incremental) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dictConfigClass = DictConfigurator | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def dictConfig(config): | 
					
						
							|  |  |  |     """Configure logging using a dictionary.""" | 
					
						
							|  |  |  |     dictConfigClass(config).configure() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  | def listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=None): | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Start up a socket server on the specified port, and listen for new | 
					
						
							|  |  |  |     configurations. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     These will be sent as a file suitable for processing by fileConfig(). | 
					
						
							|  |  |  |     Returns a Thread object on which you can call start() to start the server, | 
					
						
							|  |  |  |     and which you can join() when appropriate. To stop the server, call | 
					
						
							|  |  |  |     stopListening(). | 
					
						
							| 
									
										
										
										
											2012-10-02 16:15:33 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     Use the ``verify`` argument to verify any bytes received across the wire | 
					
						
							|  |  |  |     from a client. If specified, it should be a callable which receives a | 
					
						
							|  |  |  |     single argument - the bytes of configuration data received across the | 
					
						
							|  |  |  |     network - and it should return either ``None``, to indicate that the | 
					
						
							|  |  |  |     passed in bytes could not be verified and should be discarded, or a | 
					
						
							|  |  |  |     byte string which is then passed to the configuration machinery as | 
					
						
							|  |  |  |     normal. Note that you can return transformed bytes, e.g. by decrypting | 
					
						
							|  |  |  |     the bytes passed in. | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class ConfigStreamHandler(StreamRequestHandler): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         Handler for a logging configuration request. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         It expects a completely new logging configuration and uses fileConfig | 
					
						
							|  |  |  |         to install it. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         def handle(self): | 
					
						
							|  |  |  |             """
 | 
					
						
							|  |  |  |             Handle a request. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-05 20:39:36 +00:00
										 |  |  |             Each request is expected to be a 4-byte length, packed using | 
					
						
							|  |  |  |             struct.pack(">L", n), followed by the config file. | 
					
						
							|  |  |  |             Uses fileConfig() to do the grunt work. | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |             """
 | 
					
						
							|  |  |  |             try: | 
					
						
							|  |  |  |                 conn = self.connection | 
					
						
							|  |  |  |                 chunk = conn.recv(4) | 
					
						
							|  |  |  |                 if len(chunk) == 4: | 
					
						
							|  |  |  |                     slen = struct.unpack(">L", chunk)[0] | 
					
						
							|  |  |  |                     chunk = self.connection.recv(slen) | 
					
						
							|  |  |  |                     while len(chunk) < slen: | 
					
						
							|  |  |  |                         chunk = chunk + conn.recv(slen - len(chunk)) | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |                     if self.server.verify is not None: | 
					
						
							|  |  |  |                         chunk = self.server.verify(chunk) | 
					
						
							|  |  |  |                     if chunk is not None:   # verified, can process | 
					
						
							|  |  |  |                         chunk = chunk.decode("utf-8") | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                         try: | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |                             import json | 
					
						
							|  |  |  |                             d =json.loads(chunk) | 
					
						
							|  |  |  |                             assert isinstance(d, dict) | 
					
						
							|  |  |  |                             dictConfig(d) | 
					
						
							| 
									
										
										
										
											2012-10-09 08:06:13 +01:00
										 |  |  |                         except Exception: | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |                             #Apply new configuration. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                             file = io.StringIO(chunk) | 
					
						
							|  |  |  |                             try: | 
					
						
							|  |  |  |                                 fileConfig(file) | 
					
						
							| 
									
										
										
										
											2012-10-09 08:06:13 +01:00
										 |  |  |                             except Exception: | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |                                 traceback.print_exc() | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |                     if self.server.ready: | 
					
						
							|  |  |  |                         self.server.ready.set() | 
					
						
							| 
									
										
										
										
											2012-12-18 23:10:48 +02:00
										 |  |  |             except OSError as e: | 
					
						
							| 
									
										
										
										
											2014-03-20 13:03:17 +00:00
										 |  |  |                 if e.errno != RESET_ERROR: | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |                     raise | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class ConfigSocketReceiver(ThreadingTCPServer): | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         A simple TCP socket-based logging config receiver. | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         allow_reuse_address = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def __init__(self, host='localhost', port=DEFAULT_LOGGING_CONFIG_PORT, | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |                      handler=None, ready=None, verify=None): | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |             ThreadingTCPServer.__init__(self, (host, port), handler) | 
					
						
							| 
									
										
										
										
											2023-09-27 17:26:41 +01:00
										 |  |  |             with logging._lock: | 
					
						
							|  |  |  |                 self.abort = 0 | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  |             self.timeout = 1 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             self.ready = ready | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |             self.verify = verify | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         def serve_until_stopped(self): | 
					
						
							|  |  |  |             import select | 
					
						
							|  |  |  |             abort = 0 | 
					
						
							|  |  |  |             while not abort: | 
					
						
							|  |  |  |                 rd, wr, ex = select.select([self.socket.fileno()], | 
					
						
							|  |  |  |                                            [], [], | 
					
						
							|  |  |  |                                            self.timeout) | 
					
						
							|  |  |  |                 if rd: | 
					
						
							|  |  |  |                     self.handle_request() | 
					
						
							| 
									
										
										
										
											2023-09-27 17:26:41 +01:00
										 |  |  |                 with logging._lock: | 
					
						
							|  |  |  |                     abort = self.abort | 
					
						
							| 
									
										
										
										
											2017-09-13 01:44:08 -07:00
										 |  |  |             self.server_close() | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |     class Server(threading.Thread): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |         def __init__(self, rcvr, hdlr, port, verify): | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             super(Server, self).__init__() | 
					
						
							|  |  |  |             self.rcvr = rcvr | 
					
						
							|  |  |  |             self.hdlr = hdlr | 
					
						
							|  |  |  |             self.port = port | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |             self.verify = verify | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             self.ready = threading.Event() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def run(self): | 
					
						
							|  |  |  |             server = self.rcvr(port=self.port, handler=self.hdlr, | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |                                ready=self.ready, | 
					
						
							|  |  |  |                                verify=self.verify) | 
					
						
							| 
									
										
										
										
											2010-06-27 20:54:28 +00:00
										 |  |  |             if self.port == 0: | 
					
						
							|  |  |  |                 self.port = server.server_address[1] | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             self.ready.set() | 
					
						
							|  |  |  |             global _listener | 
					
						
							| 
									
										
										
										
											2023-09-27 17:26:41 +01:00
										 |  |  |             with logging._lock: | 
					
						
							|  |  |  |                 _listener = server | 
					
						
							| 
									
										
											  
											
												Merged revisions 77967,77969,78033,78055,78081,78085,78108 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r77967 | vinay.sajip | 2010-02-04 18:48:53 +0000 (Thu, 04 Feb 2010) | 1 line
  Logging: Implemented PEP 391.
........
  r77969 | vinay.sajip | 2010-02-04 20:18:28 +0000 (Thu, 04 Feb 2010) | 1 line
  Removed spurious print statement.
........
  r78033 | benjamin.peterson | 2010-02-06 22:08:15 +0000 (Sat, 06 Feb 2010) | 1 line
  make waiting for the server to start robust
........
  r78055 | vinay.sajip | 2010-02-07 01:37:08 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7868: logging: added loggerClass attribute to Manager.
........
  r78081 | vinay.sajip | 2010-02-07 12:56:54 +0000 (Sun, 07 Feb 2010) | 1 line
  Issue #7869: logging: improved format-time diagnostics and removed some 1.5.2 support code.
........
  r78085 | vinay.sajip | 2010-02-07 13:06:51 +0000 (Sun, 07 Feb 2010) | 1 line
  logging: Removed some more 1.5.2 support code.
........
  r78108 | vinay.sajip | 2010-02-08 21:18:15 +0000 (Mon, 08 Feb 2010) | 1 line
  logging: gingerly re-enabling skipped tests after improving thread sync code in configurator.
........
											
										 
											2010-02-25 23:13:06 +00:00
										 |  |  |             server.serve_until_stopped() | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-02 15:56:16 +01:00
										 |  |  |     return Server(ConfigSocketReceiver, ConfigStreamHandler, port, verify) | 
					
						
							| 
									
										
										
										
											2002-11-13 16:15:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def stopListening(): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Stop the listening server which was created with a call to listen(). | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2002-11-15 23:33:20 +00:00
										 |  |  |     global _listener | 
					
						
							| 
									
										
										
										
											2023-09-27 17:26:41 +01:00
										 |  |  |     with logging._lock: | 
					
						
							| 
									
										
										
										
											2010-09-25 17:48:25 +00:00
										 |  |  |         if _listener: | 
					
						
							|  |  |  |             _listener.abort = 1 | 
					
						
							|  |  |  |             _listener = None |