mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-11 05:14:07 +00:00
remove now unused run_api_script function
This commit is contained in:
@@ -7,14 +7,12 @@
|
|||||||
"""
|
"""
|
||||||
Subcommand definitions for API calls from the command line.
|
Subcommand definitions for API calls from the command line.
|
||||||
"""
|
"""
|
||||||
from typing import Mapping, Dict, Any
|
from typing import Dict, Any
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from nominatim.tools.exec_utils import run_api_script
|
|
||||||
from nominatim.errors import UsageError
|
|
||||||
from nominatim.clicmd.args import NominatimArgs
|
from nominatim.clicmd.args import NominatimArgs
|
||||||
import nominatim.api as napi
|
import nominatim.api as napi
|
||||||
import nominatim.api.v1 as api_output
|
import nominatim.api.v1 as api_output
|
||||||
@@ -62,18 +60,6 @@ def _add_api_output_arguments(parser: argparse.ArgumentParser) -> None:
|
|||||||
"Parameter is difference tolerance in degrees."))
|
"Parameter is difference tolerance in degrees."))
|
||||||
|
|
||||||
|
|
||||||
def _run_api(endpoint: str, args: NominatimArgs, params: Mapping[str, object]) -> int:
|
|
||||||
script_file = args.project_dir / 'website' / (endpoint + '.php')
|
|
||||||
|
|
||||||
if not script_file.exists():
|
|
||||||
LOG.error("Cannot find API script file.\n\n"
|
|
||||||
"Make sure to run 'nominatim' from the project directory \n"
|
|
||||||
"or use the option --project-dir.")
|
|
||||||
raise UsageError("API script not found.")
|
|
||||||
|
|
||||||
return run_api_script(endpoint, args.project_dir,
|
|
||||||
phpcgi_bin=args.phpcgi_path, params=params)
|
|
||||||
|
|
||||||
class APISearch:
|
class APISearch:
|
||||||
"""\
|
"""\
|
||||||
Execute a search query.
|
Execute a search query.
|
||||||
|
|||||||
@@ -7,13 +7,11 @@
|
|||||||
"""
|
"""
|
||||||
Helper functions for executing external programs.
|
Helper functions for executing external programs.
|
||||||
"""
|
"""
|
||||||
from typing import Any, Optional, Mapping, IO
|
from typing import Any, Mapping, IO
|
||||||
from pathlib import Path
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import urllib.request as urlrequest
|
import urllib.request as urlrequest
|
||||||
from urllib.parse import urlencode
|
|
||||||
|
|
||||||
from nominatim.typing import StrPath
|
from nominatim.typing import StrPath
|
||||||
from nominatim.version import NOMINATIM_VERSION
|
from nominatim.version import NOMINATIM_VERSION
|
||||||
@@ -21,64 +19,6 @@ from nominatim.db.connection import get_pg_env
|
|||||||
|
|
||||||
LOG = logging.getLogger()
|
LOG = logging.getLogger()
|
||||||
|
|
||||||
def run_api_script(endpoint: str, project_dir: Path,
|
|
||||||
extra_env: Optional[Mapping[str, str]] = None,
|
|
||||||
phpcgi_bin: Optional[Path] = None,
|
|
||||||
params: Optional[Mapping[str, Any]] = None) -> int:
|
|
||||||
""" Execute a Nominatim API function.
|
|
||||||
|
|
||||||
The function needs a project directory that contains the website
|
|
||||||
directory with the scripts to be executed. The scripts will be run
|
|
||||||
using php_cgi. Query parameters can be added as named arguments.
|
|
||||||
|
|
||||||
Returns the exit code of the script.
|
|
||||||
"""
|
|
||||||
log = logging.getLogger()
|
|
||||||
webdir = str(project_dir / 'website')
|
|
||||||
query_string = urlencode(params or {})
|
|
||||||
|
|
||||||
env = dict(QUERY_STRING=query_string,
|
|
||||||
SCRIPT_NAME=f'/{endpoint}.php',
|
|
||||||
REQUEST_URI=f'/{endpoint}.php?{query_string}',
|
|
||||||
CONTEXT_DOCUMENT_ROOT=webdir,
|
|
||||||
SCRIPT_FILENAME=f'{webdir}/{endpoint}.php',
|
|
||||||
HTTP_HOST='localhost',
|
|
||||||
HTTP_USER_AGENT='nominatim-tool',
|
|
||||||
REMOTE_ADDR='0.0.0.0',
|
|
||||||
DOCUMENT_ROOT=webdir,
|
|
||||||
REQUEST_METHOD='GET',
|
|
||||||
SERVER_PROTOCOL='HTTP/1.1',
|
|
||||||
GATEWAY_INTERFACE='CGI/1.1',
|
|
||||||
REDIRECT_STATUS='CGI')
|
|
||||||
|
|
||||||
if extra_env:
|
|
||||||
env.update(extra_env)
|
|
||||||
|
|
||||||
if phpcgi_bin is None:
|
|
||||||
cmd = ['/usr/bin/env', 'php-cgi']
|
|
||||||
else:
|
|
||||||
cmd = [str(phpcgi_bin)]
|
|
||||||
|
|
||||||
proc = subprocess.run(cmd, cwd=str(project_dir), env=env,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.PIPE,
|
|
||||||
check=False)
|
|
||||||
|
|
||||||
if proc.returncode != 0 or proc.stderr:
|
|
||||||
if proc.stderr:
|
|
||||||
log.error(proc.stderr.decode('utf-8').replace('\\n', '\n'))
|
|
||||||
else:
|
|
||||||
log.error(proc.stdout.decode('utf-8').replace('\\n', '\n'))
|
|
||||||
return proc.returncode or 1
|
|
||||||
|
|
||||||
result = proc.stdout.decode('utf-8')
|
|
||||||
content_start = result.find('\r\n\r\n')
|
|
||||||
|
|
||||||
print(result[content_start + 4:].replace('\\n', '\n'))
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
def run_php_server(server_address: str, base_dir: StrPath) -> None:
|
def run_php_server(server_address: str, base_dir: StrPath) -> None:
|
||||||
""" Run the built-in server from the given directory.
|
""" Run the built-in server from the given directory.
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -17,49 +17,6 @@ import nominatim.tools.exec_utils as exec_utils
|
|||||||
import nominatim.paths
|
import nominatim.paths
|
||||||
|
|
||||||
|
|
||||||
class TestRunApiScript:
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
@pytest.fixture(autouse=True)
|
|
||||||
def setup_project_dir(tmp_path):
|
|
||||||
webdir = tmp_path / 'website'
|
|
||||||
webdir.mkdir()
|
|
||||||
(webdir / 'test.php').write_text("<?php\necho 'OK\n';")
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def test_run_api(tmp_path):
|
|
||||||
assert exec_utils.run_api_script('test', tmp_path) == 0
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def test_run_api_execution_error(tmp_path):
|
|
||||||
assert exec_utils.run_api_script('badname', tmp_path) != 0
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def test_run_api_with_extra_env(tmp_path):
|
|
||||||
extra_env = dict(SCRIPT_FILENAME=str(tmp_path / 'website' / 'test.php'))
|
|
||||||
assert exec_utils.run_api_script('badname', tmp_path, extra_env=extra_env) == 0
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def test_custom_phpcgi(tmp_path, capfd):
|
|
||||||
assert exec_utils.run_api_script('test', tmp_path, phpcgi_bin='env',
|
|
||||||
params={'q' : 'Berlin'}) == 0
|
|
||||||
captured = capfd.readouterr()
|
|
||||||
|
|
||||||
assert '?q=Berlin' in captured.out
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def test_fail_on_error_output(tmp_path):
|
|
||||||
# Starting PHP 8 the PHP CLI no longer has STDERR defined as constant
|
|
||||||
php = """
|
|
||||||
<?php
|
|
||||||
if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'wb'));
|
|
||||||
fwrite(STDERR, 'WARNING'.PHP_EOL);
|
|
||||||
"""
|
|
||||||
(tmp_path / 'website' / 'bad.php').write_text(php)
|
|
||||||
|
|
||||||
assert exec_utils.run_api_script('bad', tmp_path) == 1
|
|
||||||
|
|
||||||
### run_osm2pgsql
|
### run_osm2pgsql
|
||||||
|
|
||||||
def test_run_osm2pgsql(osm2pgsql_options):
|
def test_run_osm2pgsql(osm2pgsql_options):
|
||||||
|
|||||||
Reference in New Issue
Block a user