]> mj.ucw.cz Git - moe.git/blobdiff - t/moe/status.py
Added unfix(), corrected fix()
[moe.git] / t / moe / status.py
index 3d72db476de48df25caf8c566cb1f14a429f922d..76681c7b4739fb2f499e92259002234ae9147786 100644 (file)
@@ -9,7 +9,7 @@ key_pattern = re.compile("^[A-Za-z0-9_-]+$")
 class MoeStatusInvalid(Exception):
     pass
 
-class MoeStatus:
+class Status:
     """Moe status file."""
 
     def __init__(self):
@@ -37,25 +37,37 @@ class MoeStatus:
            m[k] = [m[k]]
        return m[k]
 
-    def write(self, file=None, name=None):
-       if file is None:
-           if name is not None:
-               file = open(name, "w")
-           else:
-               file = sys.stdout
-       self.write_nested(file, 0)
-
-    def write_nested(self, file, indent):
+    def dump(self, prefix=""):
+       """
+       Dump status in metafile format.
+       Return a list of lines, `prefix` is indent prefix.
+       """
+       l = []
         for k,v in self.stat.items():
            if type(v) == types.ListType: vals = v
            else: vals = [v]
            for w in vals:
-               if isinstance(w, MoeStatus):
-                   file.write("\t" * indent + k + "(\n")
-                   w.write_nested(file, indent+1);
-                   file.write("\t" * indent + ")\n")
+               if isinstance(w, Status):
+                   l.append(prefix + k + "(\n")
+                   l.extend(self.str_lines(prefix+"  "))
+                   l.append(prefix + ")\n")
                else:
-                   file.write("\t" * indent + k + ":" + str(w) + "\n")
+                   l.append(prefix + k + ":" + str(w) + "\n")
+       return l
+       
+    def write(self, f=None, name=None):
+       """
+       Write status (as a metafile) to `f` or file `name` or `stdout`
+       """
+       if not f and name is not None:
+           with open(name, "w") as f:
+               for l in self.dump():
+                   f.write(l+"\n")
+       else:
+           if not f: 
+               f = sys.stdout
+           for l in self.dump():
+               f.write(l+"\n")
 
     def read(self, file=None, name=None):
        if file is None:
@@ -90,7 +102,7 @@ class MoeStatus:
                    this.read_val(k, v)
                elif x.endswith("("):
                    k = x[:-1]
-                   new = MoeStatus()
+                   new = Status()
                    this.read_val(k, new)
                    stk.append(this)
                    this = new