#!/usr/bin/env python3 import json from pathlib import Path DATA = Path("data") REPORTS = Path("reports") def versions(): return sorted( [d for d in DATA.iterdir() if d.is_dir()], key=lambda p: [int(x) for x in p.name.split(".")] ) def modules(): first = versions()[0] return sorted(f.stem for f in first.glob("*.json")) class Module(object): def __init__(self, module): self.name = module self.versionen = {} self.classes = {} self.operations = [] def read_data(self): for version in versions(): vers = version.name self.versionen[vers] = {} infile = version / f"{self.name}.json" if not infile.exists(): continue data = json.loads(infile.read_text()) for f in data["files"]: f['version'] = vers file = f['file'] classe = f.get('class', 'ohne') method = f.get('method', 'ohne') if classe not in self.versionen[vers]: self.versionen[vers][classe] = [] self.versionen[vers][classe].append(f) try: if vers not in self.classes[classe]: self.classes[classe][vers] = [] except KeyError: self.classes[classe] = {} self.classes[classe][vers] = [] self.classes[classe][vers].append(f) for o in f['operations']: o['class'] = classe o['method'] = method o['file'] = file o['version'] = vers self.operations.append(o) def write_data(self): outfile = REPORTS / f"{self.name}.md" with outfile.open("w", encoding="utf8") as out: out.write(f"# {self.name}\n\n") for c in sorted(self.classes): classe = self.classes[c] out.write(f"## Klasse {c}\n\n") for k in sorted(self.versionen.keys()): v = classe.get(k, None) if not v: continue out.write(f"### {k}\n\n") for m in v: out.write(f"file: {m['file']} : {m['line']}\n") for op in m["operations"]: out.write( f"- **{op['phase']}** " f"`{op['operation']}`\n" ) if "condition" in op: out.write( f" - condition: `{op['condition']}`\n" ) if op["object"]: out.write( f" - object: `{op['object']}`\n" ) if op["args"]: out.write( f" - args: `{', '.join(op['args'])}`\n" ) if op["kwargs"]: out.write(" - kwargs:\n") for k, v in op["kwargs"].items(): out.write( f" - {k}: `{v}`\n" ) out.write("\n") out.write("\n") def main(): REPORTS.mkdir(exist_ok=True) for module in modules(): print(module) mod = Module(module) mod.read_data() mod.write_data() if __name__ == "__main__": main()