]> mj.ucw.cz Git - moe.git/blobdiff - t/moe/status.py
Added unfix(), corrected fix()
[moe.git] / t / moe / status.py
index 518fb1bc5dcb2089f3496c920c354bd707e69221..76681c7b4739fb2f499e92259002234ae9147786 100644 (file)
@@ -9,7 +9,7 @@ key_pattern = re.compile("^[A-Za-z0-9_-]+$")
 class MoeStatusInvalid(Exception):
     pass
 
 class MoeStatusInvalid(Exception):
     pass
 
-class MoeStatus:
+class Status:
     """Moe status file."""
 
     def __init__(self):
     """Moe status file."""
 
     def __init__(self):
@@ -37,40 +37,37 @@ class MoeStatus:
            m[k] = [m[k]]
        return m[k]
 
            m[k] = [m[k]]
        return m[k]
 
-    def str_lines(self, indent=""):
-       "Return a list of lines, `indent` is indent prefix."
+    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:
        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):
-                   l.append("\t" * indent + k + "(\n")
-                   l.extend(self.str_lines(indent+"  "))
-                   l.append("\t" * indent + ")\n")
+               if isinstance(w, Status):
+                   l.append(prefix + k + "(\n")
+                   l.extend(self.str_lines(prefix+"  "))
+                   l.append(prefix + ")\n")
                else:
                else:
-                   l.append("\t" * indent + k + ":" + str(w) + "\n")
+                   l.append(prefix + k + ":" + str(w) + "\n")
        return l
        
        return l
        
-    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):
-        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")
-               else:
-                   file.write("\t" * indent + k + ":" + str(w) + "\n")
+    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:
 
     def read(self, file=None, name=None):
        if file is None:
@@ -105,7 +102,7 @@ class MoeStatus:
                    this.read_val(k, v)
                elif x.endswith("("):
                    k = x[:-1]
                    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
                    this.read_val(k, new)
                    stk.append(this)
                    this = new