Package brisa :: Package core :: Module failure
[hide private]
[frames] | no frames]

Source Code for Module brisa.core.failure

  1  # Licensed under the MIT license 
  2  # http://opensource.org/licenses/mit-license.php or see LICENSE file. 
  3  # Copyright 2007-2008 Brisa Team <brisa-develop@garage.maemo.org> 
  4   
  5  """ Error presentation wrapper. 
  6  """ 
  7   
  8  import types 
  9  import traceback 
 10  import sys 
 11   
 12  global count 
 13  count = 0 
 14   
 15   
16 -class NoCurrentExceptionError(Exception):
17 pass
18 19
20 -class Failure(object):
21 pickled = 0 22 stack = None 23 frames = None 24
25 - def __init__(self, exc_value=None, exc_type=None, exc_tb=None):
26 global count 27 count = count + 1 28 self.count = count 29 self.type = self.value = tb = None 30 31 if exc_value is None: 32 self.type, self.value, tb = sys.exc_info() 33 if self.type is None: 34 raise NoCurrentExceptionError() 35 stackOffset = 1
36
37 - def printTraceback(self, file=None, elideFrameworkCode=0, 38 detail='default'):
39 """Emulate Python's standard error reporting mechanism. """ 40 if file is None: 41 return 42 w = file.write 43 44 if detail == 'verbose': 45 w('*--- Failure #%d%s---\n' % (self.count, 46 (self.pickled and ' (pickled) ') \ 47 or ' ')) 48 elif detail == 'brief': 49 hasFrames = 'Traceback (failure with no frames)' 50 w("%s: %s: %s\n" % (hasFrames, self.type, self.value)) 51 else: 52 w('Traceback (most recent call last):\n') 53 54 if not detail == 'brief': 55 w("Failure: ") 56 w("%s: %s\n" % (qual(self.type), safe_str(self.value))) 57 if isinstance(self.value, Failure): 58 file.write(" (chained Failure)\n") 59 self.value.printTraceback(file, elideFrameworkCode, detail) 60 if detail == 'verbose': 61 w('*--- End of Failure #%d ---\n' % self.count)
62
63 - def printBriefTraceback(self, file=None, elideFrameworkCode=0):
64 self.printTraceback(file, elideFrameworkCode, detail='brief')
65
66 - def printDetailedTraceback(self, file=None, elideFrameworkCode=0):
67 self.printTraceback(file, elideFrameworkCode, detail='verbose')
68 69
70 -def qual(c):
71 """Return full import path of a class.""" 72 return c.__module__ + '.' + c.__name__
73 74
75 -def safe_str(o):
76 try: 77 return str(o) 78 except: 79 strExc = '\n'.join(traceback.format_exception(*sys.exc_info())) 80 clsName = _determineClassName(o) 81 obId = id(o) 82 return '<%s instance at %s with str error %s>' % ( 83 clsName, obId, strExc)
84 85
86 -def _determineClass(x):
87 try: 88 return x.__class__ 89 except: 90 return type(x)
91 92
93 -def _determineClassName(x):
94 c = _determineClass(x) 95 try: 96 return c.__name__ 97 except: 98 try: 99 return str(c) 100 except: 101 return '<BROKEN CLASS AT %s>' % id(c)
102