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)