import time import who_calls import neo_cgi PROFILER_DATA = [] PROFILER_START = 0 PROFILER_ENABLED = 0 PROFILER_DEPTH = 0 def enable(): global PROFILER_START global PROFILER_ENABLED global PROFILER_DATA PROFILER_START = time.time() PROFILER_ENABLED = 1 PROFILER_DATA = [] def disable(): global PROFILER_START global PROFILER_ENABLED global PROFILER_DATA PROFILER_START = 0 PROFILER_ENABLED = 0 PROFILER_DATA = [] def hdfExport(prefix, hdf): global PROFILER_DATA n = 0 for p in PROFILER_DATA: hdf.setValue("%s.%d.when" % (prefix, n), "%5.2f" % (p.when)) hdf.setValue("%s.%d.time" % (prefix, n), "%5.2f" % (p.length)) hdf.setValue("%s.%d.klass" % (prefix, n), p.klass) hdf.setValue("%s.%d.what" % (prefix, n), " " * p.depth + p.what) hdf.setValue("%s.%d.where" % (prefix, n), neo_cgi.htmlEscape(p.where)) class Profiler: def __init__ (self, klass, what): global PROFILER_START global PROFILER_ENABLED global PROFILER_DATA global PROFILER_DEPTH if not PROFILER_ENABLED: return self.when = time.time() - PROFILER_START self.klass = klass self.where = who_calls.pretty_who_calls() self.what = what self.length = 0 self.depth = PROFILER_DEPTH PROFILER_DEPTH = PROFILER_DEPTH + 1 PROFILER_DATA.append(self) def end(self): global PROFILER_ENABLED global PROFILER_DEPTH if not PROFILER_ENABLED: return self.length = time.time() - self.when - PROFILER_START PROFILER_DEPTH = PROFILER_DEPTH - 1 if PROFILER_DEPTH < 0: PROFILER_DEPTH = 0 class ProfilerCursor: def __init__ (self, real_cursor): self.real_cursor = real_cursor def execute (self, query, args=None): p = Profiler("SQL", query) r = self.real_cursor.execute(query, args) p.end() return r def __getattr__ (self, key): return getattr(self.real_cursor, key)