From c9d2a679ac9a8fbd8ead2a354a310b2b8cee2613 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Fri, 30 Mar 2012 13:11:44 -0400 Subject: [PATCH] pep8 love. --- pecan/compat/dictconfig.py | 61 ++-- pecan/middleware/errordocument.py | 2 +- pecan/rest.py | 12 +- pecan/routing.py | 2 +- pecan/templating.py | 6 +- pecan/tests/compat/test_dictconfig.py | 482 +++++++++++++------------- 6 files changed, 291 insertions(+), 274 deletions(-) diff --git a/pecan/compat/dictconfig.py b/pecan/compat/dictconfig.py index 30ee64f..d077d00 100644 --- a/pecan/compat/dictconfig.py +++ b/pecan/compat/dictconfig.py @@ -21,6 +21,7 @@ import types IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) + def valid_ident(s): m = IDENTIFIER.match(s) if not m: @@ -33,7 +34,7 @@ def valid_ident(s): try: from logging import _checkLevel except ImportError: - def _checkLevel(level): + def _checkLevel(level): # noqa if isinstance(level, int): rv = level elif str(level) == level: @@ -54,6 +55,7 @@ except ImportError: # Each wrapper should have a configurator attribute holding the actual # configurator to use for conversion. + class ConvertingDict(dict): """A converting dictionary wrapper.""" @@ -68,7 +70,7 @@ class ConvertingDict(dict): result.parent = self result.key = key return result - + def get(self, key, default=None): value = dict.get(self, key, default) result = self.configurator.convert(value) @@ -80,7 +82,7 @@ class ConvertingDict(dict): result.parent = self result.key = key return result - + def pop(self, key, default=None): value = dict.pop(self, key, default) result = self.configurator.convert(value) @@ -91,6 +93,7 @@ class ConvertingDict(dict): result.key = key return result + class ConvertingList(list): """A converting list wrapper.""" def __getitem__(self, key): @@ -114,6 +117,7 @@ class ConvertingList(list): result.parent = self return result + class ConvertingTuple(tuple): """A converting tuple wrapper.""" def __getitem__(self, key): @@ -126,11 +130,12 @@ class ConvertingTuple(tuple): result.key = key return result + class BaseConfigurator(object): """ The configurator base class which defines some useful defaults. """ - + CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') @@ -139,8 +144,8 @@ class BaseConfigurator(object): DIGIT_PATTERN = re.compile(r'^\d+$') value_converters = { - 'ext' : 'ext_convert', - 'cfg' : 'cfg_convert', + 'ext': 'ext_convert', + 'cfg': 'cfg_convert', } # We might want to use a different one, e.g. importlib @@ -176,7 +181,7 @@ class BaseConfigurator(object): 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 @@ -199,7 +204,7 @@ class BaseConfigurator(object): d = d[idx] else: try: - n = int(idx) # try as number first (most likely) + n = int(idx) # try as number first d = d[n] except TypeError: d = d[idx] @@ -227,7 +232,7 @@ class BaseConfigurator(object): isinstance(value, tuple): value = ConvertingTuple(value) value.configurator = self - elif isinstance(value, basestring): # str for py3k + elif isinstance(value, basestring): # str for py3k m = self.CONVERT_PATTERN.match(value) if m: d = m.groupdict() @@ -238,11 +243,12 @@ class BaseConfigurator(object): 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('()') - if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and type(c) != types.ClassType: + if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and \ + type(c) != types.ClassType: c = self.resolve(c) props = config.pop('.', None) # Check for valid identifiers @@ -259,6 +265,7 @@ class BaseConfigurator(object): value = tuple(value) return value + class DictConfigurator(BaseConfigurator): """ Configure logging using a dictionary-like object to describe the @@ -285,7 +292,7 @@ class DictConfigurator(BaseConfigurator): for name in handlers: if name not in logging._handlers: raise ValueError('No handler found with ' - 'name %r' % name) + 'name %r' % name) else: try: handler = logging._handlers[name] @@ -312,10 +319,10 @@ class DictConfigurator(BaseConfigurator): 'logger: %s' % e) else: disable_existing = config.pop('disable_existing_loggers', True) - + logging._handlers.clear() del logging._handlerList[:] - + # Do formatters first - they don't refer to anything else formatters = config.get('formatters', EMPTY_DICT) for name in formatters: @@ -347,7 +354,7 @@ class DictConfigurator(BaseConfigurator): raise ValueError('Unable to configure handler ' '%r: %s' % (name, e)) # 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, @@ -374,7 +381,7 @@ class DictConfigurator(BaseConfigurator): prefixed = name + "." pflen = len(prefixed) num_existing = len(existing) - i = i + 1 # look at the entry after name + i = i + 1 # look at the entry after name while (i < num_existing) and\ (existing[i][:pflen] == prefixed): child_loggers.append(existing[i]) @@ -385,7 +392,7 @@ class DictConfigurator(BaseConfigurator): except StandardError, e: raise ValueError('Unable to configure logger ' '%r: %s' % (name, e)) - + #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. @@ -399,12 +406,12 @@ class DictConfigurator(BaseConfigurator): logger.propagate = True elif disable_existing: logger.disabled = True - + # And finally, do the root logger root = config.get('root', None) if root: try: - self.configure_root(root) + self.configure_root(root) except StandardError, e: raise ValueError('Unable to configure root ' 'logger: %s' % e) @@ -414,7 +421,7 @@ class DictConfigurator(BaseConfigurator): def configure_formatter(self, config): """Configure a formatter from a dictionary.""" if '()' in config: - factory = config['()'] # for use in exception handler + factory = config['()'] # for use in exception handler try: result = self.configure_custom(config) except TypeError, te: @@ -432,7 +439,7 @@ class DictConfigurator(BaseConfigurator): dfmt = config.get('datefmt', None) result = logging.Formatter(fmt, dfmt) return result - + def configure_filter(self, config): """Configure a filter from a dictionary.""" if '()' in config: @@ -463,7 +470,8 @@ class DictConfigurator(BaseConfigurator): filters = config.pop('filters', None) if '()' in config: c = config.pop('()') - if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and type(c) != types.ClassType: + if not hasattr(c, '__call__') and hasattr(types, 'ClassType') and \ + type(c) != types.ClassType: c = self.resolve(c) factory = c else: @@ -472,7 +480,9 @@ class DictConfigurator(BaseConfigurator): if issubclass(klass, logging.handlers.MemoryHandler) and\ 'target' in config: try: - config['target'] = self.config['handlers'][config['target']] + config['target'] = self.config['handlers'][ + config['target'] + ] except StandardError, e: raise ValueError('Unable to set target handler ' '%r: %s' % (config['target'], e)) @@ -528,7 +538,7 @@ class DictConfigurator(BaseConfigurator): 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) @@ -536,7 +546,7 @@ class DictConfigurator(BaseConfigurator): 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() @@ -544,6 +554,7 @@ class DictConfigurator(BaseConfigurator): dictConfigClass = DictConfigurator + def dictConfig(config): """Configure logging using a dictionary.""" dictConfigClass(config).configure() diff --git a/pecan/middleware/errordocument.py b/pecan/middleware/errordocument.py index 22443cc..a4a7021 100644 --- a/pecan/middleware/errordocument.py +++ b/pecan/middleware/errordocument.py @@ -39,7 +39,7 @@ class ErrorDocumentMiddleware(object): ''' Intersects HTTP response status code, looks it up in the error map defined in the Pecan app config.py, and routes to the controller assigned to that - status. + status. ''' def __init__(self, app, error_map): self.app = app diff --git a/pecan/rest.py b/pecan/rest.py index 612255a..fc6d5e5 100644 --- a/pecan/rest.py +++ b/pecan/rest.py @@ -9,11 +9,11 @@ from util import iscontroller class RestController(object): ''' A base class for ``REST`` based controllers. Inherit from this class - to implement a REST controller. - + to implement a REST controller. + ``RestController`` implements a set of routing functions which override the default pecan routing with behavior consistent with RESTful routing. - This functionality covers navigation to the requested resource + This functionality covers navigation to the requested resource controllers, and the appropriate handling of both the common (``GET``, ``POST``, ``PUT``, ``DELETE``) as well as custom-defined REST action methods. @@ -22,12 +22,12 @@ class RestController(object): :ref:`rest`. ''' _custom_actions = {} - + @expose() def _route(self, args): ''' Routes a request to the appropriate controller and returns its result. - + Performs a bit of validation - refuses to route delete and put actions via a GET request). ''' @@ -70,7 +70,7 @@ class RestController(object): def _find_sub_controllers(self, remainder): ''' - Identifies the correct controller to route to by analyzing the + Identifies the correct controller to route to by analyzing the request URI. ''' # need either a get_one or get to parse args diff --git a/pecan/routing.py b/pecan/routing.py index 6fe219e..d38c22e 100644 --- a/pecan/routing.py +++ b/pecan/routing.py @@ -63,7 +63,7 @@ def lookup_controller(obj, url_path): def find_object(obj, remainder, notfound_handlers): ''' - 'Walks' the url path in search of an action for which a controller is + 'Walks' the url path in search of an action for which a controller is implemented and returns that controller object along with what's left of the remainder. ''' diff --git a/pecan/templating.py b/pecan/templating.py index ff8eb6b..5089e9e 100644 --- a/pecan/templating.py +++ b/pecan/templating.py @@ -24,7 +24,7 @@ class JsonRenderer(object): # TODO: add error formatter for json (pass it through json lint?) -_builtin_renderers['json'] = JsonRenderer +_builtin_renderers['json'] = JsonRenderer # # Genshi rendering engine @@ -218,7 +218,7 @@ class ExtraNamespace(object): def update(self, d): ''' - Updates the extra variable dictionary for the namespace. + Updates the extra variable dictionary for the namespace. ''' self.namespace.update(d) @@ -270,7 +270,7 @@ class RendererFactory(object): def get(self, name, template_path): ''' Returns the renderer object. - + :param name: name of the requested renderer :param template_path: path to the template ''' diff --git a/pecan/tests/compat/test_dictconfig.py b/pecan/tests/compat/test_dictconfig.py index b6dc782..aba824c 100644 --- a/pecan/tests/compat/test_dictconfig.py +++ b/pecan/tests/compat/test_dictconfig.py @@ -106,20 +106,25 @@ class BaseTest(unittest.TestCase): self.message_num += 1 return "%d" % self.message_num + class ExceptionFormatter(logging.Formatter): """A special exception formatter.""" def formatException(self, ei): return "Got a [%s]" % ei[0].__name__ + def formatFunc(format, datefmt=None): return logging.Formatter(format, datefmt) + def handlerFunc(): return logging.StreamHandler() + class CustomHandler(logging.StreamHandler): pass + class ConfigDictTest(BaseTest): """Reading logging config from a dictionary.""" @@ -130,21 +135,21 @@ class ConfigDictTest(BaseTest): config0 = { 'version': 1, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'root' : { - 'level' : 'WARNING', - 'handlers' : ['hand1'], + 'root': { + 'level': 'WARNING', + 'handlers': ['hand1'], }, } @@ -152,392 +157,391 @@ class ConfigDictTest(BaseTest): config1 = { 'version': 1, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } # config2 has a subtle configuration error that should be reported config2 = { 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdbout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdbout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } #As config1 but with a misspelt level on a handler config2a = { 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NTOSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NTOSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } - + } #As config1 but with a misspelt level on a logger config2b = { 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WRANING', + 'root': { + 'level': 'WRANING', }, - } + } # config3 has a less subtle configuration error config3 = { 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'misspelled_name', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'misspelled_name', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } # config4 specifies a custom formatter class to be loaded config4 = { 'version': 1, 'formatters': { - 'form1' : { - '()' : __name__ + '.ExceptionFormatter', - 'format' : '%(levelname)s:%(name)s:%(message)s', + 'form1': { + '()': __name__ + '.ExceptionFormatter', + 'format': '%(levelname)s:%(name)s:%(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'root' : { - 'level' : 'NOTSET', - 'handlers' : ['hand1'], + 'root': { + 'level': 'NOTSET', + 'handlers': ['hand1'], }, - } + } # As config4 but using an actual callable rather than a string config4a = { 'version': 1, 'formatters': { - 'form1' : { - '()' : ExceptionFormatter, - 'format' : '%(levelname)s:%(name)s:%(message)s', + 'form1': { + '()': ExceptionFormatter, + 'format': '%(levelname)s:%(name)s:%(message)s', }, - 'form2' : { - '()' : __name__ + '.formatFunc', - 'format' : '%(levelname)s:%(name)s:%(message)s', + 'form2': { + '()': __name__ + '.formatFunc', + 'format': '%(levelname)s:%(name)s:%(message)s', }, - 'form3' : { - '()' : formatFunc, - 'format' : '%(levelname)s:%(name)s:%(message)s', + 'form3': { + '()': formatFunc, + 'format': '%(levelname)s:%(name)s:%(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, - 'hand2' : { - '()' : handlerFunc, + 'hand2': { + '()': handlerFunc, }, }, - 'root' : { - 'level' : 'NOTSET', - 'handlers' : ['hand1'], + 'root': { + 'level': 'NOTSET', + 'handlers': ['hand1'], }, - } + } # config5 specifies a custom handler class to be loaded config5 = { 'version': 1, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : __name__ + '.CustomHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': __name__ + '.CustomHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } # config6 specifies a custom handler class to be loaded # but has bad arguments config6 = { 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : __name__ + '.CustomHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', - '9' : 'invalid parameter name', + 'handlers': { + 'hand1': { + 'class': __name__ + '.CustomHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', + '9': 'invalid parameter name', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } #config 7 does not define compiler.parser but defines compiler.lexer #so compiler.parser should be disabled after applying it config7 = { 'version': 1, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.lexer' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.lexer': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } config8 = { 'version': 1, - 'disable_existing_loggers' : False, + 'disable_existing_loggers': False, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler' : { - 'level' : 'DEBUG', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler': { + 'level': 'DEBUG', + 'handlers': ['hand1'], }, - 'compiler.lexer' : { + 'compiler.lexer': { }, }, - 'root' : { - 'level' : 'WARNING', + 'root': { + 'level': 'WARNING', }, - } + } config9 = { 'version': 1, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'WARNING', - 'stream' : 'ext://sys.stdout', + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'WARNING', + 'stream': 'ext://sys.stdout', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'WARNING', - 'handlers' : ['hand1'], + 'loggers': { + 'compiler.parser': { + 'level': 'WARNING', + 'handlers': ['hand1'], }, }, - 'root' : { - 'level' : 'NOTSET', + 'root': { + 'level': 'NOTSET', }, - } + } config9a = { 'version': 1, - 'incremental' : True, - 'handlers' : { - 'hand1' : { - 'level' : 'WARNING', + 'incremental': True, + 'handlers': { + 'hand1': { + 'level': 'WARNING', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'INFO', + 'loggers': { + 'compiler.parser': { + 'level': 'INFO', }, }, - } + } config9b = { 'version': 1, - 'incremental' : True, - 'handlers' : { - 'hand1' : { - 'level' : 'INFO', + 'incremental': True, + 'handlers': { + 'hand1': { + 'level': 'INFO', }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'INFO', + 'loggers': { + 'compiler.parser': { + 'level': 'INFO', }, }, - } + } #As config1 but with a filter added config10 = { 'version': 1, 'formatters': { - 'form1' : { - 'format' : '%(levelname)s ++ %(message)s', + 'form1': { + 'format': '%(levelname)s ++ %(message)s', }, }, - 'filters' : { - 'filt1' : { - 'name' : 'compiler.parser', + 'filters': { + 'filt1': { + 'name': 'compiler.parser', }, }, - 'handlers' : { - 'hand1' : { - 'class' : 'logging.StreamHandler', - 'formatter' : 'form1', - 'level' : 'NOTSET', - 'stream' : 'ext://sys.stdout', - 'filters' : ['filt1'], + 'handlers': { + 'hand1': { + 'class': 'logging.StreamHandler', + 'formatter': 'form1', + 'level': 'NOTSET', + 'stream': 'ext://sys.stdout', + 'filters': ['filt1'], }, }, - 'loggers' : { - 'compiler.parser' : { - 'level' : 'DEBUG', - 'filters' : ['filt1'], + 'loggers': { + 'compiler.parser': { + 'level': 'DEBUG', + 'filters': ['filt1'], }, }, - 'root' : { - 'level' : 'WARNING', - 'handlers' : ['hand1'], + 'root': { + 'level': 'WARNING', + 'handlers': ['hand1'], }, - } + } def apply_config(self, conf): dictConfig(conf) @@ -690,15 +694,17 @@ class ConfigDictTest(BaseTest): with captured_stdout() as output: self.apply_config(self.config9) logger = logging.getLogger("compiler.parser") - #Nothing will be output since both handler and logger are set to WARNING + # Nothing will be output since both handler and logger are + # set to WARNING logger.info(self.next_message()) self.assert_log_lines([], stream=output) self.apply_config(self.config9a) - #Nothing will be output since both handler is still set to WARNING + # Nothing will be output since both handler is still set + # to WARNING logger.info(self.next_message()) self.assert_log_lines([], stream=output) self.apply_config(self.config9b) - #Message should now be output + # Message should now be output logger.info(self.next_message()) if sys.version_info[:2] == (2, 7): self.assert_log_lines([