Remove pytest-capturelog backward compat code
This commit is contained in:
parent
2559ec8bdb
commit
ad21d5cac4
|
@ -2,7 +2,6 @@ from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from contextlib import closing, contextmanager
|
from contextlib import closing, contextmanager
|
||||||
import functools
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -182,9 +181,11 @@ class LogCaptureFixture(object):
|
||||||
logs. Specify a logger name to instead set the level of any
|
logs. Specify a logger name to instead set the level of any
|
||||||
logger.
|
logger.
|
||||||
"""
|
"""
|
||||||
|
if logger is None:
|
||||||
obj = logger and logging.getLogger(logger) or self.handler
|
logger = self.handler
|
||||||
obj.setLevel(level)
|
else:
|
||||||
|
logger = logging.getLogger(logger)
|
||||||
|
logger.setLevel(level)
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def at_level(self, level, logger=None):
|
def at_level(self, level, logger=None):
|
||||||
|
@ -207,76 +208,6 @@ class LogCaptureFixture(object):
|
||||||
logger.setLevel(orig_level)
|
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
|
@pytest.fixture
|
||||||
def caplog(request):
|
def caplog(request):
|
||||||
"""Access and control log capturing.
|
"""Access and control log capturing.
|
||||||
|
@ -287,7 +218,7 @@ def caplog(request):
|
||||||
* caplog.records() -> list of logging.LogRecord instances
|
* caplog.records() -> list of logging.LogRecord instances
|
||||||
* caplog.record_tuples() -> list of (logger_name, level, message) tuples
|
* 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):
|
def get_actual_log_level(config, setting_name):
|
||||||
|
|
|
@ -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
|
|
|
@ -71,29 +71,3 @@ def test_clear(caplog):
|
||||||
assert len(caplog.records)
|
assert len(caplog.records)
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
assert not len(caplog.records)
|
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*",
|
|
||||||
])
|
|
||||||
|
|
Loading…
Reference in New Issue