Difference between revisions of "Sugar should bring up an alert when an unhandled python exception occurs"

From Sugar Labs
Jump to navigation Jump to search
Line 16: Line 16:
 
===Method and Implementations===
 
===Method and Implementations===
 
Whenever any uncaught exception is raised, the interpreter calls the sys.excepthook(type,value,traceback). After some discussions at #python, we learnt how this functionality could be used in this scenario and prepared a git diff of the file src/jarabe/journal/journalactivity.py
 
Whenever any uncaught exception is raised, the interpreter calls the sys.excepthook(type,value,traceback). After some discussions at #python, we learnt how this functionality could be used in this scenario and prepared a git diff of the file src/jarabe/journal/journalactivity.py
The following is the git diff. Please find the explanations as comments
 
diff --git a/journalactivity.py b/journalactivity.py
 
index 44cc018..36a2e2e 100644
 
--- a/journalactivity.py
 
+++ b/journalactivity.py
 
@@ -358,8 +358,20 @@ class JournalActivity(Window):
 
        self.show_main_view()
 
        self.search_grab_focus()
 
  
''' Defining an Error Alert function in the Journal Activity Class which displays the message as
+
===Code===
  
Operation could not be performed
+
The following is the git diff. Please find the explanations as comments -
Please check the logviewer activity for details
 
and an OK button
 
'''
 
  
+
http://pastebin.com/7mEnHVVN
+    def uncaught_exception_alert(self):
 
+        alert = ErrorAlert(title="Operation could not be performed", msg="Please check the logviewer activity for details ")
 
+    alert.connect('response', self.__alert_response_cb)
 
+    self.add_alert(alert)
 
+    alert.show()
 
+
 
_journal = None
 
 
'''
 
Defining a function which logs the unhandled exception as well as calls the Error Alert in the Journal whenever any uncaught exception occurs
 
'''
 
  
+def _alert_excepthook(exc_type, exc_value, traceback):
 
+    logging.exception('Unhandled Python exception: %s', repr((exc_type, exc_value, traceback)))
 
+    _journal.uncaught_exception_alert() 
 
+
 
'''
 
When an exception is raised and uncaught, sys.excepthook is called with three arguments, the exception class, exception instance, and a traceback object.The function _alert_excepthook is called only when an unhandled exception occurs.
 
'''
 
 
+sys.excepthook = _alert_excepthook
 
+
 
def get_journal():
 
    global _journal
 
    if _journal is None:
 
 
 
 
However, the above code caught the unhandled exceptions for only journal files  and displayed an error alert in the journal except for journalactivity.py. I realized that whenever any unhandled exception occurs in the file the ‘Journal’ icon itself disappears and there is no other way to go the Journal.
 
However, the above code caught the unhandled exceptions for only journal files  and displayed an error alert in the journal except for journalactivity.py. I realized that whenever any unhandled exception occurs in the file the ‘Journal’ icon itself disappears and there is no other way to go the Journal.
 
  
 
===Feedback===
 
===Feedback===

Revision as of 18:09, 1 November 2010

Sugar should bring up an alert when an unhandled python exception occurs

Background Research

Ideally, all exceptions are caught and this scenario should never happen. However, currently, users are left wondering why a certain operation could not be performed and there is nothing to direct them towards their logs which is full of tracebacks. Therefore, it was required to print a notification alert whenever such a thing happens which stated “The operation requested could not be performed. Please check the logviewer activity for details” However, there was some confusion between whether the ‘unhandled’ exceptions were being talked about as Daniel Drake suspected that they were referring to exceptions that are not handled gracefully and instead fall back to a catch-all handler which does not have the knowledge to act on them because technically the exceptions are not unhandled, if they were unhandled then sugar would crash. Tomeu had expressed his desire to use the (Automated Bug Reporting Tool) -abrt functionality used by python processes for such issues. However, that would require some major changes and integration with the school server. In my frequent conversations with Aleksey at IRC- #ubuntu-sugarteam regarding the issue, Aleksey expressed that the bug was undesirable to him and that he preferred something like a bug report. He also mentioned that any proper fix for the bug would be too invasive. Initial Approach: Since, any exception is always logged. Thus, if we could check whether logging.ERROR has been called, there ,an exception has occured .Therefore, if we introduce a flag which attains True value when an exception occurs, and by checking the value of the flag in a GUI file we can generate an alert/notification. For this purpose, I had tried to get a git diff of the sugar.logger and posted on sugar-devel for feedback. However, this approach had major drawbacks as sugar uses standard python logging and any changes in that would be too invasive and inefficient.

Method and Implementations

Whenever any uncaught exception is raised, the interpreter calls the sys.excepthook(type,value,traceback). After some discussions at #python, we learnt how this functionality could be used in this scenario and prepared a git diff of the file src/jarabe/journal/journalactivity.py

Code

The following is the git diff. Please find the explanations as comments -

http://pastebin.com/7mEnHVVN

However, the above code caught the unhandled exceptions for only journal files and displayed an error alert in the journal except for journalactivity.py. I realized that whenever any unhandled exception occurs in the file the ‘Journal’ icon itself disappears and there is no other way to go the Journal.

Feedback

1. To catch all unhandled python exceptions in sugar, where exactly should we be looking forward to be the venue for adding the functionality?

   Adding it in journalactivity.py doesn't seem to serve all purposes. It has to be added somewhere which is being used all the time.

2. Which GUI feature should be used to add the alert> Adding an alert in Journal looks fine for only Journal related exceptions.