]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
bb.exceptions: don't show a repr of 'self'
authorChris Larson <chris_larson@mentor.com>
Sat, 14 May 2011 00:35:37 +0000 (17:35 -0700)
committerChris Larson <chris_larson@mentor.com>
Mon, 16 May 2011 19:39:42 +0000 (12:39 -0700)
Rather than treating self like an ordinary argument, showing a repr of its
value in the function spec when formatting the traceback entry, now we show
the class name for the method as a part of the function name. Example:

Old: bar(self=<some repr of Fooclass>, f=5)
New: Fooclass.bar(f=5)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
lib/bb/exceptions.py

index 86621d24ba9f9ff34df9ae12395615d8bf686699..62d62cd4d8c7ccbbb97a2fc4dba8dfcdb320e2ff 100644 (file)
@@ -29,13 +29,30 @@ class TracebackEntry(namedtuple.abc):
     def __str__(self):
         return ''.join(self.format())
 
+def _get_frame_args(frame):
+    """Get the formatted arguments and class (if available) for a frame"""
+    arginfo = inspect.getargvalues(frame)
+    firstarg = arginfo.args[0]
+    if firstarg == 'self':
+        self = arginfo.locals['self']
+        cls = self.__class__.__name__
+
+        arginfo.args.pop(0)
+        del arginfo.locals['self']
+    else:
+        cls = None
+
+    formatted = inspect.formatargvalues(*arginfo)
+    return formatted, cls
 
 def extract_traceback(tb, context=1):
     frames = inspect.getinnerframes(tb, context)
     for frame, filename, lineno, function, code_context, index in frames:
-        args = inspect.formatargvalues(*inspect.getargvalues(frame))
-        yield TracebackEntry(filename, lineno, function, args, code_context, index)
-
+        formatted_args, cls = _get_frame_args(frame)
+        if cls:
+            function = '%s.%s' % (cls, function)
+        yield TracebackEntry(filename, lineno, function, formatted_args,
+                             code_context, index)
 
 def format_extracted(extracted, formatter=None, limit=None):
     if limit: