Merge lp:~jml/pkgme/logging into lp:pkgme

Proposed by Jonathan Lange
Status: Merged
Approved by: James Westby
Approved revision: 72
Merged at revision: 69
Proposed branch: lp:~jml/pkgme/logging
Merge into: lp:pkgme
Diff against target: 131 lines (+111/-0)
3 files modified
pkgme/tests/__init__.py (+1/-0)
pkgme/tests/test_trace.py (+52/-0)
pkgme/trace.py (+58/-0)
To merge this branch: bzr merge lp:~jml/pkgme/logging
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+68396@code.launchpad.net

Description of the change

This is what happens when you go down a rabbit hole on a distracted day.

Very basic logging support, with tests.

To post a comment you must log in.
Revision history for this message
James Westby (james-w) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'pkgme/tests/__init__.py'
--- pkgme/tests/__init__.py 2011-07-14 13:42:04 +0000
+++ pkgme/tests/__init__.py 2011-07-19 15:07:04 +0000
@@ -17,6 +17,7 @@
17 'pkgme.tests.test_script',17 'pkgme.tests.test_script',
18 'pkgme.tests.test_template_file',18 'pkgme.tests.test_template_file',
19 'pkgme.tests.test_testing',19 'pkgme.tests.test_testing',
20 'pkgme.tests.test_trace',
20 'pkgme.tests.test_vala_backend',21 'pkgme.tests.test_vala_backend',
21 'pkgme.tests.test_write',22 'pkgme.tests.test_write',
22 'pkgme.tests.test_write_packaging',23 'pkgme.tests.test_write_packaging',
2324
=== added file 'pkgme/tests/test_trace.py'
--- pkgme/tests/test_trace.py 1970-01-01 00:00:00 +0000
+++ pkgme/tests/test_trace.py 2011-07-19 15:07:04 +0000
@@ -0,0 +1,52 @@
1import os
2
3from fixtures import EnvironmentVariableFixture
4from testtools import TestCase
5from testtools.matchers import MatchesRegex
6
7from pkgme.testing import TempdirFixture
8from pkgme import trace
9
10
11_date_time_re = r'\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d'
12
13class TestLogging(TestCase):
14
15 def with_temp_home(self):
16 temp_dir = self.useFixture(TempdirFixture())
17 self.useFixture(EnvironmentVariableFixture('HOME', temp_dir.path))
18 return temp_dir
19
20 def with_temp_log(self):
21 self.useFixture(trace.LoggingFixture.get_default())
22
23 def test_log_location(self):
24 # We log to the XDG cache home.
25 temp_home = self.with_temp_home()
26 log_location = trace.get_log_location()
27 self.assertEqual(
28 os.path.join(temp_home.path, '.cache', 'pkgme', 'pkgme.log'),
29 log_location)
30
31 def test_log_to_file(self):
32 self.with_temp_log()
33 trace.log("message")
34 log_location = trace.get_log_location()
35 with open(log_location) as f:
36 log_contents = f.read()
37 self.assertThat(
38 log_contents,
39 MatchesRegex(r'%s - INFO - message\n' % (_date_time_re,)))
40
41 def test_log_twice(self):
42 self.with_temp_log()
43 trace.log("first")
44 trace.log("second")
45 log_location = trace.get_log_location()
46 with open(log_location) as f:
47 log_contents = f.read()
48 self.assertThat(
49 log_contents,
50 MatchesRegex(
51 r'%s - INFO - first\n%s - INFO - second\n' % (
52 _date_time_re, _date_time_re)))
053
=== added file 'pkgme/trace.py'
--- pkgme/trace.py 1970-01-01 00:00:00 +0000
+++ pkgme/trace.py 2011-07-19 15:07:04 +0000
@@ -0,0 +1,58 @@
1import logging
2import os
3
4from fixtures import Fixture
5
6from pkgme.write import write_file
7
8
9def get_log_location():
10 """Return the path that we're logging to."""
11 return os.path.expanduser(
12 os.path.join('~', '.cache', 'pkgme', 'pkgme.log'))
13
14
15class LoggingFixture(Fixture):
16
17 def __init__(self, name, filename, level):
18 super(LoggingFixture, self).__init__()
19 self._name = name
20 self._filename = filename
21 self._level = level
22 self._logger = logging.getLogger(self._name)
23
24 def _make_handler(self):
25 # Make sure that the log file exists.
26 write_file(self._filename, '')
27 handler = logging.FileHandler(self._filename)
28 handler.setLevel(self._level)
29 formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
30 handler.setFormatter(formatter)
31 return handler
32
33 def setUp(self):
34 super(LoggingFixture, self).setUp()
35 handler = self._make_handler()
36 loggers = [self._logger, logging.getLogger('debpython')]
37 for logger in loggers:
38 self.addCleanup(
39 setattr, logger, 'handlers', list(logger.handlers))
40 self.addCleanup(logger.setLevel, logger.level)
41 logger.handlers = []
42 logger.addHandler(handler)
43 logger.setLevel(self._level)
44 return self._logger
45
46 @classmethod
47 def get_default(cls, level=logging.INFO):
48 return cls('pkgme', get_log_location(), level)
49
50
51_logger = logging.getLogger('pkgme')
52
53_logging_fixture = LoggingFixture.get_default()
54_logging_fixture.setUp()
55
56
57def log(message):
58 _logger.info(message)

Subscribers

People subscribed via source and target branches