pep8 love.

This commit is contained in:
Ryan Petrello
2012-03-30 13:11:44 -04:00
parent 5bd40db68c
commit c9d2a679ac
6 changed files with 291 additions and 274 deletions

View File

@@ -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<prefix>[a-z]+)://(?P<suffix>.*)$')
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()

View File

@@ -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

View File

@@ -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

View File

@@ -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.
'''

View File

@@ -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
'''

View File

@@ -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([