diff --git a/bin/sql_db.py b/bin/sql_db.py index 6c2c17beeb3..cdc3d0de4b3 100644 --- a/bin/sql_db.py +++ b/bin/sql_db.py @@ -51,11 +51,11 @@ psycopg2.extensions.register_type(psycopg2.extensions.new_type((700, 701, 1700,) import tools -from tools.func import wraps +from tools.func import wraps, frame_codeinfo from datetime import datetime as mdt from datetime import timedelta import threading -from inspect import stack +from inspect import currentframe import re re_from = re.compile('.* from "?([a-zA-Z_0-9]+)"? .*$'); @@ -93,7 +93,7 @@ class Cursor(object): self._obj = self._cnx.cursor(cursor_factory=psycopg1cursor) self.__closed = False # real initialisation value self.autocommit(False) - self.__caller = tuple(stack()[2][1:3]) + self.__caller = frame_codeinfo(currentframe(),2) def __del__(self): if not self.__closed: diff --git a/bin/tools/func.py b/bin/tools/func.py index 8cedf6715fd..4150b3e688b 100644 --- a/bin/tools/func.py +++ b/bin/tools/func.py @@ -93,3 +93,24 @@ def synchronized(lock_attr='_lock'): return decorator + +from inspect import getsourcefile + +def frame_codeinfo(fframe, back=0): + """ Return a (filename, line) pair for a previous frame . + @return (filename, lineno) where lineno is either int or string=='' + """ + + try: + if not fframe: + return ("", '') + for i in range(back): + fframe = fframe.f_back + try: + fname = getsourcefile(fframe) + except TypeError: + fname = '' + lineno = fframe.f_lineno or '' + return (fname, lineno) + except Exception: + return ("", '')