+# 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.
"""
FAIL = 1
FATAL = 2
NOT_APPLICABLE = 3
+ WARN = 4
def _check(hint=None):
""" Decorator for checks. It adds the function to the list of
"""
def decorator(func):
title = func.__doc__.split('\n', 1)[0].strip()
+
def run_check(conn, config):
print(title, end=' ... ')
ret = func(conn, config)
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:
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.
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
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.