neues skript sql_dump_diff.py zum Vergleich von 2 sql-dumps.

- leere, frisch initialisierte Datenbanken der Versionen verglichen
- datasetprogramme erkennen jetzt auch suche nach standardtabellen wie uom
This commit is contained in:
2026-08-22 17:45:46 +02:00
parent c0dd24b6c5
commit a55774eff2
19 changed files with 78583 additions and 269 deletions
+31 -4
View File
@@ -42,10 +42,27 @@ erkennt:
→ wird zu einem YAML-Record mit `key`, `model`, `fields`. Referenzen auf
zuvor im selben File angelegte Records werden zu `{"$ref": "..."}`,
`Decimal(...)`/`date(...)` zu `{"$decimal": ...}`/`{"$date": ...}`. Alles
nicht automatisch Auflösbare (Wizards, `.click(...)`, Helper-Funktionsaufrufe)
wird als `{"$manual": "<Ausdruck>"}` markiert oder ganz übersprungen -
bewusst sichtbar unvollständig statt still falsch.
`Decimal(...)`/`date(...)` zu `{"$decimal": ...}`/`{"$date": ...}`.
Ein weiteres, sehr häufiges Muster wird ebenfalls erkannt: Zugriff auf
bereits vorhandene Stammdaten (Länder, Währungen, Einheiten,
Standard-Lagerorte, ... - i. d. R. per XML-Fixture beim Modul-Aktivieren
angelegt, nicht Teil des eigentlichen Testdatensatzes):
```
>>> ProductUom = Model.get('product.uom')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
```
→ wird zu `{"$search": {"model": "product.uom", "domain": [["name", "=", "Unit"]]}}`
- aufgelöst wird das erst live beim Anlegen durch `create_dataset.py`
(Schritt 3), nicht schon hier, da diese Records ja nicht selbst Teil der
YAML sind. Nur literale Domains werden erkannt (keine Variablen darin);
sonst bleibt es wie bisher `$manual`.
Alles sonst nicht automatisch Auflösbare (Wizards, `.click(...)`,
Helper-Funktionsaufrufe) wird als `{"$manual": "<Ausdruck>"}` markiert oder
ganz übersprungen - bewusst sichtbar unvollständig statt still falsch.
Record-Keys werden mit dem Dateinamen präfixiert, damit beim
Zusammenführen mehrerer Module keine Kollisionen entstehen.
@@ -83,6 +100,16 @@ bleibt trotzdem ein Fehler - das ist ja gerade das gesuchte Signal für eine
echte Schema-Änderung. Weitere Umbenennungen bei Bedarf in `FIELD_RENAMES`
ergänzen, sobald ein Lauf sie aufdeckt.
**`$search`-Auflösung:** Werte der Form `{"$search": {"model": ...,
"domain": ...}}` (von `rst_to_dataset.py` erzeugt, siehe Schritt 1) werden
live per `Model.get(model).find(domain)` gegen den Zielserver aufgelöst -
für Stammdaten, die nicht selbst angelegt werden, sondern schon per
XML-Fixture da sind. Ergebnis wird pro Lauf gecacht (dieselbe Suche, z. B.
nach der Einheit "Unit", kommt in vielen Records vor). Kein Treffer ->
Fehler mit Klartext statt eines neu angelegten Records - das ist selbst
ein Signal, dass sich die Stammdaten zwischen den Versionen geändert
haben.
### 4. `compare_snapshots.py` – zwei Versionen gegenüberstellen
Vergleicht zwei Snapshots (gleiche YAML, zwei Versionen/Datenbanken) und