]> mj.ucw.cz Git - eval.git/blobdiff - t/moe/pipeline.py
Add unicode and file parsing test
[eval.git] / t / moe / pipeline.py
index e7fc9a73a93ddf407df8933cc72d032a3efcc069..f14a0f5f7956be474151c6148474b94bc86f525f 100644 (file)
@@ -3,11 +3,17 @@
 import sys
 import bisect
 import imp
+import moe
 import moe.log
 
-class MoePipeError(Exception):
+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."""
 
@@ -23,19 +29,27 @@ class MoePipeline:
            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.default.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