Updated Caper to v0.2.3 and Logr to v0.2.2 to greatly improve matching performance

This commit is contained in:
Dean Gardiner
2013-12-04 19:29:02 +13:00
parent 5ea7dc5920
commit b0e352ab6d
5 changed files with 51 additions and 22 deletions
+37 -13
View File
@@ -32,8 +32,11 @@ class Logr(object):
loggers = {}
handler = None
trace_origin = False
name = "Logr"
@staticmethod
def configure(level=logging.WARNING, handler=None, formatter=None):
def configure(level=logging.WARNING, handler=None, formatter=None, trace_origin=False, name="Logr"):
"""Configure Logr
@param handler: Logger message handler
@@ -52,6 +55,9 @@ class Logr(object):
handler.setLevel(level)
Logr.handler = handler
Logr.trace_origin = trace_origin
Logr.name = name
@staticmethod
def configure_check():
if Logr.handler is None:
@@ -64,8 +70,30 @@ class Logr(object):
except TypeError:
return "<unknown>"
@staticmethod
def get_frame_class(frame):
if len(frame.f_code.co_varnames) <= 0:
return None
farg = frame.f_code.co_varnames[0]
if farg not in frame.f_locals:
return None
if farg == 'self':
return frame.f_locals[farg].__class__
if farg == 'cls':
return frame.f_locals[farg]
return None
@staticmethod
def get_logger_name():
if not Logr.trace_origin:
return Logr.name
stack = inspect.stack()
for x in xrange_six(len(stack)):
@@ -73,20 +101,16 @@ class Logr(object):
name = None
# Try find name of function defined inside a class
if len(frame.f_code.co_varnames) > 0:
self_argument = frame.f_code.co_varnames[0]
frame_class = Logr.get_frame_class(frame)
if self_argument == 'self' and self_argument in frame.f_locals:
instance = frame.f_locals[self_argument]
if frame_class:
class_name = frame_class.__name__
module_name = frame_class.__module__
class_ = instance.__class__
class_name = class_.__name__
module_name = class_.__module__
if module_name != '__main__':
name = module_name + '.' + class_name
else:
name = class_name
if module_name != '__main__':
name = module_name + '.' + class_name
else:
name = class_name
# Try find name of function defined outside of a class
if name is None: