mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-08 02:54:08 +00:00
move API dependent functions out of args structure
This commit is contained in:
@@ -61,6 +61,48 @@ def _add_api_output_arguments(parser: argparse.ArgumentParser) -> None:
|
|||||||
"Parameter is difference tolerance in degrees."))
|
"Parameter is difference tolerance in degrees."))
|
||||||
|
|
||||||
|
|
||||||
|
def _get_geometry_output(args) -> napi.GeometryFormat:
|
||||||
|
""" Get the requested geometry output format in a API-compatible
|
||||||
|
format.
|
||||||
|
"""
|
||||||
|
if not args.polygon_output:
|
||||||
|
return napi.GeometryFormat.NONE
|
||||||
|
if args.polygon_output == 'geojson':
|
||||||
|
return napi.GeometryFormat.GEOJSON
|
||||||
|
if args.polygon_output == 'kml':
|
||||||
|
return napi.GeometryFormat.KML
|
||||||
|
if args.polygon_output == 'svg':
|
||||||
|
return napi.GeometryFormat.SVG
|
||||||
|
if args.polygon_output == 'text':
|
||||||
|
return napi.GeometryFormat.TEXT
|
||||||
|
|
||||||
|
try:
|
||||||
|
return napi.GeometryFormat[args.polygon_output.upper()]
|
||||||
|
except KeyError as exp:
|
||||||
|
raise UsageError(f"Unknown polygon output format '{args.polygon_output}'.") from exp
|
||||||
|
|
||||||
|
|
||||||
|
def _get_locales(args, default: Optional[str]) -> napi.Locales:
|
||||||
|
""" Get the locales from the language parameter.
|
||||||
|
"""
|
||||||
|
if args.lang:
|
||||||
|
return napi.Locales.from_accept_languages(args.lang)
|
||||||
|
if default:
|
||||||
|
return napi.Locales.from_accept_languages(default)
|
||||||
|
|
||||||
|
return napi.Locales()
|
||||||
|
|
||||||
|
|
||||||
|
def _get_layers(args, default: napi.DataLayer) -> Optional[napi.DataLayer]:
|
||||||
|
""" Get the list of selected layers as a DataLayer enum.
|
||||||
|
"""
|
||||||
|
if not args.layers:
|
||||||
|
return default
|
||||||
|
|
||||||
|
return reduce(napi.DataLayer.__or__,
|
||||||
|
(napi.DataLayer[s.upper()] for s in args.layers))
|
||||||
|
|
||||||
|
|
||||||
class APISearch:
|
class APISearch:
|
||||||
"""\
|
"""\
|
||||||
Execute a search query.
|
Execute a search query.
|
||||||
@@ -105,13 +147,13 @@ class APISearch:
|
|||||||
|
|
||||||
params: Dict[str, Any] = {'max_results': args.limit + min(args.limit, 10),
|
params: Dict[str, Any] = {'max_results': args.limit + min(args.limit, 10),
|
||||||
'address_details': True, # needed for display name
|
'address_details': True, # needed for display name
|
||||||
'geometry_output': args.get_geometry_output(),
|
'geometry_output': _get_geometry_output(args),
|
||||||
'geometry_simplification': args.polygon_threshold,
|
'geometry_simplification': args.polygon_threshold,
|
||||||
'countries': args.countrycodes,
|
'countries': args.countrycodes,
|
||||||
'excluded': args.exclude_place_ids,
|
'excluded': args.exclude_place_ids,
|
||||||
'viewbox': args.viewbox,
|
'viewbox': args.viewbox,
|
||||||
'bounded_viewbox': args.bounded,
|
'bounded_viewbox': args.bounded,
|
||||||
'locales': args.get_locales(api.config.DEFAULT_LANGUAGE)
|
'locales': _get_locales(args, api.config.DEFAULT_LANGUAGE)
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.query:
|
if args.query:
|
||||||
@@ -183,11 +225,11 @@ class APIReverse:
|
|||||||
|
|
||||||
result = api.reverse(napi.Point(args.lon, args.lat),
|
result = api.reverse(napi.Point(args.lon, args.lat),
|
||||||
max_rank=zoom_to_rank(args.zoom or 18),
|
max_rank=zoom_to_rank(args.zoom or 18),
|
||||||
layers=args.get_layers(napi.DataLayer.ADDRESS | napi.DataLayer.POI),
|
layers=_get_layers(args, napi.DataLayer.ADDRESS | napi.DataLayer.POI),
|
||||||
address_details=True, # needed for display name
|
address_details=True, # needed for display name
|
||||||
geometry_output=args.get_geometry_output(),
|
geometry_output=_get_geometry_output(args),
|
||||||
geometry_simplification=args.polygon_threshold,
|
geometry_simplification=args.polygon_threshold,
|
||||||
locales=args.get_locales(api.config.DEFAULT_LANGUAGE))
|
locales=_get_locales(args, api.config.DEFAULT_LANGUAGE))
|
||||||
|
|
||||||
if args.format == 'debug':
|
if args.format == 'debug':
|
||||||
print(loglib.get_and_disable())
|
print(loglib.get_and_disable())
|
||||||
@@ -247,9 +289,9 @@ class APILookup:
|
|||||||
|
|
||||||
results = api.lookup(places,
|
results = api.lookup(places,
|
||||||
address_details=True, # needed for display name
|
address_details=True, # needed for display name
|
||||||
geometry_output=args.get_geometry_output(),
|
geometry_output=_get_geometry_output(args),
|
||||||
geometry_simplification=args.polygon_threshold or 0.0,
|
geometry_simplification=args.polygon_threshold or 0.0,
|
||||||
locales=args.get_locales(api.config.DEFAULT_LANGUAGE))
|
locales=_get_locales(args, api.config.DEFAULT_LANGUAGE))
|
||||||
|
|
||||||
output = api_output.format_result(
|
output = api_output.format_result(
|
||||||
results,
|
results,
|
||||||
@@ -323,7 +365,7 @@ class APIDetails:
|
|||||||
|
|
||||||
api = napi.NominatimAPI(args.project_dir)
|
api = napi.NominatimAPI(args.project_dir)
|
||||||
|
|
||||||
locales = args.get_locales(api.config.DEFAULT_LANGUAGE)
|
locales = _get_locales(args, api.config.DEFAULT_LANGUAGE)
|
||||||
result = api.details(place,
|
result = api.details(place,
|
||||||
address_details=args.addressdetails,
|
address_details=args.addressdetails,
|
||||||
linked_places=args.linkedplaces,
|
linked_places=args.linkedplaces,
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from pathlib import Path
|
|||||||
from nominatim_core.errors import UsageError
|
from nominatim_core.errors import UsageError
|
||||||
from nominatim_core.config import Configuration
|
from nominatim_core.config import Configuration
|
||||||
from nominatim_core.typing import Protocol
|
from nominatim_core.typing import Protocol
|
||||||
import nominatim_api as napi
|
|
||||||
|
|
||||||
LOG = logging.getLogger()
|
LOG = logging.getLogger()
|
||||||
|
|
||||||
@@ -216,45 +215,3 @@ class NominatimArgs:
|
|||||||
raise UsageError('Cannot access file.')
|
raise UsageError('Cannot access file.')
|
||||||
|
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
|
||||||
def get_geometry_output(self) -> napi.GeometryFormat:
|
|
||||||
""" Get the requested geometry output format in a API-compatible
|
|
||||||
format.
|
|
||||||
"""
|
|
||||||
if not self.polygon_output:
|
|
||||||
return napi.GeometryFormat.NONE
|
|
||||||
if self.polygon_output == 'geojson':
|
|
||||||
return napi.GeometryFormat.GEOJSON
|
|
||||||
if self.polygon_output == 'kml':
|
|
||||||
return napi.GeometryFormat.KML
|
|
||||||
if self.polygon_output == 'svg':
|
|
||||||
return napi.GeometryFormat.SVG
|
|
||||||
if self.polygon_output == 'text':
|
|
||||||
return napi.GeometryFormat.TEXT
|
|
||||||
|
|
||||||
try:
|
|
||||||
return napi.GeometryFormat[self.polygon_output.upper()]
|
|
||||||
except KeyError as exp:
|
|
||||||
raise UsageError(f"Unknown polygon output format '{self.polygon_output}'.") from exp
|
|
||||||
|
|
||||||
|
|
||||||
def get_locales(self, default: Optional[str]) -> napi.Locales:
|
|
||||||
""" Get the locales from the language parameter.
|
|
||||||
"""
|
|
||||||
if self.lang:
|
|
||||||
return napi.Locales.from_accept_languages(self.lang)
|
|
||||||
if default:
|
|
||||||
return napi.Locales.from_accept_languages(default)
|
|
||||||
|
|
||||||
return napi.Locales()
|
|
||||||
|
|
||||||
|
|
||||||
def get_layers(self, default: napi.DataLayer) -> Optional[napi.DataLayer]:
|
|
||||||
""" Get the list of selected layers as a DataLayer enum.
|
|
||||||
"""
|
|
||||||
if not self.layers:
|
|
||||||
return default
|
|
||||||
|
|
||||||
return reduce(napi.DataLayer.__or__,
|
|
||||||
(napi.DataLayer[s.upper()] for s in self.layers))
|
|
||||||
|
|||||||
Reference in New Issue
Block a user