From b0e352ab6d6cd1937c8b687cc90f1762dc55a20e Mon Sep 17 00:00:00 2001 From: Dean Gardiner Date: Wed, 4 Dec 2013 19:29:02 +1300 Subject: [PATCH] Updated Caper to v0.2.3 and Logr to v0.2.2 to greatly improve matching performance --- libs/caper/__init__.py | 8 ++++---- libs/caper/parsers/anime.py | 4 ++-- libs/caper/parsers/base.py | 4 +++- libs/caper/parsers/scene.py | 7 +++++-- libs/logr/__init__.py | 50 +++++++++++++++++++++++++++++++++------------ 5 files changed, 51 insertions(+), 22 deletions(-) diff --git a/libs/caper/__init__.py b/libs/caper/__init__.py index 1638ec0..3384d7d 100644 --- a/libs/caper/__init__.py +++ b/libs/caper/__init__.py @@ -19,7 +19,7 @@ from caper.parsers.anime import AnimeParser from caper.parsers.scene import SceneParser -__version_info__ = ('0', '2', '2') +__version_info__ = ('0', '2', '3') __version_branch__ = 'master' __version__ = "%s%s" % ( @@ -43,10 +43,10 @@ CL_END = 1 class Caper(object): - def __init__(self): + def __init__(self, debug=False): self.parsers = { - 'scene': SceneParser(), - 'anime': AnimeParser() + 'scene': SceneParser(debug), + 'anime': AnimeParser(debug) } def _closure_split(self, name): diff --git a/libs/caper/parsers/anime.py b/libs/caper/parsers/anime.py index 4f90163..88313a2 100644 --- a/libs/caper/parsers/anime.py +++ b/libs/caper/parsers/anime.py @@ -53,8 +53,8 @@ PATTERN_GROUPS = [ class AnimeParser(Parser): - def __init__(self): - super(AnimeParser, self).__init__(PATTERN_GROUPS) + def __init__(self, debug=False): + super(AnimeParser, self).__init__(PATTERN_GROUPS, debug) def capture_group(self, fragment): match = REGEX_GROUP.match(fragment.value) diff --git a/libs/caper/parsers/base.py b/libs/caper/parsers/base.py index d0e109e..6f79be6 100644 --- a/libs/caper/parsers/base.py +++ b/libs/caper/parsers/base.py @@ -18,7 +18,9 @@ from caper.result import CaperResult, CaperClosureNode class Parser(object): - def __init__(self, pattern_groups): + def __init__(self, pattern_groups, debug=False): + self.debug = debug + self.matcher = FragmentMatcher(pattern_groups) self.closures = None diff --git a/libs/caper/parsers/scene.py b/libs/caper/parsers/scene.py index dedd206..224a282 100644 --- a/libs/caper/parsers/scene.py +++ b/libs/caper/parsers/scene.py @@ -98,8 +98,8 @@ PATTERN_GROUPS = [ class SceneParser(Parser): - def __init__(self): - super(SceneParser, self).__init__(PATTERN_GROUPS) + def __init__(self, debug=False): + super(SceneParser, self).__init__(PATTERN_GROUPS, debug) def capture_group(self, fragment): if fragment.left_sep == '-' and not fragment.right: @@ -133,6 +133,9 @@ class SceneParser(Parser): return self.result def print_tree(self, heads): + if not self.debug: + return + for head in heads: head = head if type(head) is list else [head] diff --git a/libs/logr/__init__.py b/libs/logr/__init__.py index 21909b6..7a2d7b2 100644 --- a/libs/logr/__init__.py +++ b/libs/logr/__init__.py @@ -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: @@ -65,7 +71,29 @@ class Logr(object): return "" @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] - - if self_argument == 'self' and self_argument in frame.f_locals: - instance = frame.f_locals[self_argument] + frame_class = Logr.get_frame_class(frame) - class_ = instance.__class__ - class_name = class_.__name__ - module_name = class_.__module__ + if frame_class: + class_name = frame_class.__name__ + module_name = frame_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: