#---------------------------------------------------------------------------- # Name: aglogging.py # Purpose: Utilities to help with logging # # Author: Jeff Norton # # Created: 01/04/05 # CVS-ID: $Id$ # Copyright: (c) 2005 ActiveGrid, Inc. # License: wxWindows License #---------------------------------------------------------------------------- import sys import os import re import traceback global agTestMode agTestMode = False def setTestMode(mode): global agTestMode if (mode): agTestMode = True else: agTestMode = False def getTestMode(): global agTestMode return agTestMode def testMode(normalObj, testObj=None): if getTestMode(): return testObj return normalObj def toDiffableString(value): s = repr(value) ds = "" i = s.find(" at 0x") start = 0 while (i >= 0): j = s.find(">", i) if (j < i): break ds += s[start:i] start = j i = s.find(" at 0x", start) return ds + s[start:] def removeFileRefs(str): str = re.sub(r'(?<=File ")[^"]*(\\[^\\]*")(, line )[0-9]*', _fileNameReplacement, str) return str def _fileNameReplacement(match): return "...%s" % match.group(1) def getTraceback(): extype, val, tb = sys.exc_info() tbs = "\n" for s in traceback.format_tb(tb): tbs += s return tbs def reportException(out=None, stacktrace=False, diffable=False): extype, val, t = sys.exc_info() if (diffable): exstr = removeFileRefs(str(val)) else: exstr = str(val) if (out == None): print "Got Exception = %s: %s" % (extype, exstr) else: print >> out, "Got Exception = %s: %s" % (extype, exstr) if (stacktrace): fmt = traceback.format_exception(extype, val, t) for s in fmt: if (diffable): s = removeFileRefs(s) if (out == None): print s else: print >> out, s