use NominatimAPI in with context in CLI tool

This commit is contained in:
Sarah Hoffmann
2024-08-19 11:42:22 +02:00
parent c2594aca40
commit b01a836d1e

View File

@@ -180,29 +180,29 @@ class APISearch:
raise UsageError(f"Unsupported format '{args.format}'. " raise UsageError(f"Unsupported format '{args.format}'. "
'Use --list-formats to see supported formats.') 'Use --list-formats to see supported formats.')
api = napi.NominatimAPI(args.project_dir) with napi.NominatimAPI(args.project_dir) as api:
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': _get_geometry_output(args), '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': _get_locales(args, api.config.DEFAULT_LANGUAGE) 'locales': _get_locales(args, api.config.DEFAULT_LANGUAGE)
} }
if args.query: if args.query:
results = api.search(args.query, **params) results = api.search(args.query, **params)
else: else:
results = api.search_address(amenity=args.amenity, results = api.search_address(amenity=args.amenity,
street=args.street, street=args.street,
city=args.city, city=args.city,
county=args.county, county=args.county,
state=args.state, state=args.state,
postalcode=args.postalcode, postalcode=args.postalcode,
country=args.country, country=args.country,
**params) **params)
if args.dedupe and len(results) > 1: if args.dedupe and len(results) > 1:
results = deduplicate_results(results, args.limit) results = deduplicate_results(results, args.limit)
@@ -260,14 +260,15 @@ class APIReverse:
if args.lat is None or args.lon is None: if args.lat is None or args.lon is None:
raise UsageError("lat' and 'lon' parameters are required.") raise UsageError("lat' and 'lon' parameters are required.")
api = napi.NominatimAPI(args.project_dir) with napi.NominatimAPI(args.project_dir) as api:
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=_get_layers(args, napi.DataLayer.ADDRESS | napi.DataLayer.POI), layers=_get_layers(args,
address_details=True, # needed for display name napi.DataLayer.ADDRESS | napi.DataLayer.POI),
geometry_output=_get_geometry_output(args), address_details=True, # needed for display name
geometry_simplification=args.polygon_threshold, geometry_output=_get_geometry_output(args),
locales=_get_locales(args, api.config.DEFAULT_LANGUAGE)) geometry_simplification=args.polygon_threshold,
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())
@@ -323,12 +324,12 @@ class APILookup:
places = [napi.OsmID(o[0], int(o[1:])) for o in args.ids] places = [napi.OsmID(o[0], int(o[1:])) for o in args.ids]
api = napi.NominatimAPI(args.project_dir) with napi.NominatimAPI(args.project_dir) as api:
results = api.lookup(places, results = api.lookup(places,
address_details=True, # needed for display name address_details=True, # needed for display name
geometry_output=_get_geometry_output(args), geometry_output=_get_geometry_output(args),
geometry_simplification=args.polygon_threshold or 0.0, geometry_simplification=args.polygon_threshold or 0.0,
locales=_get_locales(args, 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())
@@ -410,17 +411,17 @@ class APIDetails:
raise UsageError('One of the arguments --node/-n --way/-w ' raise UsageError('One of the arguments --node/-n --way/-w '
'--relation/-r --place_id/-p is required/') '--relation/-r --place_id/-p is required/')
api = napi.NominatimAPI(args.project_dir) with napi.NominatimAPI(args.project_dir) as api:
locales = _get_locales(args, 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,
parented_places=args.hierarchy, parented_places=args.hierarchy,
keywords=args.keywords, keywords=args.keywords,
geometry_output=napi.GeometryFormat.GEOJSON geometry_output=napi.GeometryFormat.GEOJSON
if args.polygon_geojson if args.polygon_geojson
else napi.GeometryFormat.NONE, else napi.GeometryFormat.NONE,
locales=locales) locales=locales)
if args.format == 'debug': if args.format == 'debug':
print(loglib.get_and_disable()) print(loglib.get_and_disable())
@@ -465,7 +466,8 @@ class APIStatus:
raise UsageError(f"Unsupported format '{args.format}'. " raise UsageError(f"Unsupported format '{args.format}'. "
'Use --list-formats to see supported formats.') 'Use --list-formats to see supported formats.')
status = napi.NominatimAPI(args.project_dir).status() with napi.NominatimAPI(args.project_dir) as api:
status = api.status()
if args.format == 'debug': if args.format == 'debug':
print(loglib.get_and_disable()) print(loglib.get_and_disable())