Verhaltenshinweise aus Tests von ics_to_discourse.py
Ich habe eine Reihe von Tests mit diesem Skript durchgeführt (mit und ohne --time-only-dedupe) und dachte, es wäre nützlich, den Update-/Übernahmefluss im Detail zu dokumentieren.
1. Wie die Einzigartigkeit bestimmt wird
- Standardmodus: Die Übernahme erfordert, dass Start + Ende + Ort exakt übereinstimmen.
- Mit
--time-only-dedupe: Die Übernahme erfordert nur Start + Ende; der Ort wird als „nahe genug“ behandelt.
Wenn kein vorhandenes Thema diesen Regeln entspricht, wird ein neues Thema erstellt.
2. Die Rolle des UID-Markers
- Jedes Ereignisthema erhält einen versteckten HTML-Marker im ersten Beitrag:
<!-- ICSUID:xxxxxxxxxxxxxxxx -->
- Bei nachfolgenden Ausführungen sucht das Skript zuerst nach diesem Marker.
- Wenn er gefunden wird, wird das Thema als UID-Übereinstimmung betrachtet und direkt aktualisiert, unabhängig davon, wie unübersichtlich oder veraltet der BESCHREIBUNGstext sein mag.
- Dies macht die UID zum wahren Identitätsschlüssel. Sichtbare Beschreibungsfelder beeinflussen die Übereinstimmung nicht.
3. Update-Fluss mit UID-Übereinstimmung
- Das Skript ruft den ersten Beitrag ab und entfernt den Marker:
old_clean = strip_marker(old_raw)
fresh_clean = strip_marker(fresh_raw)
- Wenn old_clean == fresh_clean: kein Update (verhindert Änderungen).
- Wenn sie sich unterscheiden: Prüfen, ob die Änderung „bedeutsam“ ist:
meaningful = (
_norm_time(old_attrs.get("start")) != _norm_time(new_attrs.get("start"))
or _norm_time(old_attrs.get("end")) != _norm_time(new_attrs.get("end"))
or _norm_loc(old_attrs.get("location")) != _norm_loc(new_attrs.get("location"))
)
- Wenn meaningful = True → Update mit Bump (Thema steigt in „Neueste“ auf).
- Wenn meaningful = False → Update leise (bypass_bump=True → nur Überarbeitung, kein Bump).
- Tags werden zusammengeführt (stellt sicher, dass statische/Standard-Tags vorhanden sind, entfernt niemals Moderator-/manuelle Tags).
- Titel und Kategorie werden bei einem Update niemals geändert.
- Update-Fluss ohne UID-Übereinstimmung
- Das Skript versucht die Übernahme:
• Erstellt Kandidaten-Tripel aus Start/Ende/Ort (oder nur Start/Ende mit --time-only-dedupe).
• Sucht in /search.json und /latest.json nach einem vorhandenen Ereignis mit übereinstimmenden Attributen.
• Wenn gefunden → Übernimmt dieses Thema, rüstet es mit UID-Marker + Tags nach (Text bleibt in diesem Stadium unverändert).
• Wenn nicht gefunden → Erstellt ein brandneues Thema mit dem Marker und den Tags. - Sobald übernommen oder erstellt, werden alle zukünftigen Synchronisierungen direkt über die UID aufgelöst.
⸻
- Praktische Konsequenzen
• Zeitänderungen
• Standard: Übernahme schlägt fehl (Zeiten unterscheiden sich) → neues Thema wird erstellt.
• Mit --time-only-dedupe: Übernahme schlägt auf die gleiche Weise fehl; neues Thema wird erstellt.
• Ortsänderungen
• Standard: Übernahme schlägt fehl (Ort unterscheidet sich) → neues Thema wird erstellt.
• Mit --time-only-dedupe: Übernahme gelingt (Zeiten stimmen überein), aber die Ortsänderung wird als „bedeutsam“ gekennzeichnet → Update mit Bump.
• Beschreibungsänderungen
• Wenn sich der BESCHREIBUNGstext ändert, aber Start/Ende/Ort nicht:
• Der Text wird leise aktualisiert (bypass_bump=True).
• Eine Überarbeitung des Themas wird erstellt, aber kein Bump in „Neueste“.
• Wenn die BESCHREIBUNG unverändert ist (oder nur Rauschen wie „Zuletzt aktualisiert:“ enthält, das normalisiert wird), erfolgt überhaupt keine Aktualisierung.
• UID-Marker
• Stellt eine zuverlässige Übereinstimmung bei zukünftigen Synchronisierungen sicher.
• Bedeutet, dass unübersichtliche BESCHREIBUNGsfelder nicht beeinflussen, ob das richtige Thema gefunden wird.
⸻
- Warum die BESCHREIBUNG manchmal „gleich bleibt“
Das Skript vergleicht den gesamten Text (abzüglich des UID-Markers).
Wenn nur eine volatile Zeile wie „Zuletzt aktualisiert:“ unterschiedlich ist, diese aber normalisiert wird (z. B. Leerzeichen, Zeilenumbrüche, Unicode), erscheinen old_clean und fresh_clean identisch → es wird keine Aktualisierung vorgenommen.
Dies ist beabsichtigt, um Änderungen durch Rauschen im Feed zu verhindern.
⸻
Zusammenfassung
• Zeit bestimmt die Einzigartigkeit (erstellt immer ein neues Thema, wenn sich die Zeiten ändern).
• Ortsänderungen → sichtbarer Bump (damit Benutzer Veranstaltungsort-Updates bemerken).
• Beschreibungsänderungen → leises Update (Überarbeitung, aber kein Bump).
• UID-Marker = zuverlässiger Identitätsschlüssel, stellt sicher, dass das richtige Thema immer gefunden wird, auch wenn die BESCHREIBUNG veraltet oder unübersichtlich ist.
Dies stellt eine gute Balance dar: wichtige Änderungen werden in „Neueste“ angezeigt, unwichtige Änderungen bleiben unsichtbar.