]> mj.ucw.cz Git - moe.git/blobdiff - t/moe/pipeline.py
Fixes in config and config parsing
[moe.git] / t / moe / pipeline.py
index 1804c5bec732562b718fee667d0b78c4e606a634..22422e605904428192bc7fb66fd0003ae62fa0ec 100644 (file)
@@ -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,33 +26,30 @@ 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
-
-    def add_hook(self, name):
-       modname = "moe.hooks." + name
-       moe.log.verbose(">> Loading hook %s\n" % name)
-       if not sys.modules.has_key(modname):
-           fp, path, desc = imp.find_module(name, ["moe/hooks"])
-           try:
-               imp.load_module(modname, fp, path, desc)
-           finally:
-               fp.close()
-       sys.modules[modname].init(self)
+       moe.log.default.verbose(">> Pipeline %s finished\n" % self.name)
 
     def configure(self, names):
        for name in names.split():