"""
Subcommand definitions for API calls from the command line.
"""
-from typing import Mapping, Dict, Any
+from typing import Dict, Any
import argparse
import logging
import json
import sys
-from nominatim.tools.exec_utils import run_api_script
-from nominatim.errors import UsageError
from nominatim.clicmd.args import NominatimArgs
import nominatim.api as napi
import nominatim.api.v1 as api_output
from nominatim.api.v1.helpers import zoom_to_rank, deduplicate_results
+from nominatim.api.v1.format import dispatch as formatting
import nominatim.api.logging as loglib
# Do not repeat documentation of subcommand classes.
def _add_api_output_arguments(parser: argparse.ArgumentParser) -> None:
group = parser.add_argument_group('Output arguments')
group.add_argument('--format', default='jsonv2',
- choices=['xml', 'json', 'jsonv2', 'geojson', 'geocodejson', 'debug'],
+ choices=formatting.list_formats(napi.SearchResults) + ['debug'],
help='Format of result')
for name, desc in EXTRADATA_PARAMS:
group.add_argument('--' + name, action='store_true', help=desc)
"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:
"""\
Execute a search query.
'countries': args.countrycodes,
'excluded': args.exclude_place_ids,
'viewbox': args.viewbox,
- 'bounded_viewbox': args.bounded
+ 'bounded_viewbox': args.bounded,
+ 'locales': args.get_locales(api.config.DEFAULT_LANGUAGE)
}
if args.query:
country=args.country,
**params)
- for result in results:
- result.localize(args.get_locales(api.config.DEFAULT_LANGUAGE))
-
if args.dedupe and len(results) > 1:
results = deduplicate_results(results, args.limit)
layers=args.get_layers(napi.DataLayer.ADDRESS | napi.DataLayer.POI),
address_details=True, # needed for display name
geometry_output=args.get_geometry_output(),
- geometry_simplification=args.polygon_threshold)
+ geometry_simplification=args.polygon_threshold,
+ locales=args.get_locales(api.config.DEFAULT_LANGUAGE))
if args.format == 'debug':
print(loglib.get_and_disable())
return 0
if result:
- result.localize(args.get_locales(api.config.DEFAULT_LANGUAGE))
output = api_output.format_result(
napi.ReverseResults([result]),
args.format,
results = api.lookup(places,
address_details=True, # needed for display name
geometry_output=args.get_geometry_output(),
- geometry_simplification=args.polygon_threshold or 0.0)
-
- for result in results:
- result.localize(args.get_locales(api.config.DEFAULT_LANGUAGE))
+ geometry_simplification=args.polygon_threshold or 0.0,
+ locales=args.get_locales(api.config.DEFAULT_LANGUAGE))
output = api_output.format_result(
results,
api = napi.NominatimAPI(args.project_dir)
+ locales = args.get_locales(api.config.DEFAULT_LANGUAGE)
result = api.details(place,
address_details=args.addressdetails,
linked_places=args.linkedplaces,
keywords=args.keywords,
geometry_output=napi.GeometryFormat.GEOJSON
if args.polygon_geojson
- else napi.GeometryFormat.NONE)
+ else napi.GeometryFormat.NONE,
+ locales=locales)
if result:
- locales = args.get_locales(api.config.DEFAULT_LANGUAGE)
- result.localize(locales)
-
output = api_output.format_result(
result,
'json',