#!/usr/bin/env python
import os.path
-import moe.log
import moe.eval
import moe.util
orig_path = os.path.join(dir, file)
norm_ext = normalize_ext(e, ext)
- moe.log.verbose("Found solution %s\n" % orig_path)
+ e.log.verbose("Found solution %s\n" % orig_path)
copy = e.cfgs["TASK"] + "." + norm_ext
copy_path = os.path.join(e.cfgs["TEST_DIR"], copy)
if file != copy:
- moe.log.verbose("Renaming to %s\n" % copy)
+ e.log.verbose("Renaming to %s\n" % copy)
moe.util.link_or_copy(orig_path, copy_path)
e.builtins.set("SRC", copy)
class MoeConfig:
"""Moe configuration file. Should be immutable once a part of a stack."""
- def __init__(self, file=None, name=None):
+ def __init__(self, file=None, name=None, type="<unnamed>"):
self.vars = {}
+ self.type = type
if file is not None:
self.load(file)
elif name is not None:
list.append(("s", s[:p]))
s = s[p:]
- def dump(self, file=sys.stdout):
+ def dump(self, file=sys.stdout, prefix=""):
for k,v in self.vars.items():
+ file.write(prefix)
file.write(k)
if len(v) > 0 and v[0][0] == "a":
file.write("+")
seen[k] = None
return seen.keys()
- def dump(self, file=sys.stdout):
+ def dump(self, file=sys.stdout, prefix=""):
for k in sorted(self.keys()):
v = self[k]
- file.write("%s=%s\n" % (k,v))
+ file.write("%s%s=%s\n" % (prefix,k,v))
- def dump_defs(self, file=sys.stdout):
- file.write("Configuration stack:\n")
+ def dump_defs(self, file=sys.stdout, prefix=""):
level = 0
for cfg in self.stk:
level += 1
- file.write("(level %d)\n" % level)
- cfg.dump(file)
- file.write("(end)\n")
+ file.write("%s(level %d: %s)\n" % (prefix,level,cfg.type))
+ cfg.dump(file, prefix + "\t")
+ file.write("%s(end)\n" % prefix)
def apply_overrides(self, prefix):
newstk = []
for cfg in self.stk:
- over = MoeConfig()
+ over = MoeConfig(type = cfg.type + '-overrides')
changed = False
for k in cfg.vars.keys():
if k.startswith(prefix):
over.vars[k[len(prefix):]] = cfg.vars[k]
changed = True
if changed:
- clean = MoeConfig()
+ clean = MoeConfig(type = cfg.type)
for k in cfg.vars.keys():
if not k.startswith(prefix):
clean.vars[k] = cfg.vars[k]
argv0 = argv.pop(0)
while len(argv) > 0 and argv[0].find("=") >= 0:
if cfg is None:
- cfg = MoeConfig()
+ cfg = MoeConfig(type='cmdline')
cfg.parse_line(argv.pop(0))
argv.insert(0, argv0)
return cfg
class Eval:
def __init__(self):
+ self.log = moe.log.default
self.cfgs = moe.config.MoeConfigStack()
- self.builtins = moe.config.MoeConfig()
+ self.builtins = moe.config.MoeConfig(type="builtins")
self.cfgs.push(self.builtins)
self.main_pipe = moe.pipeline.MoePipeline("main")
self.meta = moe.meta.MoeMeta()
def init(self, overrides=None):
self.init_global(overrides)
self.init_test()
- ## FIXME: Initialize logging early on
+ self.init_logs()
self.init_task()
def init_global(self, overrides):
- main_cfg = moe.config.MoeConfig(name = os.path.join(self.cfgs['HOME'], "config"))
+ main_cfg = moe.config.MoeConfig(name = os.path.join(self.cfgs['HOME'], "config"), type="main")
self.cfgs.push(main_cfg)
if overrides:
self.cfgs.push(overrides)
except OSError, e:
raise MoeEvalErr, "Cannot create %s: %s" % (test, e.strerror)
+ def init_logs(self):
+ self.log = moe.log.MoeLog()
+ if self.cfgs["V"]:
+ self.log.verbosity = int(self.cfgs["V"])
+ self.log.log_file = open(os.path.join(self.cfgs["TEST_DIR"], "log"), "w")
+ self.default_log = self.log
+ self.log_config(3, "before loading the task")
+
def init_task(self):
task = self.cfgs['TASK']
task_dir = self.cfgs['TASK_DIR']
if not os.path.isdir(task_dir):
raise MoeEvalErr, "No such task %s" % task
- task_cfg = moe.config.MoeConfig(name = os.path.join(task_dir, "config"))
+
+ task_cfg = moe.config.MoeConfig(name = os.path.join(task_dir, "config"), type='task')
self.cfgs.push(task_cfg)
+ self.log_config(3, "after loading the task")
+
self.meta["task"] = task
type = self.cfgs['TASK_TYPE']
raise MoeEvalErr, "Unknown task type " + type
def run(self):
+ self.log_config(2, "for the task pipeline")
self.main_pipe.configure(self.cfgs["HOOKS"])
self.main_pipe.dump()
self.main_pipe.run(self)
+
+ def log_config(self, verb, msg):
+ if self.log.verbosity >= verb:
+ self.log.say("@@@ Configuration stack %s @@@\n" % msg)
+ self.cfgs.dump_defs(self.log.log_file, prefix="\t")
+ if self.log.verbosity >= 99:
+ self.log.say("@@@@@@ Resolved configuration %s @@@@@@\n" % msg)
+ self.cfgs.dump(self.log.log_file, prefix="\t")
import sys
-def say(msg):
- sys.stdout.write(msg + "\n")
+class MoeLog:
-def verbose(msg):
- sys.stdout.write(msg)
+ def __init__(self):
+ self.verbosity = 0
+ self.progress_file = sys.stdout
+ self.log_file = None
-def progress(msg):
- sys.stdout.write(msg)
+ def say(self, msg):
+ if self.log_file:
+ self.log_file.write(msg)
+
+ def verbose(self, msg):
+ if self.verbosity and self.log_file:
+ self.log_file.write(msg)
+
+ def progress(self, msg):
+ if self.progress:
+ self.progress.write(msg)
+
+default = MoeLog()
self.index = 0
while self.index < len(self.pipe):
(pri,name,fun) = self.pipe[self.index]
- moe.log.verbose(">> Running %s:%s\n" % (self.name,name))
+ moe.log.default.verbose(">> Running %s:%s\n" % (self.name,name))
fun(*args)
self.index += 1
self.index = -1
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):
## FIXME: Configuration variable for the hook directory?
try:
e.builtins.set("CONTESTANT", "mj")
e.init(overrides)
-print "\nTask configuration:"
-e.cfgs.dump()
-print
-
if len(sys.argv) > 1:
file = sys.argv[1]
else:
file = None
moe.batch.locate(e, file)
-print "\nConfiguration after per-extension overrides:"
-e.cfgs.dump()
-print
-
e.run()
print "\nFinal meta file:"