50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""
|
||
|
|
Repariert kaputte ketten_match Einträge:
|
||
|
|
- begruendung enthält rohes JSON statt Klartext
|
||
|
|
- bewertung ist 'unklar' obwohl Score eindeutig ist
|
||
|
|
Löscht kaputte Einträge → run_ketten_match.sh matched sie erneut mit gefixtem Script.
|
||
|
|
"""
|
||
|
|
import sqlite3
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
DB = Path(__file__).resolve().parent.parent / "data" / "tracker_remote.db"
|
||
|
|
|
||
|
|
conn = sqlite3.connect(str(DB))
|
||
|
|
conn.row_factory = sqlite3.Row
|
||
|
|
|
||
|
|
# Zähle kaputte
|
||
|
|
broken = conn.execute("""
|
||
|
|
SELECT COUNT(*) as n FROM ki_bewertungen
|
||
|
|
WHERE typ='umsetzung_match' AND begruendung LIKE '{%'
|
||
|
|
""").fetchone()["n"]
|
||
|
|
|
||
|
|
print(f"Kaputte Einträge: {broken}")
|
||
|
|
|
||
|
|
if broken > 0:
|
||
|
|
# Lösche alle kaputten → werden vom Runner erneut bewertet
|
||
|
|
conn.execute("""
|
||
|
|
DELETE FROM ki_bewertungen
|
||
|
|
WHERE typ='umsetzung_match' AND begruendung LIKE '{%'
|
||
|
|
""")
|
||
|
|
# Setze ki_status zurück für betroffene Vorlagen
|
||
|
|
conn.execute("""
|
||
|
|
UPDATE vorlagen SET ki_status = NULL
|
||
|
|
WHERE id IN (
|
||
|
|
SELECT vorlage_id FROM ki_bewertungen WHERE typ='umsetzung_match'
|
||
|
|
) OR (ki_status = 'matched' AND id NOT IN (
|
||
|
|
SELECT vorlage_id FROM ki_bewertungen WHERE typ='umsetzung_match'
|
||
|
|
))
|
||
|
|
""")
|
||
|
|
conn.commit()
|
||
|
|
|
||
|
|
remaining = conn.execute("""
|
||
|
|
SELECT COUNT(*) as n FROM ki_bewertungen WHERE typ='umsetzung_match'
|
||
|
|
""").fetchone()["n"]
|
||
|
|
|
||
|
|
print(f"Gelöscht: {broken}")
|
||
|
|
print(f"Verbleibend (intakt): {remaining}")
|
||
|
|
print(f"→ Runner wird {broken} erneut matchen")
|
||
|
|
|
||
|
|
conn.close()
|