From c709372d88a69b3bf9a5a38a809ce16010951969 Mon Sep 17 00:00:00 2001 From: Dennis Priskorn Date: Wed, 28 Aug 2024 09:51:11 +0200 Subject: [PATCH 1/3] chore: requirements.txt: Add pinned versions --- requirements.txt | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1a601c3..35585c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,14 @@ -flask --e git+https://github.com/maxcountryman/flask-login.git#egg=Flask-Login -GeoIP -lxml -maxminddb -requests -sqlalchemy -requests_oauthlib -geoalchemy2 -simplejson -user_agents -num2words -psycopg2 +flask==3.0.3 +-e git+https://github.com/maxcountryman/flask-login.git@26d12eaa99a18fc91e662ef0c8466245b8865c1c#egg=Flask-Login +GeoIP==1.3.2 +lxml==5.3.0 +maxminddb==2.6.2 +requests==2.32.3 +sqlalchemy==2.0.32 +requests_oauthlib==2.0.0 +geoalchemy2==0.15.2 +simplejson==3.19.3 +user_agents==2.2.0 +num2words==0.5.13 +psycopg2==2.9.9 + From 0d2cfd56cb3761e2025a75313216ee78eeee1e98 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Wed, 28 Aug 2024 08:17:05 +0000 Subject: [PATCH 2/3] Add missing create_db.py script --- create_db.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100755 create_db.py diff --git a/create_db.py b/create_db.py new file mode 100755 index 0000000..2c1c6f9 --- /dev/null +++ b/create_db.py @@ -0,0 +1,35 @@ +#!/usr/bin/python3 + +from sqlalchemy.schema import CreateIndex, CreateTable + +from matcher import database, model + +DB_URL = "postgresql:///matcher" +database.init_db(DB_URL) + + +def create_db(): + model.Base.metadata.create_all(database.session.get_bind()) + + +def print_create_table(classes): + database.init_db(DB_URL) + + engine = database.session.get_bind() + + for cls in classes: + sql = str(CreateTable(cls.__table__).compile(engine)) + print(sql.strip() + ";") + + for index in cls.__table__.indexes: + sql = str(CreateIndex(index).compile(engine)) + print(sql.strip() + ";") + + +# print_create_table([model.ItemIsA]) +# print_create_table([model.EditSession]) +# print_create_table([model.Changeset, model.ChangesetEdit, model.SkipIsA]) +# print_create_table([model.User]) +# print_create_table([model.Extract]) + +create_db() From ea2b3c18d8d7433065124c923827c520d00f02f0 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Wed, 18 Feb 2026 19:41:31 +0000 Subject: [PATCH 3/3] 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)