[CalendarServer-changes] [9135] CalendarServer/trunk/calendarserver/tools/shell/terminal.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Apr 16 16:19:34 PDT 2012


Revision: 9135
          http://trac.macosforge.org/projects/calendarserver/changeset/9135
Author:   wsanchez at apple.com
Date:     2012-04-16 16:19:34 -0700 (Mon, 16 Apr 2012)
Log Message:
-----------
Add handleFailure().

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/shell/terminal.py

Modified: CalendarServer/trunk/calendarserver/tools/shell/terminal.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/terminal.py	2012-04-16 23:17:38 UTC (rev 9134)
+++ CalendarServer/trunk/calendarserver/tools/shell/terminal.py	2012-04-16 23:19:34 UTC (rev 9135)
@@ -35,6 +35,7 @@
 from shlex import shlex
 
 from twisted.python import log
+from twisted.python.failure import Failure
 from twisted.python.text import wordWrap
 from twisted.python.usage import Options, UsageError
 from twisted.internet.defer import Deferred
@@ -187,7 +188,7 @@
         log.startLoggingWithObserver(observer)
 
     def handle_INT(self):
-        return self.resetLine()
+        return self.resetInputLine()
 
     def handle_EOF(self):
         if self.lineBuffer:
@@ -224,7 +225,7 @@
         self.terminal.cursorHome()
         self.drawInputLine()
 
-    def resetLine(self):
+    def resetInputLine(self):
         """
         Reset the current input variables to their initial state.
         """
@@ -257,8 +258,11 @@
             m = getattr(self.commands, "complete_%s" % (cmd,), None)
             if not m:
                 return
-            completions = tuple((yield m(tokens)))
-
+            try:
+                completions = tuple((yield m(tokens)))
+            except Exception, e:
+                self.handleFailure(Failure(e))
+                return
             log.msg("COMPLETIONS: %r" % (completions,))
         else:
             # Completing command name
@@ -284,6 +288,18 @@
         self.terminal.loseConnection()
         self.service.reactor.stop()
 
+    def handleFailure(self, f):
+        """
+        Handle a failure raises in the interpreter by printing a
+        traceback and resetting the input line.
+        """
+        if self.lineBuffer:
+            self.terminal.nextLine()
+        self.terminal.write("Error: %s !!!" % (f.value,))
+        if not f.check(NotImplementedError, NotFoundError):
+            log.msg(f.getTraceback())
+        self.resetInputLine()
+
     #
     # Command dispatch
     #
@@ -305,16 +321,8 @@
                     f.trap(CommandUsageError)
                     self.terminal.write("%s\n" % (f.value,))
 
-                def handleException(f):
-                    self.terminal.write("Error: %s\n" % (f.value,))
-                    if not f.check(NotImplementedError, NotFoundError):
-                        log.msg("-"*80 + "\n")
-                        log.msg(f.getTraceback())
-                        log.msg("-"*80 + "\n")
-
                 def next(_):
                     self.activeCommand = None
-                    self.drawInputLine()
                     if self.inputLines:
                         line = self.inputLines.pop(0)
                         self.lineReceived(line)
@@ -327,7 +335,8 @@
                     # Add time to test callbacks
                     self.service.reactor.callLater(4, d.callback, None)
                 d.addErrback(handleUsageError)
-                d.addErrback(handleException)
+                d.addCallback(lambda _: self.drawInputLine())
+                d.addErrback(self.handleFailure)
                 d.addCallback(next)
             else:
                 self.terminal.write("Unknown command: %s\n" % (cmd,))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120416/59d7b1ef/attachment.html>


More information about the calendarserver-changes mailing list