From 72a1ca284aa42c0096ab47833f65c3bbb31538ae Mon Sep 17 00:00:00 2001 From: Serge Koenigsmann Date: Tue, 6 Oct 2026 11:51:07 +0200 Subject: [PATCH] mediawiki: Suchfehler lesbar statt als Stacktrace (0.1.1) Gleichstand mit inmedias.it/dokumentierer d1eeb94. Eine von CirrusSearch abgelehnte Suchanfrage liess mwclient.errors.APIError bis nach oben durchschlagen - der Benutzer sah einen Stacktrace statt einer Meldung. cmd_search faengt den Fehler jetzt ab und beendet mit Code 1. Fuer cirrussearch-parse-error gibt es einen eigenen Hinweis: "insource:wort" funktioniert, die Regex-Form "insource:/muster/" nicht. Letztere braucht das Elasticsearch-Plugin wikimedia-extra, das auf unserer Instanz fehlt. Co-Authored-By: Claude Opus 5 --- plugins/mediawiki/.claude-plugin/plugin.json | 2 +- plugins/mediawiki/skills/mediawiki/wiki.py | 21 +++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/plugins/mediawiki/.claude-plugin/plugin.json b/plugins/mediawiki/.claude-plugin/plugin.json index 2702aa9..b9ef4a7 100644 --- a/plugins/mediawiki/.claude-plugin/plugin.json +++ b/plugins/mediawiki/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "mediawiki", - "version": "0.1.0", + "version": "0.1.1", "description": "MediaWiki-Seiten/Templates lesen, rendern und schreiben via wiki.py (fetch/update/render/search, Instanzen wiki & devwiki).", "author": { "name": "inmedias.it" diff --git a/plugins/mediawiki/skills/mediawiki/wiki.py b/plugins/mediawiki/skills/mediawiki/wiki.py index 8154896..5da9866 100755 --- a/plugins/mediawiki/skills/mediawiki/wiki.py +++ b/plugins/mediawiki/skills/mediawiki/wiki.py @@ -88,13 +88,20 @@ def cmd_search(args: argparse.Namespace) -> None: sys.exit(f"Error: unknown namespace '{ns_key}'. " f"Known: all, {', '.join(NAMESPACES)}") - result = site.api( - "query", list="search", - srsearch=args.query, - srnamespace=ns, - srlimit=50, - srprop="title|snippet", - ) + try: + result = site.api( + "query", list="search", + srsearch=args.query, + srnamespace=ns, + srlimit=50, + srprop="title|snippet", + ) + except mwclient.errors.APIError as exc: + if exc.code == "cirrussearch-parse-error": + sys.exit(f"Error: Suchanfrage nicht verstanden: {args.query!r}\n" + f"Hinweis: 'insource:wort' funktioniert, die Regex-Form " + f"'insource:/muster/' ist auf dieser Instanz nicht freigeschaltet.") + sys.exit(f"Error: Suche fehlgeschlagen ({exc.code}): {exc.info}") hits = result["query"]["search"] if not hits: print("(keine Ergebnisse)", file=sys.stderr)