Make packaging.tests.support.LoggingCatcher.get_logs flush the log handler.

This removes the need to call flush manually in each test, except when
testing code that creates warning without checking them.
This commit is contained in:
Éric Araujo 2011-06-02 14:53:59 +02:00
parent 5da37be7f2
commit 78af7d8392
3 changed files with 19 additions and 15 deletions

View file

@ -90,17 +90,23 @@ class LoggingCatcher:
def get_logs(self, *levels): def get_logs(self, *levels):
"""Return all log messages with level in *levels*. """Return all log messages with level in *levels*.
Without explicit levels given, returns all messages. Without explicit levels given, returns all messages. *levels* defaults
*levels* defaults to all levels. For log calls with arguments (i.e. to all levels. For log calls with arguments (i.e.
logger.info('bla bla %s', arg)), the messages logger.info('bla bla %r', arg)), the messages will be formatted before
Returns a list. being returned (e.g. "bla bla 'thing'").
Returns a list. Automatically flushes the loghandler after being
called.
Example: self.get_logs(logging.WARN, logging.DEBUG). Example: self.get_logs(logging.WARN, logging.DEBUG).
""" """
if not levels: if not levels:
return [log.getMessage() for log in self.loghandler.buffer] messages = [log.getMessage() for log in self.loghandler.buffer]
return [log.getMessage() for log in self.loghandler.buffer else:
messages = [log.getMessage() for log in self.loghandler.buffer
if log.levelno in levels] if log.levelno in levels]
self.loghandler.flush()
return messages
class TempdirManager: class TempdirManager:

View file

@ -36,7 +36,6 @@ class CheckTestCase(support.LoggingCatcher,
# now let's add the required fields # now let's add the required fields
# and run it again, to make sure we don't get # and run it again, to make sure we don't get
# any warning anymore # any warning anymore
self.loghandler.flush()
metadata = {'home_page': 'xxx', 'author': 'xxx', metadata = {'home_page': 'xxx', 'author': 'xxx',
'author_email': 'xxx', 'author_email': 'xxx',
'name': 'xxx', 'version': '4.2', 'name': 'xxx', 'version': '4.2',
@ -50,8 +49,10 @@ class CheckTestCase(support.LoggingCatcher,
self.assertRaises(PackagingSetupError, self._run, self.assertRaises(PackagingSetupError, self._run,
{'name': 'xxx', 'version': 'xxx'}, **{'strict': 1}) {'name': 'xxx', 'version': 'xxx'}, **{'strict': 1})
# and of course, no error when all metadata fields are present # clear warnings from the previous calls
self.loghandler.flush() self.loghandler.flush()
# and of course, no error when all metadata fields are present
cmd = self._run(metadata, strict=True) cmd = self._run(metadata, strict=True)
self.assertEqual([], self.get_logs(logging.WARNING)) self.assertEqual([], self.get_logs(logging.WARNING))
@ -70,7 +71,6 @@ class CheckTestCase(support.LoggingCatcher,
'name': 'xxx', 'version': '4.2', 'name': 'xxx', 'version': '4.2',
'requires_python': '2.4', 'requires_python': '2.4',
} }
self.loghandler.flush()
cmd = self._run(metadata) cmd = self._run(metadata)
self.assertEqual([], self.get_logs(logging.WARNING)) self.assertEqual([], self.get_logs(logging.WARNING))
@ -85,9 +85,11 @@ class CheckTestCase(support.LoggingCatcher,
self.assertRaises(PackagingSetupError, self._run, metadata, self.assertRaises(PackagingSetupError, self._run, metadata,
**{'strict': 1}) **{'strict': 1})
# clear warnings from the previous calls
self.loghandler.flush()
# now with correct version format again # now with correct version format again
metadata['version'] = '4.2' metadata['version'] = '4.2'
self.loghandler.flush()
cmd = self._run(metadata, strict=True) cmd = self._run(metadata, strict=True)
self.assertEqual([], self.get_logs(logging.WARNING)) self.assertEqual([], self.get_logs(logging.WARNING))
@ -100,7 +102,6 @@ class CheckTestCase(support.LoggingCatcher,
cmd.check_restructuredtext() cmd.check_restructuredtext()
self.assertEqual(len(self.get_logs(logging.WARNING)), 1) self.assertEqual(len(self.get_logs(logging.WARNING)), 1)
self.loghandler.flush()
pkg_info, dist = self.create_dist(description='title\n=====\n\ntest') pkg_info, dist = self.create_dist(description='title\n=====\n\ntest')
cmd = check(dist) cmd = check(dist)
cmd.check_restructuredtext() cmd.check_restructuredtext()

View file

@ -50,9 +50,6 @@ class ManifestTestCase(support.TempdirManager,
for warning in warnings: for warning in warnings:
self.assertIn('no files found matching', warning) self.assertIn('no files found matching', warning)
# reset logs for the next assert
self.loghandler.flush()
# manifest also accepts file-like objects # manifest also accepts file-like objects
with open(MANIFEST) as f: with open(MANIFEST) as f:
manifest.read_template(f) manifest.read_template(f)