mediawiki: purge-Subcommand und der Parser-Cache-Fallstrick
wiki.py mit dokumentierer/wiki.py synchronisiert (purge-Subcommand). SKILL.md: purge und das bisher undokumentierte upload in die Befehlsliste, dazu ein Abschnitt zu Seiten mit #get_web_data. Die Vorlagen werden nicht bei jedem Aufruf ausgefuehrt; wer nach einer Datenaenderung render aufruft und alte Werte sieht, hat meist den Cache vor sich und nicht kaputte Daten. description um den Fall erweitert, damit die Skill bei "Wiki zeigt veraltete Daten" gefunden wird. version 0.1.0 -> 0.2.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ab56ba0c64
commit
7efb302c10
2 files changed
+50
-2
No files matched your search
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: mediawiki
|
name: mediawiki
|
||||||
description: MediaWiki-Seiten und -Templates lesen, rendern und schreiben. Use when editing/fetching wiki pages (wiki.inmedias.it, devwiki.inmedias.it) or when the user mentions "wiki", "Vorlage/Template", "Kundenseite".
|
description: MediaWiki-Seiten und -Templates lesen, rendern, schreiben und deren Parser-Cache leeren. Use when editing/fetching wiki pages (wiki.inmedias.it, devwiki.inmedias.it) or when the user mentions "wiki", "Vorlage/Template", "Kundenseite", or when a page shows stale API data.
|
||||||
version: 0.1.0
|
version: 0.2.0
|
||||||
---
|
---
|
||||||
|
|
||||||
# MediaWiki (wiki.py)
|
# MediaWiki (wiki.py)
|
||||||
@@ -37,6 +37,8 @@ oder anderen direkten Server-Eingriffen. Reine Lese-/Render-Checks
|
|||||||
./wiki.py -w devwiki search "Suchbegriff" [-n <namespace>] # Titelsuche
|
./wiki.py -w devwiki search "Suchbegriff" [-n <namespace>] # Titelsuche
|
||||||
./wiki.py -w devwiki update "Kunde:Beispiel GmbH" datei.wiki --summary "..." # speichern
|
./wiki.py -w devwiki update "Kunde:Beispiel GmbH" datei.wiki --summary "..." # speichern
|
||||||
./wiki.py -w wiki update "Titel" - --summary "..." # Inhalt von stdin
|
./wiki.py -w wiki update "Titel" - --summary "..." # Inhalt von stdin
|
||||||
|
./wiki.py -w wiki purge "Titel" ["Titel 2" ...] [--links] # Parser-Cache leeren
|
||||||
|
./wiki.py -w wiki upload /pfad/bild.png bild.png --description "..." # Datei hochladen
|
||||||
```
|
```
|
||||||
|
|
||||||
Tipp: Beim Schreiben den Inhalt aus einer Datei (`datei.wiki`) oder `-` (stdin)
|
Tipp: Beim Schreiben den Inhalt aus einer Datei (`datei.wiki`) oder `-` (stdin)
|
||||||
@@ -57,6 +59,27 @@ dann `.env` im aktuellen Verzeichnis, dann bereits gesetzte Env-Variablen). Sieh
|
|||||||
|
|
||||||
Es empfiehlt sich ein eigener Bot-/Service-Account mit den nötigen Schreibrechten.
|
Es empfiehlt sich ein eigener Bot-/Service-Account mit den nötigen Schreibrechten.
|
||||||
|
|
||||||
|
## Seiten, die ihre Daten aus einer API holen
|
||||||
|
|
||||||
|
Vorlagen mit `#get_web_data` (External Data) werden **nicht** bei jedem
|
||||||
|
Seitenaufruf ausgeführt. MediaWiki liefert die Seite aus dem Parser-Cache und
|
||||||
|
fragt die API gar nicht erst an. Ändern sich die Daten hinter der API, zeigt
|
||||||
|
die Seite weiter beliebig alte Werte — ohne Fehlermeldung, ohne dass es
|
||||||
|
jemandem auffällt.
|
||||||
|
|
||||||
|
Deshalb gehört nach jedem Datenupload ein Purge:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./wiki.py -w wiki purge "Nextcloud (Hosting)"
|
||||||
|
```
|
||||||
|
|
||||||
|
`--links` schaltet zusätzlich `forcelinkupdate` ein (langsamer, aktualisiert
|
||||||
|
die Linktabellen) — für reine Datenaktualisierungen nicht nötig.
|
||||||
|
|
||||||
|
Das betrifft auch die Fehlersuche: Wer nach einer Änderung `render` aufruft und
|
||||||
|
die alten Werte sieht, hat meist nicht die Daten kaputt, sondern nur den Cache
|
||||||
|
vor sich. Erst purgen, dann urteilen.
|
||||||
|
|
||||||
## Hinweise
|
## Hinweise
|
||||||
- `search` liefert Titel; `render` ist nützlich, um vor/nach dem Schreiben das
|
- `search` liefert Titel; `render` ist nützlich, um vor/nach dem Schreiben das
|
||||||
Ergebnis zu prüfen, ohne die Seite im Browser zu öffnen.
|
Ergebnis zu prüfen, ohne die Seite im Browser zu öffnen.
|
||||||
|
|||||||
@@ -110,6 +110,25 @@ def cmd_render(args: argparse.Namespace) -> None:
|
|||||||
print(result["parse"]["text"]["*"], end="")
|
print(result["parse"]["text"]["*"], end="")
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_purge(args: argparse.Namespace) -> None:
|
||||||
|
"""Parser-Cache einer oder mehrerer Seiten leeren.
|
||||||
|
|
||||||
|
Noetig fuer Seiten, die ihre Daten per #get_web_data aus einer API holen:
|
||||||
|
MediaWiki rendert sonst aus dem Parser-Cache weiter und fragt die API gar
|
||||||
|
nicht erst an - die Seite zeigt dann beliebig alte Werte, ohne dass das
|
||||||
|
irgendwo auffaellt.
|
||||||
|
"""
|
||||||
|
site = get_site(args.wiki)
|
||||||
|
result = site.api("purge", titles="|".join(args.titles),
|
||||||
|
forcelinkupdate=1 if args.links else None)
|
||||||
|
for entry in result.get("purge", []):
|
||||||
|
title = entry.get("title", "?")
|
||||||
|
if "missing" in entry:
|
||||||
|
print(f"Error: page '{title}' does not exist", file=sys.stderr)
|
||||||
|
else:
|
||||||
|
print(f"Purged '{title}'")
|
||||||
|
|
||||||
|
|
||||||
def cmd_upload(args: argparse.Namespace) -> None:
|
def cmd_upload(args: argparse.Namespace) -> None:
|
||||||
path = Path(args.file_path)
|
path = Path(args.file_path)
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
@@ -161,6 +180,12 @@ def main() -> None:
|
|||||||
render_p.add_argument("title", help="Page title")
|
render_p.add_argument("title", help="Page title")
|
||||||
render_p.set_defaults(func=cmd_render)
|
render_p.set_defaults(func=cmd_render)
|
||||||
|
|
||||||
|
purge_p = sub.add_parser("purge", help="Clear the parser cache of one or more pages")
|
||||||
|
purge_p.add_argument("titles", nargs="+", help="Page title(s)")
|
||||||
|
purge_p.add_argument("--links", action="store_true",
|
||||||
|
help="Also run forcelinkupdate (slower, updates link tables)")
|
||||||
|
purge_p.set_defaults(func=cmd_purge)
|
||||||
|
|
||||||
upload_p = sub.add_parser("upload", help="Upload a local file to the wiki file store")
|
upload_p = sub.add_parser("upload", help="Upload a local file to the wiki file store")
|
||||||
upload_p.add_argument("file_path", help="Absolute path to the local file")
|
upload_p.add_argument("file_path", help="Absolute path to the local file")
|
||||||
upload_p.add_argument("wiki_filename", help="Target filename on the wiki (without 'File:' prefix)")
|
upload_p.add_argument("wiki_filename", help="Target filename on the wiki (without 'File:' prefix)")
|
||||||
|
|||||||
Reference in new issue
Block a user