diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 55d5f4cf6..9797d7c24 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,9 @@ +2006-01-05 Richard Taylor + * src/GrampsLogger/__init__.py: added package interface + * src/GrampsLogger/_ErrorReportAssistant.py: enable rotate_handler output + * src/GrampsLogger/_RotateHandler.py: enable rotate_handler output + * test/GrampsLogger/GtkHandler_Test.py: add test for rotate_handler output + 2006-01-05 Richard Taylor * src/Assistant.py: added callback support for pages * src/GrampsLogger/_ErrorReportAssistant.py src/GrampsLogger/_ErrorView.py diff --git a/gramps2/src/GrampsLogger/_ErrorReportAssistant.py b/gramps2/src/GrampsLogger/_ErrorReportAssistant.py index beb749e28..4391b0a69 100644 --- a/gramps2/src/GrampsLogger/_ErrorReportAssistant.py +++ b/gramps2/src/GrampsLogger/_ErrorReportAssistant.py @@ -89,7 +89,9 @@ class ErrorReportAssistant: textview = gtk.TextView() self._error_details_text_buffer = textview.get_buffer() - self._error_details_text_buffer.set_text(self._error_detail) + self._error_details_text_buffer.set_text("\n".join(self._rotate_handler.get_formatted_log()) + + "\n\n" + + self._error_detail) sw.add(textview) sw.show() @@ -117,7 +119,8 @@ class ErrorReportAssistant: textview = gtk.TextView() self._sys_information_text_buffer = textview.get_buffer() - self._sys_information_text_buffer.set_text(self._get_sys_information()) + self._sys_information_text_buffer.set_text( + self._get_sys_information()) sw.add(textview) sw.show() diff --git a/gramps2/src/GrampsLogger/_RotateHandler.py b/gramps2/src/GrampsLogger/_RotateHandler.py index 3d36b7104..726dc78f9 100644 --- a/gramps2/src/GrampsLogger/_RotateHandler.py +++ b/gramps2/src/GrampsLogger/_RotateHandler.py @@ -31,6 +31,16 @@ class RotateHandler(logging.Handler): return [record for record in self._buffer[self._index:] + self._buffer[:self._index] if record is not None] + def get_formatted_log(self): + """ + Return the log buffer after it has been formatted. + + Returns a list of strings. + """ + + return [self.format(record) for record in self._buffer[self._index:] + self._buffer[:self._index] + if record is not None] + def set_capacity(self,capacity): """ Set the number of log records that will be stored. diff --git a/gramps2/src/GrampsLogger/__init__.py b/gramps2/src/GrampsLogger/__init__.py new file mode 100644 index 000000000..caa4385ea --- /dev/null +++ b/gramps2/src/GrampsLogger/__init__.py @@ -0,0 +1,46 @@ +""" +This package implements some extensions to the standard Python logging module that +support a consistent logging and bug reporting framework for Gramps. + +The package provides: + + GtkHandler - a log handler that will pop up a gtk dialog when a log message is + sent to it. The dialog offers the user the chance to start + ErrorReportAssistant to send a bug report. + + RotateHandler - a log handler that just keeps a rotating buffer of the last N + log messages sent to it. This can be used with the GtkHandler to + pass a history of log messages to the ErrorReportAssistant. + +Usage: + + These handlers can be used in same way a all the other logger module handlers. + + Simple example: + + from GrampsLogger import GtkHandler, RotateHandler + + rh = RotateHandler(capacity=20) + rh.setLevel(logging.DEBUG) + + gtkh = GtkHandler(rotate_handler=rh) + gtkh.setLevel(logging.ERROR) + + l = logging.getLogger("GtkHandlerTest") + l.setLevel(logging.DEBUG) + + l.addHandler(rh) + l.addHandler(gtkh) + + log_message = "Debug message" + try: + wibble + except: + l.error(log_message,exc_info=True) + + gtk.main() + +""" + +from _GtkHandler import GtkHandler +from _RotateHandler import RotateHandler diff --git a/gramps2/test/GrampsLogger/GtkHandler_Test.py b/gramps2/test/GrampsLogger/GtkHandler_Test.py index 6f6d6232e..36c8f1bcd 100644 --- a/gramps2/test/GrampsLogger/GtkHandler_Test.py +++ b/gramps2/test/GrampsLogger/GtkHandler_Test.py @@ -12,29 +12,35 @@ logger = logging.getLogger('Gramps.Tests.GrampsLogger') import const const.rootDir = "../../src" -import _GtkHandler - +from GrampsLogger import GtkHandler, RotateHandler class GtkHandlerTest(unittest.TestCase): """Test the GtkHandler.""" def test_window(self): """Test that the window appears.""" - - rh = _GtkHandler.GtkHandler() - l = logging.getLogger("GtkHandlerTest") - l.setLevel(logging.ERROR) - - l.addHandler(rh) + rh = RotateHandler(capacity=20) + rh.setLevel(logging.DEBUG) + + gtkh = GtkHandler(rotate_handler=rh) + gtkh.setLevel(logging.ERROR) + + l = logging.getLogger("GtkHandlerTest") + l.setLevel(logging.DEBUG) + + l.addHandler(rh) + l.addHandler(gtkh) + + l.info("An info message") + l.warn("A warn message") + l.debug("A debug message") log_message = "Debug message" try: wibble except: l.error(log_message,exc_info=True) - l.removeHandler(rh) - gtk.main()