diff mbox

[KVM-AUTOTEST,02/26] error.py: Unhandled*: don't keep references to unhandled exceptions

Message ID 1294751618-21631-2-git-send-email-mgoldish@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michael Goldish Jan. 11, 2011, 1:13 p.m. UTC
None
diff mbox

Patch

diff --git a/client/common_lib/error.py b/client/common_lib/error.py
index 76ccc77..0c5641c 100644
--- a/client/common_lib/error.py
+++ b/client/common_lib/error.py
@@ -181,21 +181,18 @@  class JobError(AutotestError):
 class UnhandledJobError(JobError):
     """Indicates an unhandled error in a job."""
     def __init__(self, unhandled_exception):
-        JobError.__init__(self, unhandled_exception)
-        self.unhandled_exception = unhandled_exception
-        self.traceback = traceback.format_exc()
-
-    def __str__(self):
-        if isinstance(self.unhandled_exception, JobError):
-            return JobError.__str__(self.unhandled_exception)
+        if isinstance(unhandled_exception, JobError):
+            JobError.__init__(self, *unhandled_exception.args)
+        elif isinstance(unhandled_exception, str):
+            JobError.__init__(self, unhandled_exception)
         else:
             msg = "Unhandled %s: %s"
-            msg %= (self.unhandled_exception.__class__.__name__,
-                    self.unhandled_exception)
-            if not isinstance(self.unhandled_exception, AutotestError):
-                msg += _context_message(self.unhandled_exception)
-            msg += "\n" + self.traceback
-            return msg
+            msg %= (unhandled_exception.__class__.__name__,
+                    unhandled_exception)
+            if not isinstance(unhandled_exception, AutotestError):
+                msg += _context_message(unhandled_exception)
+            msg += "\n" + traceback.format_exc()
+            JobError.__init__(self, msg)
 
 
 class TestBaseException(AutotestError):
@@ -229,41 +226,35 @@  class TestWarn(TestBaseException):
 class UnhandledTestError(TestError):
     """Indicates an unhandled error in a test."""
     def __init__(self, unhandled_exception):
-        TestError.__init__(self, unhandled_exception)
-        self.unhandled_exception = unhandled_exception
-        self.traceback = traceback.format_exc()
-
-    def __str__(self):
-        if isinstance(self.unhandled_exception, TestError):
-            return TestError.__str__(self.unhandled_exception)
+        if isinstance(unhandled_exception, TestError):
+            TestError.__init__(self, *unhandled_exception.args)
+        elif isinstance(unhandled_exception, str):
+            TestError.__init__(self, unhandled_exception)
         else:
             msg = "Unhandled %s: %s"
-            msg %= (self.unhandled_exception.__class__.__name__,
-                    self.unhandled_exception)
-            if not isinstance(self.unhandled_exception, AutotestError):
-                msg += _context_message(self.unhandled_exception)
-            msg += "\n" + self.traceback
-            return msg
+            msg %= (unhandled_exception.__class__.__name__,
+                    unhandled_exception)
+            if not isinstance(unhandled_exception, AutotestError):
+                msg += _context_message(unhandled_exception)
+            msg += "\n" + traceback.format_exc()
+            TestError.__init__(self, msg)
 
 
 class UnhandledTestFail(TestFail):
     """Indicates an unhandled fail in a test."""
     def __init__(self, unhandled_exception):
-        TestFail.__init__(self, unhandled_exception)
-        self.unhandled_exception = unhandled_exception
-        self.traceback = traceback.format_exc()
-
-    def __str__(self):
-        if isinstance(self.unhandled_exception, TestFail):
-            return TestFail.__str__(self.unhandled_exception)
+        if isinstance(unhandled_exception, TestFail):
+            TestFail.__init__(self, *unhandled_exception.args)
+        elif isinstance(unhandled_exception, str):
+            TestFail.__init__(self, unhandled_exception)
         else:
             msg = "Unhandled %s: %s"
-            msg %= (self.unhandled_exception.__class__.__name__,
-                    self.unhandled_exception)
-            if not isinstance(self.unhandled_exception, AutotestError):
-                msg += _context_message(self.unhandled_exception)
-            msg += "\n" + self.traceback
-            return msg
+            msg %= (unhandled_exception.__class__.__name__,
+                    unhandled_exception)
+            if not isinstance(unhandled_exception, AutotestError):
+                msg += _context_message(unhandled_exception)
+            msg += "\n" + traceback.format_exc()
+            TestFail.__init__(self, msg)
 
 
 class CmdError(TestError):