Fix logging in test suite

This commit is contained in:
Markus Unterwaditzer 2014-07-04 16:37:01 +02:00
parent 9c076f7278
commit 3abebde87f
3 changed files with 41 additions and 24 deletions

View file

@ -9,10 +9,8 @@
:license: MIT, see LICENSE for more details.
'''
import vdirsyncer.log
from vdirsyncer.utils.compat import text_type
from vdirsyncer.utils.vobject import normalize_item as _normalize_item
vdirsyncer.log.set_level(vdirsyncer.log.logging.DEBUG)
def blow_up(*a, **kw):

19
tests/conftest.py Normal file
View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
'''
tests.conftest
~~~~~~~~~~~~~~
General-purpose fixtures for vdirsyncer's testsuite.
:copyright: (c) 2014 Markus Unterwaditzer & contributors
:license: MIT, see LICENSE for more details.
'''
import pytest
import vdirsyncer.log
@pytest.fixture(autouse=True)
def setup_logging():
vdirsyncer.log.set_level(vdirsyncer.log.logging.DEBUG)
vdirsyncer.log.add_handler(vdirsyncer.log.stdout_handler)

View file

@ -7,6 +7,7 @@
:license: MIT, see LICENSE for more details.
'''
import logging
import sys
import click
@ -26,44 +27,43 @@ class ColorFormatter(logging.Formatter):
if level in self.colors:
prefix = click.style('{}: '.format(level),
**self.colors[level])
record.msg = prefix + record.msg
record.msg = '\n'.join(prefix + x
for x in str(record.msg).splitlines())
return logging.Formatter.format(self, record)
class ClickStream(object):
def write(self, string):
click.echo(string, nl=False)
click.echo(string, file=sys.stderr, nl=False)
stdout_handler = logging.StreamHandler(ClickStream())
stdout_handler.formatter = ColorFormatter()
default_level = logging.INFO
_level = logging.INFO
_handlers = []
def add_handler(handler):
for logger in loggers.values():
logger.addHandler(handler)
def create_logger(name):
x = logging.getLogger(name)
x.setLevel(default_level)
return x
loggers = {}
_loggers = {}
def get(name):
assert name.startswith('vdirsyncer.')
if name not in loggers:
loggers[name] = create_logger(name)
return loggers[name]
if name not in _loggers:
_loggers[name] = x = logging.getLogger(name)
x.handlers = _handlers
x.setLevel(_level)
return _loggers[name]
def add_handler(handler):
if handler not in _handlers:
_handlers.append(handler)
def set_level(level):
global default_level
default_level = level
for logger in loggers.values():
logger.setLevel(level)
global _level
_level = level
for logger in _loggers.values():
logger.setLevel(_level)