mirror of
https://git.yoctoproject.org/poky
synced 2026-04-05 08:02:25 +02:00
bb.exceptions: don't show a repr of 'self'
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) (Bitbake rev: dbf405f1f7fda41944093906c13044c6cf78f859) Signed-off-by: Chris Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
63d14f474d
commit
2cf67a71e3
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user