]> mj.ucw.cz Git - eval.git/blobdiff - t/moe/pipeline.py
Add unicode and file parsing test
[eval.git] / t / moe / pipeline.py
index 1804c5bec732562b718fee667d0b78c4e606a634..f14a0f5f7956be474151c6148474b94bc86f525f 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,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: