]> git.openstreetmap.org Git - nominatim.git/commitdiff
remove remaining references to php code
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 15 Sep 2024 13:33:59 +0000 (15:33 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 15 Sep 2024 13:33:59 +0000 (15:33 +0200)
cmake/paths-py-no-php.tmpl
packaging/nominatim-api/extra_src/paths.py
packaging/nominatim-db/extra_src/nominatim_db/paths.py
src/nominatim_db/cli.py
src/nominatim_db/config.py
src/nominatim_db/tokenizer/factory.py
src/nominatim_db/tokenizer/icu_tokenizer.py
src/nominatim_db/tokenizer/legacy_tokenizer.py
src/nominatim_db/tools/exec_utils.py
test/python/cli/test_cli.py

index 36856bf3c37c4330ab9c012a5830d00c06f0a632..a95cb6645b5ebdca2210530b39bc9607d6dd3835 100644 (file)
@@ -9,7 +9,6 @@ Path settings for extra data used by Nominatim (installed version).
 """
 from pathlib import Path
 
 """
 from pathlib import Path
 
-PHPLIB_DIR = None
 SQLLIB_DIR = (Path('@NOMINATIM_LIBDIR@') / 'lib-sql').resolve()
 DATA_DIR = Path('@NOMINATIM_DATADIR@').resolve()
 CONFIG_DIR = Path('@NOMINATIM_CONFIGDIR@').resolve()
 SQLLIB_DIR = (Path('@NOMINATIM_LIBDIR@') / 'lib-sql').resolve()
 DATA_DIR = Path('@NOMINATIM_DATADIR@').resolve()
 CONFIG_DIR = Path('@NOMINATIM_CONFIGDIR@').resolve()
index 6131319ca8d39878b58c7bda481f5ad38fbf6655..797acbb55eebccd279cbcc0be9cdec69a66e84fd 100644 (file)
@@ -9,7 +9,6 @@ Path settings for extra data used by Nominatim.
 """
 from pathlib import Path
 
 """
 from pathlib import Path
 
-PHPLIB_DIR = None
 DATA_DIR = None
 SQLLIB_DIR = None
 CONFIG_DIR = (Path(__file__) / '..' / 'resources' / 'settings').resolve()
 DATA_DIR = None
 SQLLIB_DIR = None
 CONFIG_DIR = (Path(__file__) / '..' / 'resources' / 'settings').resolve()
index 2294834fc1815a70120f8751890a5871fe17c380..796ff08b3519a205b5f8a926a7a46e17c0a89908 100644 (file)
@@ -9,7 +9,6 @@ Path settings for extra data used by Nominatim.
 """
 from pathlib import Path
 
 """
 from pathlib import Path
 
-PHPLIB_DIR = None
 DATA_DIR = (Path(__file__) / '..' / 'resources').resolve()
 SQLLIB_DIR = (DATA_DIR / 'lib-sql')
 CONFIG_DIR = (DATA_DIR / 'settings')
 DATA_DIR = (Path(__file__) / '..' / 'resources').resolve()
 SQLLIB_DIR = (DATA_DIR / 'lib-sql')
 CONFIG_DIR = (DATA_DIR / 'settings')
index 9fd439f8d0f33684e5429f31c7386f57f7625ae3..9a54f338e0f61daecf8fe9e0de0a85a9d53f48f0 100644 (file)
@@ -19,7 +19,6 @@ from pathlib import Path
 
 from .config import Configuration
 from .errors import UsageError
 
 from .config import Configuration
 from .errors import UsageError
-from .tools.exec_utils import run_php_server
 from . import clicmd
 from . import version
 from .clicmd.args import NominatimArgs, Subcommand
 from . import clicmd
 from . import version
 from .clicmd.args import NominatimArgs, Subcommand
@@ -154,10 +153,10 @@ class AdminServe:
     from the current project directory. This webserver is only suitable
     for testing and development. Do not use it in production setups!
 
     from the current project directory. This webserver is only suitable
     for testing and development. Do not use it in production setups!
 
-    There are different webservers available. The default 'php' engine
-    runs the classic PHP frontend. The other engines are Python servers
-    which run the new Python frontend code. This is highly experimental
-    at the moment and may not include the full API.
+    There are two different webserver implementations for Python available:
+    falcon (the default) and starlette. You need to make sure the
+    appropriate Python packages as well as the uvicorn package are
+    installed to use this function.
 
     By the default, the webserver can be accessed at: http://127.0.0.1:8088
     """
 
     By the default, the webserver can be accessed at: http://127.0.0.1:8088
     """
@@ -167,19 +166,12 @@ class AdminServe:
         group.add_argument('--server', default='127.0.0.1:8088',
                            help='The address the server will listen to.')
         group.add_argument('--engine', default='falcon',
         group.add_argument('--server', default='127.0.0.1:8088',
                            help='The address the server will listen to.')
         group.add_argument('--engine', default='falcon',
-                           choices=('php', 'falcon', 'starlette'),
+                           choices=('falcon', 'starlette'),
                            help='Webserver framework to run. (default: falcon)')
 
 
     def run(self, args: NominatimArgs) -> int:
                            help='Webserver framework to run. (default: falcon)')
 
 
     def run(self, args: NominatimArgs) -> int:
-        if args.engine == 'php':
-            if args.config.lib_dir.php is None:
-                raise UsageError("PHP frontend not configured.")
-            LOG.warning('\n\nWARNING: the PHP frontend is deprecated '
-                        'and will be removed in Nominatim 5.0.\n\n')
-            run_php_server(args.server, args.project_dir / 'website')
-        else:
-            asyncio.run(self.run_uvicorn(args))
+        asyncio.run(self.run_uvicorn(args))
 
         return 0
 
 
         return 0
 
index 357cc9d7175caf5e0aa4f71fc804a75bb48e2d25..a34ec9440361bc72c1c3f32f93a29633e1409708 100644 (file)
@@ -74,7 +74,6 @@ class Configuration:
         class _LibDirs:
             module: Path
             osm2pgsql: Path
         class _LibDirs:
             module: Path
             osm2pgsql: Path
-            php = paths.PHPLIB_DIR
             sql = paths.SQLLIB_DIR
             data = paths.DATA_DIR
 
             sql = paths.SQLLIB_DIR
             data = paths.DATA_DIR
 
index b9022d8d0105f3234f7283b0fa9c89286021da1f..5003c322e3764bfb49e1b01c71fbb20112d33543 100644 (file)
@@ -15,9 +15,6 @@ be used consistently when querying and updating the database.
 This module provides the functions to create and configure a new tokenizer
 as well as instantiating the appropriate tokenizer for updating an existing
 database.
 This module provides the functions to create and configure a new tokenizer
 as well as instantiating the appropriate tokenizer for updating an existing
 database.
-
-A tokenizer usually also includes PHP code for querying. The appropriate PHP
-normalizer module is installed, when the tokenizer is created.
 """
 from typing import Optional
 import logging
 """
 from typing import Optional
 import logging
index 7cd96d591fcec97483a721542829f4da90e52430..1b95a90174841f00f552e8023c6ab4ffaef25280 100644 (file)
@@ -13,7 +13,6 @@ from typing import Optional, Sequence, List, Tuple, Mapping, Any, cast, \
 import itertools
 import logging
 from pathlib import Path
 import itertools
 import logging
 from pathlib import Path
-from textwrap import dedent
 
 from psycopg.types.json import Jsonb
 from psycopg import sql as pysql
 
 from psycopg.types.json import Jsonb
 from psycopg import sql as pysql
@@ -64,7 +63,6 @@ class ICUTokenizer(AbstractTokenizer):
         """
         self.loader = ICURuleLoader(config)
 
         """
         self.loader = ICURuleLoader(config)
 
-        self._install_php(config.lib_dir.php, overwrite=True)
         self._save_config()
 
         if init_db:
         self._save_config()
 
         if init_db:
@@ -81,8 +79,6 @@ class ICUTokenizer(AbstractTokenizer):
         with connect(self.dsn) as conn:
             self.loader.load_config_from_db(conn)
 
         with connect(self.dsn) as conn:
             self.loader.load_config_from_db(conn)
 
-        self._install_php(config.lib_dir.php, overwrite=False)
-
 
     def finalize_import(self, config: Configuration) -> None:
         """ Do any required postprocessing to make the tokenizer data ready
 
     def finalize_import(self, config: Configuration) -> None:
         """ Do any required postprocessing to make the tokenizer data ready
@@ -281,22 +277,6 @@ class ICUTokenizer(AbstractTokenizer):
             return list(s[0].split('@')[0] for s in cur)
 
 
             return list(s[0].split('@')[0] for s in cur)
 
 
-    def _install_php(self, phpdir: Optional[Path], overwrite: bool = True) -> None:
-        """ Install the php script for the tokenizer.
-        """
-        if phpdir is not None:
-            assert self.loader is not None
-            php_file = self.data_dir / "tokenizer.php"
-
-            if not php_file.exists() or overwrite:
-                php_file.write_text(dedent(f"""\
-                    <?php
-                    @define('CONST_Max_Word_Frequency', 10000000);
-                    @define('CONST_Term_Normalization_Rules', "{self.loader.normalization_rules}");
-                    @define('CONST_Transliteration', "{self.loader.get_search_rules()}");
-                    require_once('{phpdir}/tokenizer/icu_tokenizer.php');"""), encoding='utf-8')
-
-
     def _save_config(self) -> None:
         """ Save the configuration that needs to remain stable for the given
             database as database properties.
     def _save_config(self) -> None:
         """ Save the configuration that needs to remain stable for the given
             database as database properties.
index 04b7b8814c64eb716e44b23ffb89a57f1c6a2c78..788053322741c5b7cf7403f03520e0d33bffae06 100644 (file)
@@ -14,7 +14,6 @@ import logging
 from pathlib import Path
 import re
 import shutil
 from pathlib import Path
 import re
 import shutil
-from textwrap import dedent
 
 from icu import Transliterator
 import psycopg
 
 from icu import Transliterator
 import psycopg
@@ -120,8 +119,6 @@ class LegacyTokenizer(AbstractTokenizer):
 
         self.normalization = config.TERM_NORMALIZATION
 
 
         self.normalization = config.TERM_NORMALIZATION
 
-        self._install_php(config, overwrite=True)
-
         with connect(self.dsn) as conn:
             _check_module(module_dir, conn)
             self._save_config(conn, config)
         with connect(self.dsn) as conn:
             _check_module(module_dir, conn)
             self._save_config(conn, config)
@@ -145,8 +142,6 @@ class LegacyTokenizer(AbstractTokenizer):
                             config.lib_dir.module,
                             config.project_dir / 'module')
 
                             config.lib_dir.module,
                             config.project_dir / 'module')
 
-        self._install_php(config, overwrite=False)
-
     def finalize_import(self, config: Configuration) -> None:
         """ Do any required postprocessing to make the tokenizer data ready
             for use.
     def finalize_import(self, config: Configuration) -> None:
         """ Do any required postprocessing to make the tokenizer data ready
             for use.
@@ -272,21 +267,6 @@ class LegacyTokenizer(AbstractTokenizer):
             return list(s[0] for s in cur)
 
 
             return list(s[0] for s in cur)
 
 
-    def _install_php(self, config: Configuration, overwrite: bool = True) -> None:
-        """ Install the php script for the tokenizer.
-        """
-        if config.lib_dir.php is not None:
-            php_file = self.data_dir / "tokenizer.php"
-
-            if not php_file.exists() or overwrite:
-                php_file.write_text(dedent(f"""\
-                    <?php
-                    @define('CONST_Max_Word_Frequency', {config.MAX_WORD_FREQUENCY});
-                    @define('CONST_Term_Normalization_Rules', "{config.TERM_NORMALIZATION}");
-                    require_once('{config.lib_dir.php}/tokenizer/legacy_tokenizer.php');
-                    """), encoding='utf-8')
-
-
     def _init_db_tables(self, config: Configuration) -> None:
         """ Set up the word table and fill it with pre-computed word
             frequencies.
     def _init_db_tables(self, config: Configuration) -> None:
         """ Set up the word table and fill it with pre-computed word
             frequencies.
index 1adcc777b053bf7507ffaf8f6bff8fd8e84e8977..4cbbf95d9b650c2e8d11f6c2b36b4d5c32e78c60 100644 (file)
@@ -14,19 +14,12 @@ import re
 import subprocess
 import shutil
 
 import subprocess
 import shutil
 
-from ..typing import StrPath
 from ..db.connection import get_pg_env
 from ..errors import UsageError
 from ..version import OSM2PGSQL_REQUIRED_VERSION
 
 LOG = logging.getLogger()
 
 from ..db.connection import get_pg_env
 from ..errors import UsageError
 from ..version import OSM2PGSQL_REQUIRED_VERSION
 
 LOG = logging.getLogger()
 
-def run_php_server(server_address: str, base_dir: StrPath) -> None:
-    """ Run the built-in server from the given directory.
-    """
-    subprocess.run(['/usr/bin/env', 'php', '-S', server_address],
-                   cwd=str(base_dir), check=True)
-
 
 def run_osm2pgsql(options: Mapping[str, Any]) -> None:
     """ Run osm2pgsql with the given options.
 
 def run_osm2pgsql(options: Mapping[str, Any]) -> None:
     """ Run osm2pgsql with the given options.
index 2831f84f1bc801d690966827bc2f741f4a440471..d42df50a760066f972628817b830c67899dea04a 100644 (file)
@@ -37,15 +37,6 @@ def test_cli_version(cli_call, capsys):
     assert captured.out.startswith('Nominatim version')
 
 
     assert captured.out.startswith('Nominatim version')
 
 
-def test_cli_serve_php(cli_call, mock_func_factory):
-    func = mock_func_factory(nominatim_db.cli, 'run_php_server')
-
-    cli_call('serve', '--engine', 'php') == 0
-
-    assert func.called == 1
-
-
-
 class TestCliWithDb:
 
     @pytest.fixture(autouse=True)
 class TestCliWithDb:
 
     @pytest.fixture(autouse=True)