X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=t%2Fmoe%2Fpipeline.py;h=f14a0f5f7956be474151c6148474b94bc86f525f;hb=750990d7dbbaf2740f290a26dab527ce4444cbfb;hp=1804c5bec732562b718fee667d0b78c4e606a634;hpb=72657b1e01a615920375ad655f2ecfa391d10337;p=eval.git diff --git a/t/moe/pipeline.py b/t/moe/pipeline.py index 1804c5b..f14a0f5 100644 --- a/t/moe/pipeline.py +++ b/t/moe/pipeline.py @@ -3,8 +3,17 @@ import sys import bisect import imp +import moe import moe.log +class MoePipeError(moe.MoeError): + """Failure of the MoePipeline.""" + +class MoeAbortPipeline(Exception): + + def __init__(self, skip_to=999): + self.skip_to = skip_to + class MoePipeline: """Moe pipeline.""" @@ -17,28 +26,40 @@ class MoePipeline: triple = (pri,name,fun) pos = bisect.bisect(self.pipe, triple) if pos <= self.index: - raise RuntimeError, "MoePipeline.insert cannot alter the past" + raise MoePipeError, "Pipeline insert cannot alter the past" self.pipe.insert(pos, triple) - def dump(self, file=sys.stdout): + def dump(self, file=sys.stdout, prefix=""): file.write(">>> Pipeline %s\n" % self.name) for pri,name,fun in self.pipe: - file.write("%03d %s\n" % (pri,name)) + file.write("%s%03d %s\n" % (prefix,pri,name)) def run(self, *args): self.index = 0 + min_pri = -1 while self.index < len(self.pipe): (pri,name,fun) = self.pipe[self.index] - moe.log.verbose(">> Running %s:%s\n" % (self.name,name)) - fun(*args) + if pri >= min_pri: + moe.log.default.verbose(">> Running %s:%s\n" % (self.name,name)) + try: + fun(*args) + except MoeAbortPipeline, err: + min_pri = err.skip_to + else: + moe.log.default.verbose(">> Skipping %s:%s\n" % (self.name,name)) self.index += 1 self.index = -1 + moe.log.default.verbose(">> Pipeline %s finished\n" % self.name) def add_hook(self, name): modname = "moe.hooks." + name - moe.log.verbose(">> Loading hook %s\n" % name) + moe.log.default.verbose(">> Loading hook %s\n" % name) if not sys.modules.has_key(modname): - fp, path, desc = imp.find_module(name, ["moe/hooks"]) + ## FIXME: Configuration variable for the hook directory? + try: + fp, path, desc = imp.find_module(name, ["moe/hooks"]) + except ImportError: + raise MoePipeError, "Cannot find hook module " + modname try: imp.load_module(modname, fp, path, desc) finally: