remove remaining references to php code

This commit is contained in:
Sarah Hoffmann
2024-09-15 15:33:59 +02:00
parent 7ba5152493
commit 7717bbf59d
10 changed files with 6 additions and 77 deletions

View 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() SQLLIB_DIR = (Path('@NOMINATIM_LIBDIR@') / 'lib-sql').resolve()
DATA_DIR = Path('@NOMINATIM_DATADIR@').resolve() DATA_DIR = Path('@NOMINATIM_DATADIR@').resolve()
CONFIG_DIR = Path('@NOMINATIM_CONFIGDIR@').resolve() CONFIG_DIR = Path('@NOMINATIM_CONFIGDIR@').resolve()

View 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 DATA_DIR = None
SQLLIB_DIR = None SQLLIB_DIR = None
CONFIG_DIR = (Path(__file__) / '..' / 'resources' / 'settings').resolve() CONFIG_DIR = (Path(__file__) / '..' / 'resources' / 'settings').resolve()

View 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() DATA_DIR = (Path(__file__) / '..' / 'resources').resolve()
SQLLIB_DIR = (DATA_DIR / 'lib-sql') SQLLIB_DIR = (DATA_DIR / 'lib-sql')
CONFIG_DIR = (DATA_DIR / 'settings') CONFIG_DIR = (DATA_DIR / 'settings')

View File

@@ -19,7 +19,6 @@ from pathlib import Path
from .config import Configuration from .config import Configuration
from .errors import UsageError from .errors import UsageError
from .tools.exec_utils import run_php_server
from . import clicmd from . import clicmd
from . import version from . import version
from .clicmd.args import NominatimArgs, Subcommand from .clicmd.args import NominatimArgs, Subcommand
@@ -154,10 +153,10 @@ class AdminServe:
from the current project directory. This webserver is only suitable from the current project directory. This webserver is only suitable
for testing and development. Do not use it in production setups! for testing and development. Do not use it in production setups!
There are different webservers available. The default 'php' engine There are two different webserver implementations for Python available:
runs the classic PHP frontend. The other engines are Python servers falcon (the default) and starlette. You need to make sure the
which run the new Python frontend code. This is highly experimental appropriate Python packages as well as the uvicorn package are
at the moment and may not include the full API. 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', group.add_argument('--server', default='127.0.0.1:8088',
help='The address the server will listen to.') help='The address the server will listen to.')
group.add_argument('--engine', default='falcon', group.add_argument('--engine', default='falcon',
choices=('php', 'falcon', 'starlette'), choices=('falcon', 'starlette'),
help='Webserver framework to run. (default: falcon)') help='Webserver framework to run. (default: falcon)')
def run(self, args: NominatimArgs) -> int: def run(self, args: NominatimArgs) -> int:
if args.engine == 'php': asyncio.run(self.run_uvicorn(args))
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))
return 0 return 0

View File

@@ -74,7 +74,6 @@ class Configuration:
class _LibDirs: class _LibDirs:
module: Path module: Path
osm2pgsql: Path osm2pgsql: Path
php = paths.PHPLIB_DIR
sql = paths.SQLLIB_DIR sql = paths.SQLLIB_DIR
data = paths.DATA_DIR data = paths.DATA_DIR

View 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 This module provides the functions to create and configure a new tokenizer
as well as instantiating the appropriate tokenizer for updating an existing as well as instantiating the appropriate tokenizer for updating an existing
database. 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 from typing import Optional
import logging import logging

View File

@@ -13,7 +13,6 @@ from typing import Optional, Sequence, List, Tuple, Mapping, Any, cast, \
import itertools import itertools
import logging import logging
from pathlib import Path from pathlib import Path
from textwrap import dedent
from psycopg.types.json import Jsonb from psycopg.types.json import Jsonb
from psycopg import sql as pysql 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() self._save_config()
if init_db: if init_db:
@@ -81,8 +79,6 @@ class ICUTokenizer(AbstractTokenizer):
with connect(self.dsn) as conn: with connect(self.dsn) as conn:
self.loader.load_config_from_db(conn) self.loader.load_config_from_db(conn)
self._install_php(config.lib_dir.php, overwrite=False)
def finalize_import(self, config: Configuration) -> None: def finalize_import(self, config: Configuration) -> None:
""" Do any required postprocessing to make the tokenizer data ready """ 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: def _save_config(self) -> None:
""" Save the configuration that needs to remain stable for the given """ Save the configuration that needs to remain stable for the given
database as database properties. database as database properties.

View File

@@ -14,7 +14,6 @@ import logging
from pathlib import Path from pathlib import Path
import re import re
import shutil import shutil
from textwrap import dedent
from icu import Transliterator from icu import Transliterator
import psycopg 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: with connect(self.dsn) as conn:
_check_module(module_dir, conn) _check_module(module_dir, conn)
self._save_config(conn, config) self._save_config(conn, config)
@@ -145,8 +142,6 @@ class LegacyTokenizer(AbstractTokenizer):
config.lib_dir.module, config.lib_dir.module,
config.project_dir / 'module') config.project_dir / 'module')
self._install_php(config, overwrite=False)
def finalize_import(self, config: Configuration) -> None: def finalize_import(self, config: Configuration) -> None:
""" Do any required postprocessing to make the tokenizer data ready """ Do any required postprocessing to make the tokenizer data ready
for use. 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: def _init_db_tables(self, config: Configuration) -> None:
""" Set up the word table and fill it with pre-computed word """ Set up the word table and fill it with pre-computed word
frequencies. frequencies.

View File

@@ -14,19 +14,12 @@ import re
import subprocess import subprocess
import shutil import shutil
from ..typing import StrPath
from ..db.connection import get_pg_env from ..db.connection import get_pg_env
from ..errors import UsageError from ..errors import UsageError
from ..version import OSM2PGSQL_REQUIRED_VERSION from ..version import OSM2PGSQL_REQUIRED_VERSION
LOG = logging.getLogger() 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: def run_osm2pgsql(options: Mapping[str, Any]) -> None:
""" Run osm2pgsql with the given options. """ Run osm2pgsql with the given options.

View 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: class TestCliWithDb:
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)