Files
tryton-db-migration/compare.py
T

136 lines
3.9 KiB
Python
Raw Normal View History

#!/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"))
2026-08-08 00:58:56 +02:00
class Module(object):
def __init__(self, module):
self.name = module
self.versionen = {}
self.classes = {}
self.operations = []
def read_data(self):
for version in versions():
2026-08-08 00:58:56 +02:00
2026-08-08 01:29:43 +02:00
vers = version.name
2026-08-08 00:58:56 +02:00
self.versionen[vers] = {}
2026-08-08 00:58:56 +02:00
infile = version / f"{self.name}.json"
if not infile.exists():
continue
data = json.loads(infile.read_text())
2026-08-08 00:58:56 +02:00
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")
2026-08-08 01:29:43 +02:00
for c in sorted(self.classes):
classe = self.classes[c]
2026-08-08 00:58:56 +02:00
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(
2026-08-08 00:58:56 +02:00
f"- **{op['phase']}** "
f"`{op['operation']}`\n"
)
2026-08-08 00:58:56 +02:00
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)
2026-08-08 00:58:56 +02:00
mod = Module(module)
mod.read_data()
mod.write_data()
if __name__ == "__main__":
main()