X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/8b1a509442a3fa051146f82b8293126916ad8617..2d1a22705f7f2f067f2c839c32caf55941a37b01:/nominatim/tools/check_database.py diff --git a/nominatim/tools/check_database.py b/nominatim/tools/check_database.py index d4f793b4..7ac31271 100644 --- a/nominatim/tools/check_database.py +++ b/nominatim/tools/check_database.py @@ -1,3 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# This file is part of Nominatim. (https://nominatim.org) +# +# Copyright (C) 2022 by the Nominatim developer community. +# For a full list of authors see the git log. """ Collection of functions that check if the database is complete and functional. """ @@ -17,6 +23,7 @@ class CheckState(Enum): FAIL = 1 FATAL = 2 NOT_APPLICABLE = 3 + WARN = 4 def _check(hint=None): """ Decorator for checks. It adds the function to the list of @@ -24,6 +31,7 @@ def _check(hint=None): """ def decorator(func): title = func.__doc__.split('\n', 1)[0].strip() + def run_check(conn, config): print(title, end=' ... ') ret = func(conn, config) @@ -33,6 +41,11 @@ def _check(hint=None): params = {} if ret == CheckState.OK: print('\033[92mOK\033[0m') + elif ret == CheckState.WARN: + print('\033[93mWARNING\033[0m') + if hint: + print('') + print(dedent(hint.format(**params))) elif ret == CheckState.NOT_APPLICABLE: print('not applicable') else: @@ -98,13 +111,12 @@ def _get_indexes(conn): if conn.table_exists('place'): indexes.extend(('idx_placex_pendingsector', 'idx_location_area_country_place_id', - 'idx_place_osm_unique' - )) + 'idx_place_osm_unique')) return indexes -### CHECK FUNCTIONS +# CHECK FUNCTIONS # # Functions are exectured in the order they appear here. @@ -166,7 +178,7 @@ def check_tokenizer(_, config): return CheckState.FAIL, dict(msg="""\ Cannot load tokenizer. Did the import finish sucessfully?""") - result = tokenizer.check_database() + result = tokenizer.check_database(config) if result is None: return CheckState.OK @@ -174,6 +186,23 @@ def check_tokenizer(_, config): return CheckState.FAIL, dict(msg=result) +@_check(hint="""\ + Wikipedia/Wikidata importance tables missing. + Quality of search results may be degraded. Reverse geocoding is unaffected. + See https://nominatim.org/release-docs/latest/admin/Import/#wikipediawikidata-rankings + """) +def check_existance_wikipedia(conn, _): + """ Checking for wikipedia/wikidata data + """ + if not conn.table_exists('search_name'): + return CheckState.NOT_APPLICABLE + + with conn.cursor() as cur: + cnt = cur.scalar('SELECT count(*) FROM wikipedia_article') + + return CheckState.WARN if cnt == 0 else CheckState.OK + + @_check(hint="""\ The indexing didn't finish. {count} entries are not yet indexed.