1 # SPDX-License-Identifier: GPL-3.0-or-later
3 # This file is part of Nominatim. (https://nominatim.org)
5 # Copyright (C) 2024 by the Nominatim developer community.
6 # For a full list of authors see the git log.
8 Test for loading extra Python modules.
10 from pathlib import Path
15 from nominatim_db.config import Configuration
18 def test_config(src_dir, tmp_path):
19 """ Create a configuration object with project and config directories
20 in a temporary directory.
22 (tmp_path / 'project').mkdir()
23 (tmp_path / 'config').mkdir()
24 conf = Configuration(tmp_path / 'project')
25 conf.config_dir = tmp_path / 'config'
29 def test_load_default_module(test_config):
30 module = test_config.load_plugin_module('version', 'nominatim_db')
32 assert isinstance(module.NOMINATIM_VERSION, tuple)
34 def test_load_default_module_with_hyphen(test_config):
35 module = test_config.load_plugin_module('place-info', 'nominatim_db.data')
37 assert isinstance(module.PlaceInfo, object)
40 def test_load_plugin_module(test_config, tmp_path):
41 (tmp_path / 'project' / 'testpath').mkdir()
42 (tmp_path / 'project' / 'testpath' / 'mymod.py')\
43 .write_text("def my_test_function():\n return 'gjwitlsSG42TG%'")
45 module = test_config.load_plugin_module('testpath/mymod.py', 'private.something')
47 assert module.my_test_function() == 'gjwitlsSG42TG%'
49 # also test reloading module
50 (tmp_path / 'project' / 'testpath' / 'mymod.py')\
51 .write_text("def my_test_function():\n return 'hjothjorhj'")
53 module = test_config.load_plugin_module('testpath/mymod.py', 'private.something')
55 assert module.my_test_function() == 'gjwitlsSG42TG%'
58 def test_load_external_library_module(test_config, tmp_path, monkeypatch):
59 MODULE_NAME = 'foogurenqodr4'
60 pythonpath = tmp_path / 'priv-python'
62 (pythonpath / MODULE_NAME).mkdir()
63 (pythonpath / MODULE_NAME / '__init__.py').write_text('')
64 (pythonpath / MODULE_NAME / 'tester.py')\
65 .write_text("def my_test_function():\n return 'gjwitlsSG42TG%'")
67 monkeypatch.syspath_prepend(pythonpath)
69 module = test_config.load_plugin_module(f'{MODULE_NAME}.tester', 'private.something')
71 assert module.my_test_function() == 'gjwitlsSG42TG%'
73 # also test reloading module
74 (pythonpath / MODULE_NAME / 'tester.py')\
75 .write_text("def my_test_function():\n return 'dfigjreigj'")
77 module = test_config.load_plugin_module(f'{MODULE_NAME}.tester', 'private.something')
79 assert module.my_test_function() == 'gjwitlsSG42TG%'
81 del sys.modules[f'{MODULE_NAME}.tester']