mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-14 18:37:58 +00:00
Merge pull request #3146 from lonvia/forbid-mixed-queries
Do not allow to mix structured and unstructured search
This commit is contained in:
@@ -453,17 +453,24 @@ async def search_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
|
||||
if params.get('featureType', None) is not None:
|
||||
details['layers'] = napi.DataLayer.ADDRESS
|
||||
|
||||
# unstructured query parameters
|
||||
query = params.get('q', None)
|
||||
# structured query parameters
|
||||
queryparts = {}
|
||||
for key in ('amenity', 'street', 'city', 'county', 'state', 'postalcode', 'country'):
|
||||
details[key] = params.get(key, None)
|
||||
if details[key]:
|
||||
queryparts[key] = details[key]
|
||||
|
||||
try:
|
||||
if query is not None:
|
||||
if queryparts:
|
||||
params.raise_error("Structured query parameters"
|
||||
"(amenity, street, city, county, state, postalcode, country)"
|
||||
" cannot be used together with 'q' parameter.")
|
||||
queryparts['q'] = query
|
||||
results = await _unstructured_search(query, api, details)
|
||||
else:
|
||||
for key in ('amenity', 'street', 'city', 'county', 'state', 'postalcode', 'country'):
|
||||
details[key] = params.get(key, None)
|
||||
if details[key]:
|
||||
queryparts[key] = details[key]
|
||||
query = ', '.join(queryparts.values())
|
||||
|
||||
results = await api.search_address(**details)
|
||||
|
||||
@@ -508,9 +508,8 @@ class TestSearchEndPointSearch:
|
||||
a.params['q'] = 'something'
|
||||
a.params['city'] = 'ignored'
|
||||
|
||||
res = await glue.search_endpoint(napi.NominatimAPIAsync(Path('/invalid')), a)
|
||||
|
||||
assert len(json.loads(res.output)) == 1
|
||||
with pytest.raises(FakeError, match='^400 -- .*cannot be used together'):
|
||||
res = await glue.search_endpoint(napi.NominatimAPIAsync(Path('/invalid')), a)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
Reference in New Issue
Block a user