Source code for hwtBuildsystem.fakeTool.utils

from copy import copy
from json.encoder import JSONEncoder

from hwtBuildsystem.common.cmdResult import TclCmdResult


[docs]class RecordingExecutorEncoder(JSONEncoder):
[docs] def default(self, o): if isinstance(o, (TclCmdResult, FileOp)): res = copy(o.__dict__) res["__class__"] = o.__class__.__name__ return res else: return super(RecordingExecutorEncoder, self).default(o)
[docs]def RecordingExecutorJSON_decode_history(o): assert isinstance(o, list), o return [ RecordingExecutorJSON_decode(v) for v in o ]
[docs]def RecordingExecutorJSON_decode(o): if isinstance(o, dict): cls = o.get("__class__", "") if cls == TclCmdResult.__name__: return TclCmdResult(*( o.get(a, None) for a in ["cmd", "resultText", "errors", "criticalWarnings", "warnings", "infos"] )) elif cls == FileOp.__name__: return FileOp(*( o.get(a, None) for a in ["mode", "text", ] )) else: return {k: RecordingExecutorJSON_decode(v) for k, v in o.items()} elif isinstance(o, list): return [RecordingExecutorJSON_decode(i) for i in o] else: return o
[docs]class FileOp(): """ An container of file operation for command history. """ def __init__(self, mode, text): assert mode in ('w', 'a', 'd') self.mode = mode if mode == 'd': assert text is None self.text = text
[docs] def apply(self, f): m = self.mode if m in ('a', 'w'): with open(f, m) as f: if self.text is not None: f.write(self.text)