rename lookup() API to details and add lookup call

The initial plan to serve /details and /lookup endpoints from
the same API call turned out to be impractical, so the API now
also has deparate functions for both.
This commit is contained in:
Sarah Hoffmann
2023-04-03 11:11:11 +02:00
parent 4607c7ed04
commit 6e81596609
6 changed files with 53 additions and 31 deletions

View File

@@ -7,7 +7,7 @@
"""
Implementation of classes for API access via libraries.
"""
from typing import Mapping, Optional, Any, AsyncIterator, Dict
from typing import Mapping, Optional, Any, AsyncIterator, Dict, Sequence
import asyncio
import contextlib
from pathlib import Path
@@ -20,10 +20,10 @@ from nominatim.db.sqlalchemy_schema import SearchTables
from nominatim.config import Configuration
from nominatim.api.connection import SearchConnection
from nominatim.api.status import get_status, StatusResult
from nominatim.api.lookup import get_detailed_place
from nominatim.api.lookup import get_detailed_place, get_simple_place
from nominatim.api.reverse import ReverseGeocoder
from nominatim.api.types import PlaceRef, LookupDetails, AnyPoint, DataLayer
from nominatim.api.results import DetailedResult, ReverseResult
from nominatim.api.results import DetailedResult, ReverseResult, SearchResults
class NominatimAPIAsync:
@@ -130,8 +130,8 @@ class NominatimAPIAsync:
return status
async def lookup(self, place: PlaceRef,
details: Optional[LookupDetails] = None) -> Optional[DetailedResult]:
async def details(self, place: PlaceRef,
details: Optional[LookupDetails] = None) -> Optional[DetailedResult]:
""" Get detailed information about a place in the database.
Returns None if there is no entry under the given ID.
@@ -140,6 +140,19 @@ class NominatimAPIAsync:
return await get_detailed_place(conn, place, details or LookupDetails())
async def lookup(self, places: Sequence[PlaceRef],
details: Optional[LookupDetails] = None) -> SearchResults:
""" Get simple information about a list of places.
Returns a list of place information for all IDs that were found.
"""
if details is None:
details = LookupDetails()
async with self.begin() as conn:
return SearchResults(filter(None,
[await get_simple_place(conn, p, details) for p in places]))
async def reverse(self, coord: AnyPoint, max_rank: Optional[int] = None,
layer: Optional[DataLayer] = None,
details: Optional[LookupDetails] = None) -> Optional[ReverseResult]:
@@ -195,11 +208,20 @@ class NominatimAPI:
return self._loop.run_until_complete(self._async_api.status())
def lookup(self, place: PlaceRef,
details: Optional[LookupDetails] = None) -> Optional[DetailedResult]:
def details(self, place: PlaceRef,
details: Optional[LookupDetails] = None) -> Optional[DetailedResult]:
""" Get detailed information about a place in the database.
"""
return self._loop.run_until_complete(self._async_api.lookup(place, details))
return self._loop.run_until_complete(self._async_api.details(place, details))
def lookup(self, places: Sequence[PlaceRef],
details: Optional[LookupDetails] = None) -> SearchResults:
""" Get simple information about a list of places.
Returns a list of place information for all IDs that were found.
"""
return self._loop.run_until_complete(self._async_api.lookup(places, details))
def reverse(self, coord: AnyPoint, max_rank: Optional[int] = None,

View File

@@ -268,7 +268,7 @@ async def details_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
locales = napi.Locales.from_accept_languages(params.get_accepted_languages())
result = await api.lookup(place, details)
result = await api.details(place, details)
if debug:
return params.build_response(loglib.get_and_disable())