X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=t%2Fmoe%2Fconfig.py;h=04e363f1887ef53446392b202a34df97faa00630;hb=1ed60150aa8d007acd895d0ab7274ba9eb8b0f2a;hp=dacaf42a7a1450e45fa505c266cb7fecc1b01e1d;hpb=e9b511e32341f3712df0c285553378a140eaeb97;p=moe.git diff --git a/t/moe/config.py b/t/moe/config.py index dacaf42..04e363f 100644 --- a/t/moe/config.py +++ b/t/moe/config.py @@ -101,11 +101,21 @@ class ConfigTree(object): for key in keys: self.lookup(key, create=True).fix() + def remove(self, parsed): + """Given a list [(varname, `Operation`)] as returned by `parse` or `parse_file`, + removes the operations from the respective variables config tree. + Variables/operations not present int the tree raise ValueError. + """ + for vname, o in parsed: + v = self.lookup(vname, create = True) + v.remove_operation(o) + def parse(self, s, source=None, level=0): - """Parse `s` (stream/string) into the tree, see `moe.confparser.ConfigParser` for details.""" + """Parse `s` (stream/string) into the tree, see `moe.confparser.ConfigParser` for details. + Returns list of parset operations: [(varname, `Operation`)]""" import moe.config_parser p = moe.config_parser.ConfigParser(s, self, source=source, level=level) - p.parse() + return p.parse() def parse_file(self, filename, desc=None, level=0): """Parse an utf-8 file into the tree, see `moe.confparser.ConfigParser` for details. @@ -113,7 +123,7 @@ class ConfigTree(object): with open(filename, 'rt') as f: if desc: filename += " <" + desc + ">" - self.parse(f, source=filename, level=level) + return self.parse(f, source=filename, level=level) class ConfigElem(object): @@ -268,7 +278,9 @@ class ConfigVar(ConfigElem): def variables(self): "Return a set of variables used in the expressions" - return set(sum([ list(op.expression.variables()) for op in self.operations ], [])) + if not self.operations: + return set([]) + return set.union(*[ op.expression.variables() for op in self.operations ]) def fix(self): """ @@ -318,7 +330,7 @@ class ConfigVar(ConfigElem): self.invalidate() # Remove the operation self.operations.remove(operation) - # Remove dependencies on variables unused in other operations + # Remove dependencies on variables unused in other defining operations vs = self.variables() for v in operation.expression.variables(): if v not in vs: @@ -383,8 +395,8 @@ class ConfigExpression(object): self.exprlist[i] = unicode(e, 'ascii') def variables(self): - "Return an iterator of variables user in the expression" - return itertools.ifilter(lambda e: isinstance(e, ConfigVar), self.exprlist) + "Return a set of variables used in the expression" + return set([e for e in self.exprlist if isinstance(e, ConfigVar)]) def __str__(self): return self.original