]> git.openstreetmap.org Git - nominatim.git/commitdiff
do not hide errors when importing tokenizer
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 18 May 2021 14:28:21 +0000 (16:28 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Tue, 18 May 2021 14:28:21 +0000 (16:28 +0200)
Explicitly check for the tokenizer source file to check that
the name is correct. We can't use the import error for that
because it hides other import errors like a missing
library.

Fixes #2327.

nominatim/tokenizer/factory.py
test/python/conftest.py

index e0c06293ff56e22b9d90938bb5af923b0e279bdb..069672d4a1fd4d9b874943b5d44a367d4f2ef9e8 100644 (file)
@@ -15,6 +15,7 @@ normalizer module is installed, when the tokenizer is created.
 """
 import logging
 import importlib
+from pathlib import Path
 
 from ..errors import UsageError
 from ..db import properties
@@ -25,12 +26,13 @@ LOG = logging.getLogger()
 def _import_tokenizer(name):
     """ Load the tokenizer.py module from project directory.
     """
-    try:
-        return importlib.import_module('nominatim.tokenizer.' + name + '_tokenizer')
-    except ModuleNotFoundError as exp:
+    src_file = Path(__file__).parent / (name + '_tokenizer.py')
+    if not src_file.is_file():
         LOG.fatal("No tokenizer named '%s' available. "
                   "Check the setting of NOMINATIM_TOKENIZER.", name)
-        raise UsageError('Tokenizer not found') from exp
+        raise UsageError('Tokenizer not found')
+
+    return importlib.import_module('nominatim.tokenizer.' + name + '_tokenizer')
 
 
 def create_tokenizer(config, init_db=True, module_name=None):
index 923e6876a9beaced058600e303c8fa5e874ecafb..a3249474c4ad3acfd56572eea63deeb5d5a51702 100644 (file)
@@ -17,6 +17,7 @@ from nominatim.config import Configuration
 from nominatim.db import connection
 from nominatim.db.sql_preprocessor import SQLPreprocessor
 from nominatim.db import properties
+import nominatim.tokenizer.factory
 
 import dummy_tokenizer
 import mocks
@@ -273,7 +274,7 @@ def tokenizer_mock(monkeypatch, property_table, temp_db_conn, tmp_path):
     def _import_dummy(module, *args, **kwargs):
         return dummy_tokenizer
 
-    monkeypatch.setattr(importlib, "import_module", _import_dummy)
+    monkeypatch.setattr(nominatim.tokenizer.factory, "_import_tokenizer", _import_dummy)
     properties.set_property(temp_db_conn, 'tokenizer', 'dummy')
 
     def _create_tokenizer():