Source code for core.utils.trace

# core/utils/trace.py
#
#

""" utils package. """

__copyright__ = "Copyright 2015, B.H.J Thate"

## IMPORT

import traceback
import itertools
import sys
import os

## STACK

[docs]def get_exception(*args, **kwargs): exctype, excvalue, tb = sys.exc_info() trace = traceback.extract_tb(tb) result = "" for i in trace: fname = i[0] linenr = i[1] func = i[2] plugfile = fname[:-3].split(os.sep) mod = [] for i in plugfile[::-1]: mod.append(i) if i == "core": break ownname = '.'.join(mod[::-1]) result += "%s:%s %s | " % (ownname, linenr, func) del trace return "%s%s: %s" % (result, exctype, excvalue)
[docs]def get_plugname(*args, **kwargs): result = "" try: depth = args[0] except IndexError: depth = 1 loopframe = sys._getframe(depth) if not loopframe: return result res = [] fn = "" while 1: if depth <= 0: break depth -= 1 try: frame = loopframe.f_back except AttributeError: break if not frame: break fn = frame.f_code.co_filename loopframe = frame if fn == "core": break del loopframe return ".".join(fn.split(os.sep)[-3:])[:-3]
[docs]def get_location(*args, **kwargs): result = "" try: depth = args[0] except IndexError: depth = 1 loopframe = sys._getframe(depth) if not loopframe: return result res = [] fn = "" while 1: if depth <= 0: break depth -= 1 try: frame = loopframe.f_back except AttributeError: break if not frame: break fn = frame.f_code.co_filename[:-3] linenr = frame.f_lineno func = frame.f_code.co_name loopframe = frame del loopframe filename = ".".join(".".join(itertools.takewhile(lambda x: "core" not in x, fn.split(os.sep)[::-1])).split(".")[::-1]) return "%s.%s:%s" % (filename, func, linenr)
[docs]def get_frame(search="code"): result = {} frame = sys._getframe(1) search = str(search) for i in dir(frame): if search in i: target = getattr(frame, i) for j in dir(target): result[j] = getattr(target, j) return result
[docs]def get_strace(*args, **kwargs): result = "" try: depth = args[0] except IndexError: depth = 1 loopframe = sys._getframe(depth) if not loopframe: return result while 1: try: frame = loopframe.f_back except AttributeError: break if not frame: break linenr = frame.f_lineno func = frame.f_code.co_name result += "%s:%s | " % (func, linenr) loopframe = frame del loopframe return result[:-3]
[docs]def get_func(*args, **kwargs): result = "" if args: depth = args[0] else: depth = 2 loopframe = sys._getframe(depth) if not loopframe: return result func = None linenr = 0 teller = 1 while 1: try: frame = loopframe.f_back except AttributeError: break if not frame: break teller += 1 if teller > depth: break del loopframe return "%s:%s" % (func, linenr)