From ea2b3c18d8d7433065124c923827c520d00f02f0 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Wed, 18 Feb 2026 19:41:31 +0000 Subject: [PATCH] Show Nominatim 403 error to user in Web UI Closes #5 Co-Authored-By: Claude Sonnet 4.6 --- matcher/nominatim.py | 2 ++ web_view.py | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/matcher/nominatim.py b/matcher/nominatim.py index f065625..4717139 100644 --- a/matcher/nominatim.py +++ b/matcher/nominatim.py @@ -31,6 +31,8 @@ def lookup_with_params(**kwargs: str) -> list[Hit]: r = requests.get(url, params=params, headers=user_agent_headers()) if r.status_code == 500: raise SearchError + if r.status_code == 403: + raise SearchError("Nominatim returned 403 Forbidden") try: reply: list[Hit] = json.loads(r.text, object_pairs_hook=OrderedDict) diff --git a/web_view.py b/web_view.py index 16049b3..f8147d8 100755 --- a/web_view.py +++ b/web_view.py @@ -653,7 +653,10 @@ def api_missing_wikidata_items(): @app.route("/api/1/search") def api_search(): q = flask.request.args["q"] - hits = nominatim.lookup(q) + try: + hits = nominatim.lookup(q) + except nominatim.SearchError as e: + return cors_jsonify({"success": False, "error": str(e)}, 503) for hit in hits: hit["name"] = nominatim.get_hit_name(hit) hit["label"] = nominatim.get_hit_label(hit)