Remove pytest-capturelog backward compat code

This commit is contained in:
Thomas Hisch 2017-09-17 14:28:18 +02:00
parent 2559ec8bdb
commit ad21d5cac4
3 changed files with 6 additions and 181 deletions

View File

@ -2,7 +2,6 @@ from __future__ import absolute_import, division, print_function
import logging
from contextlib import closing, contextmanager
import functools
import sys
import pytest
@ -182,9 +181,11 @@ class LogCaptureFixture(object):
logs. Specify a logger name to instead set the level of any
logger.
"""
obj = logger and logging.getLogger(logger) or self.handler
obj.setLevel(level)
if logger is None:
logger = self.handler
else:
logger = logging.getLogger(logger)
logger.setLevel(level)
@contextmanager
def at_level(self, level, logger=None):
@ -207,76 +208,6 @@ class LogCaptureFixture(object):
logger.setLevel(orig_level)
class CallablePropertyMixin(object):
"""Backward compatibility for functions that became properties."""
@classmethod
def compat_property(cls, func):
if isinstance(func, property):
make_property = func.getter
func = func.fget
else:
make_property = property
@functools.wraps(func)
def getter(self):
naked_value = func(self)
ret = cls(naked_value)
ret._naked_value = naked_value
ret._warn_compat = self._warn_compat
ret._prop_name = func.__name__
return ret
return make_property(getter)
def __call__(self):
new = "'caplog.{0}' property".format(self._prop_name)
if self._prop_name == 'records':
new += ' (or caplog.clear())'
self._warn_compat(old="'caplog.{0}()' syntax".format(self._prop_name),
new=new)
return self._naked_value # to let legacy clients modify the object
class CallableList(CallablePropertyMixin, list):
pass
class CallableStr(CallablePropertyMixin, py.builtin.text):
pass
class CompatLogCaptureFixture(LogCaptureFixture):
"""Backward compatibility with pytest-capturelog."""
def _warn_compat(self, old, new):
self._item.warn(code='L1',
message=("{0} is deprecated, use {1} instead"
.format(old, new)))
@CallableStr.compat_property
def text(self):
return super(CompatLogCaptureFixture, self).text
@CallableList.compat_property
def records(self):
return super(CompatLogCaptureFixture, self).records
@CallableList.compat_property
def record_tuples(self):
return super(CompatLogCaptureFixture, self).record_tuples
def setLevel(self, level, logger=None):
self._warn_compat(old="'caplog.setLevel()'",
new="'caplog.set_level()'")
return self.set_level(level, logger)
def atLevel(self, level, logger=None):
self._warn_compat(old="'caplog.atLevel()'",
new="'caplog.at_level()'")
return self.at_level(level, logger)
@pytest.fixture
def caplog(request):
"""Access and control log capturing.
@ -287,7 +218,7 @@ def caplog(request):
* caplog.records() -> list of logging.LogRecord instances
* caplog.record_tuples() -> list of (logger_name, level, message) tuples
"""
return CompatLogCaptureFixture(request.node)
return LogCaptureFixture(request.node)
def get_actual_log_level(config, setting_name):

View File

@ -1,80 +0,0 @@
# -*- coding: utf-8 -*-
import pytest
def test_camel_case_aliases(testdir):
testdir.makepyfile('''
import logging
logger = logging.getLogger(__name__)
def test_foo(caplog):
caplog.setLevel(logging.INFO)
logger.debug('boo!')
with caplog.atLevel(logging.WARNING):
logger.info('catch me if you can')
''')
result = testdir.runpytest()
assert result.ret == 0
with pytest.raises(pytest.fail.Exception):
result.stdout.fnmatch_lines(['*- Captured *log call -*'])
result = testdir.runpytest('-rw')
assert result.ret == 0
result.stdout.fnmatch_lines('''
=*warning* summary*=
*caplog.setLevel()*deprecated*
*caplog.atLevel()*deprecated*
''')
def test_property_call(testdir):
testdir.makepyfile('''
import logging
logger = logging.getLogger(__name__)
def test_foo(caplog):
logger.info('boo %s', 'arg')
assert caplog.text == caplog.text() == str(caplog.text)
assert caplog.records == caplog.records() == list(caplog.records)
assert (caplog.record_tuples ==
caplog.record_tuples() == list(caplog.record_tuples))
''')
result = testdir.runpytest()
assert result.ret == 0
result = testdir.runpytest('-rw')
assert result.ret == 0
result.stdout.fnmatch_lines('''
=*warning* summary*=
*caplog.text()*deprecated*
*caplog.records()*deprecated*
*caplog.record_tuples()*deprecated*
''')
def test_records_modification(testdir):
testdir.makepyfile('''
import logging
logger = logging.getLogger(__name__)
def test_foo(caplog):
logger.info('boo %s', 'arg')
assert caplog.records
assert caplog.records()
del caplog.records()[:] # legacy syntax
assert not caplog.records
assert not caplog.records()
logger.info('foo %s', 'arg')
assert caplog.records
assert caplog.records()
''')
result = testdir.runpytest()
assert result.ret == 0

View File

@ -71,29 +71,3 @@ def test_clear(caplog):
assert len(caplog.records)
caplog.clear()
assert not len(caplog.records)
def test_special_warning_with_del_records_warning(testdir):
p1 = testdir.makepyfile("""
def test_del_records_inline(caplog):
del caplog.records()[:]
""")
result = testdir.runpytest_subprocess(p1)
result.stdout.fnmatch_lines([
"*'caplog.records()' syntax is deprecated,"
" use 'caplog.records' property (or caplog.clear()) instead",
"*1 *warnings*",
])
def test_warning_with_setLevel(testdir):
p1 = testdir.makepyfile("""
def test_inline(caplog):
caplog.setLevel(0)
""")
result = testdir.runpytest_subprocess(p1)
result.stdout.fnmatch_lines([
"*'caplog.setLevel()' is deprecated,"
" use 'caplog.set_level()' instead",
"*1 *warnings*",
])