X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/87c91ec5c42089797da1525bd270269b2cd9d3ad..4cc788f69e1191d2dd985aeac143597566529f24:/test/python/api/test_api_details.py diff --git a/test/python/api/test_api_details.py b/test/python/api/test_api_details.py index 05a7aa7f..4f6dd92b 100644 --- a/test/python/api/test_api_details.py +++ b/test/python/api/test_api_details.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2023 by the Nominatim developer community. +# Copyright (C) 2025 by the Nominatim developer community. # For a full list of authors see the git log. """ Tests for details API call. @@ -11,27 +11,29 @@ import datetime as dt import pytest -import nominatim.api as napi +import nominatim_api as napi + @pytest.mark.parametrize('idobj', (napi.PlaceID(332), napi.OsmID('W', 4), napi.OsmID('W', 4, 'highway'))) -def test_lookup_in_placex(apiobj, idobj): +def test_lookup_in_placex(apiobj, frontend, idobj): import_date = dt.datetime(2022, 12, 7, 14, 14, 46, 0) apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', - name={'name': 'Road'}, address={'city': 'Barrow'}, - extratags={'surface': 'paved'}, - parent_place_id=34, linked_place_id=55, - admin_level=15, country_code='gb', - housenumber='4', - postcode='34425', wikipedia='en:Faa', - rank_search=27, rank_address=26, - importance=0.01, - centroid=(23, 34), - indexed_date=import_date, - geometry='LINESTRING(23 34, 23.1 34, 23.1 34.1, 23 34)') - - result = apiobj.api.details(idobj) + class_='highway', type='residential', + name={'name': 'Road'}, address={'city': 'Barrow'}, + extratags={'surface': 'paved'}, + parent_place_id=34, linked_place_id=55, + admin_level=15, country_code='gb', + housenumber='4', + postcode='34425', wikipedia='en:Faa', + rank_search=27, rank_address=26, + importance=0.01, + centroid=(23, 34), + indexed_date=import_date, + geometry='LINESTRING(23 34, 23.1 34, 23.1 34.1, 23 34)') + + api = frontend(apiobj, options={'details'}) + result = api.details(idobj) assert result is not None @@ -69,17 +71,18 @@ def test_lookup_in_placex(apiobj, idobj): assert result.geometry == {'type': 'ST_LineString'} -def test_lookup_in_placex_minimal_info(apiobj): +def test_lookup_in_placex_minimal_info(apiobj, frontend): import_date = dt.datetime(2022, 12, 7, 14, 14, 46, 0) apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', - admin_level=15, - rank_search=27, rank_address=26, - centroid=(23, 34), - indexed_date=import_date, - geometry='LINESTRING(23 34, 23.1 34, 23.1 34.1, 23 34)') + class_='highway', type='residential', + admin_level=15, + rank_search=27, rank_address=26, + centroid=(23, 34), + indexed_date=import_date, + geometry='LINESTRING(23 34, 23.1 34, 23.1 34.1, 23 34)') - result = apiobj.api.details(napi.PlaceID(332)) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332)) assert result is not None @@ -117,20 +120,21 @@ def test_lookup_in_placex_minimal_info(apiobj): assert result.geometry == {'type': 'ST_LineString'} -def test_lookup_in_placex_with_geometry(apiobj): +def test_lookup_in_placex_with_geometry(apiobj, frontend): apiobj.add_placex(place_id=332, geometry='LINESTRING(23 34, 23.1 34)') - result = apiobj.api.details(napi.PlaceID(332), geometry_output=napi.GeometryFormat.GEOJSON) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332), geometry_output=napi.GeometryFormat.GEOJSON) assert result.geometry == {'geojson': '{"type":"LineString","coordinates":[[23,34],[23.1,34]]}'} -def test_lookup_placex_with_address_details(apiobj): +def test_lookup_placex_with_address_details(apiobj, frontend): apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='pl', - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', + rank_search=27, rank_address=26) apiobj.add_address_placex(332, fromarea=False, isaddress=False, distance=0.0034, place_id=1000, osm_type='N', osm_id=3333, @@ -143,7 +147,8 @@ def test_lookup_placex_with_address_details(apiobj): country_code='pl', rank_search=17, rank_address=16) - result = apiobj.api.details(napi.PlaceID(332), address_details=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332), address_details=True) assert result.address_rows == [ napi.AddressLine(place_id=332, osm_object=('W', 4), @@ -172,32 +177,34 @@ def test_lookup_placex_with_address_details(apiobj): ] -def test_lookup_place_with_linked_places_none_existing(apiobj): +def test_lookup_place_with_linked_places_none_existing(apiobj, frontend): apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='pl', linked_place_id=45, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', linked_place_id=45, + rank_search=27, rank_address=26) - result = apiobj.api.details(napi.PlaceID(332), linked_places=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332), linked_places=True) assert result.linked_rows == [] -def test_lookup_place_with_linked_places_existing(apiobj): +def test_lookup_place_with_linked_places_existing(apiobj, frontend): apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='pl', linked_place_id=45, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', linked_place_id=45, + rank_search=27, rank_address=26) apiobj.add_placex(place_id=1001, osm_type='W', osm_id=5, - class_='highway', type='residential', name='Street', - country_code='pl', linked_place_id=332, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', linked_place_id=332, + rank_search=27, rank_address=26) apiobj.add_placex(place_id=1002, osm_type='W', osm_id=6, - class_='highway', type='residential', name='Street', - country_code='pl', linked_place_id=332, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', linked_place_id=332, + rank_search=27, rank_address=26) - result = apiobj.api.details(napi.PlaceID(332), linked_places=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332), linked_places=True) assert result.linked_rows == [ napi.AddressLine(place_id=1001, osm_object=('W', 5), @@ -213,32 +220,34 @@ def test_lookup_place_with_linked_places_existing(apiobj): ] -def test_lookup_place_with_parented_places_not_existing(apiobj): +def test_lookup_place_with_parented_places_not_existing(apiobj, frontend): apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='pl', parent_place_id=45, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', parent_place_id=45, + rank_search=27, rank_address=26) - result = apiobj.api.details(napi.PlaceID(332), parented_places=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332), parented_places=True) assert result.parented_rows == [] -def test_lookup_place_with_parented_places_existing(apiobj): +def test_lookup_place_with_parented_places_existing(apiobj, frontend): apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='pl', parent_place_id=45, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', parent_place_id=45, + rank_search=27, rank_address=26) apiobj.add_placex(place_id=1001, osm_type='N', osm_id=5, - class_='place', type='house', housenumber='23', - country_code='pl', parent_place_id=332, - rank_search=30, rank_address=30) + class_='place', type='house', housenumber='23', + country_code='pl', parent_place_id=332, + rank_search=30, rank_address=30) apiobj.add_placex(place_id=1002, osm_type='W', osm_id=6, - class_='highway', type='residential', name='Street', - country_code='pl', parent_place_id=332, - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', parent_place_id=332, + rank_search=27, rank_address=26) - result = apiobj.api.details(napi.PlaceID(332), parented_places=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(332), parented_places=True) assert result.parented_rows == [ napi.AddressLine(place_id=1001, osm_object=('N', 5), @@ -250,7 +259,7 @@ def test_lookup_place_with_parented_places_existing(apiobj): @pytest.mark.parametrize('idobj', (napi.PlaceID(4924), napi.OsmID('W', 9928))) -def test_lookup_in_osmline(apiobj, idobj): +def test_lookup_in_osmline(apiobj, frontend, idobj): import_date = dt.datetime(2022, 12, 7, 14, 14, 46, 0) apiobj.add_osmline(place_id=4924, osm_id=9928, parent_place_id=12, @@ -260,7 +269,8 @@ def test_lookup_in_osmline(apiobj, idobj): indexed_date=import_date, geometry='LINESTRING(23 34, 23 35)') - result = apiobj.api.details(idobj) + api = frontend(apiobj, options={'details'}) + result = api.details(idobj) assert result is not None @@ -298,7 +308,7 @@ def test_lookup_in_osmline(apiobj, idobj): assert result.geometry == {'type': 'ST_LineString'} -def test_lookup_in_osmline_split_interpolation(apiobj): +def test_lookup_in_osmline_split_interpolation(apiobj, frontend): apiobj.add_osmline(place_id=1000, osm_id=9, startnumber=2, endnumber=4, step=1) apiobj.add_osmline(place_id=1001, osm_id=9, @@ -306,25 +316,26 @@ def test_lookup_in_osmline_split_interpolation(apiobj): apiobj.add_osmline(place_id=1002, osm_id=9, startnumber=11, endnumber=20, step=1) + api = frontend(apiobj, options={'details'}) for i in range(1, 6): - result = apiobj.api.details(napi.OsmID('W', 9, str(i))) + result = api.details(napi.OsmID('W', 9, str(i))) assert result.place_id == 1000 for i in range(7, 11): - result = apiobj.api.details(napi.OsmID('W', 9, str(i))) + result = api.details(napi.OsmID('W', 9, str(i))) assert result.place_id == 1001 for i in range(12, 22): - result = apiobj.api.details(napi.OsmID('W', 9, str(i))) + result = api.details(napi.OsmID('W', 9, str(i))) assert result.place_id == 1002 -def test_lookup_osmline_with_address_details(apiobj): +def test_lookup_osmline_with_address_details(apiobj, frontend): apiobj.add_osmline(place_id=9000, osm_id=9, startnumber=2, endnumber=4, step=1, parent_place_id=332) apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='pl', - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='pl', + rank_search=27, rank_address=26) apiobj.add_address_placex(332, fromarea=False, isaddress=False, distance=0.0034, place_id=1000, osm_type='N', osm_id=3333, @@ -337,15 +348,10 @@ def test_lookup_osmline_with_address_details(apiobj): country_code='pl', rank_search=17, rank_address=16) - result = apiobj.api.details(napi.PlaceID(9000), address_details=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(9000), address_details=True) assert result.address_rows == [ - napi.AddressLine(place_id=None, osm_object=None, - category=('place', 'house_number'), - names={'ref': '2'}, extratags={}, - admin_level=None, fromarea=True, isaddress=True, - rank_address=28, distance=0.0, - local_name='2'), napi.AddressLine(place_id=332, osm_object=('W', 4), category=('highway', 'residential'), names={'name': 'Street'}, extratags={}, @@ -372,7 +378,7 @@ def test_lookup_osmline_with_address_details(apiobj): ] -def test_lookup_in_tiger(apiobj): +def test_lookup_in_tiger(apiobj, frontend): apiobj.add_tiger(place_id=4924, parent_place_id=12, startnumber=1, endnumber=4, step=1, @@ -383,7 +389,8 @@ def test_lookup_in_tiger(apiobj): osm_type='W', osm_id=6601223, geometry='LINESTRING(23 34, 23 35)') - result = apiobj.api.details(napi.PlaceID(4924)) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(4924)) assert result is not None @@ -421,14 +428,14 @@ def test_lookup_in_tiger(apiobj): assert result.geometry == {'type': 'ST_LineString'} -def test_lookup_tiger_with_address_details(apiobj): +def test_lookup_tiger_with_address_details(apiobj, frontend): apiobj.add_tiger(place_id=9000, startnumber=2, endnumber=4, step=1, parent_place_id=332) apiobj.add_placex(place_id=332, osm_type='W', osm_id=4, - class_='highway', type='residential', name='Street', - country_code='us', - rank_search=27, rank_address=26) + class_='highway', type='residential', name='Street', + country_code='us', + rank_search=27, rank_address=26) apiobj.add_address_placex(332, fromarea=False, isaddress=False, distance=0.0034, place_id=1000, osm_type='N', osm_id=3333, @@ -441,15 +448,10 @@ def test_lookup_tiger_with_address_details(apiobj): country_code='us', rank_search=17, rank_address=16) - result = apiobj.api.details(napi.PlaceID(9000), address_details=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(9000), address_details=True) assert result.address_rows == [ - napi.AddressLine(place_id=None, osm_object=None, - category=('place', 'house_number'), - names={'ref': '2'}, extratags={}, - admin_level=None, fromarea=True, isaddress=True, - rank_address=28, distance=0.0, - local_name='2'), napi.AddressLine(place_id=332, osm_object=('W', 4), category=('highway', 'residential'), names={'name': 'Street'}, extratags={}, @@ -476,7 +478,7 @@ def test_lookup_tiger_with_address_details(apiobj): ] -def test_lookup_in_postcode(apiobj): +def test_lookup_in_postcode(apiobj, frontend): import_date = dt.datetime(2022, 12, 7, 14, 14, 46, 0) apiobj.add_postcode(place_id=554, parent_place_id=152, @@ -486,7 +488,8 @@ def test_lookup_in_postcode(apiobj): indexed_date=import_date, geometry='POINT(-9.45 5.6)') - result = apiobj.api.details(napi.PlaceID(554)) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(554)) assert result is not None @@ -524,7 +527,7 @@ def test_lookup_in_postcode(apiobj): assert result.geometry == {'type': 'ST_Point'} -def test_lookup_postcode_with_address_details(apiobj): +def test_lookup_postcode_with_address_details(apiobj, frontend): apiobj.add_postcode(place_id=9000, parent_place_id=332, postcode='34 425', @@ -540,9 +543,16 @@ def test_lookup_postcode_with_address_details(apiobj): country_code='gb', rank_search=17, rank_address=16) - result = apiobj.api.details(napi.PlaceID(9000), address_details=True) + api = frontend(apiobj, options={'details'}) + result = api.details(napi.PlaceID(9000), address_details=True) assert result.address_rows == [ + napi.AddressLine(place_id=9000, osm_object=None, + category=('place', 'postcode'), + names={'ref': '34 425'}, extratags={}, + admin_level=15, fromarea=True, isaddress=True, + rank_address=25, distance=0.0, + local_name='34 425'), napi.AddressLine(place_id=332, osm_object=('N', 3333), category=('place', 'suburb'), names={'name': 'Smallplace'}, extratags={}, @@ -555,12 +565,6 @@ def test_lookup_postcode_with_address_details(apiobj): admin_level=15, fromarea=True, isaddress=True, rank_address=16, distance=0.0, local_name='Bigplace'), - napi.AddressLine(place_id=None, osm_object=None, - category=('place', 'postcode'), - names={'ref': '34 425'}, extratags={}, - admin_level=None, fromarea=False, isaddress=True, - rank_address=5, distance=0.0, - local_name='34 425'), napi.AddressLine(place_id=None, osm_object=None, category=('place', 'country_code'), names={'ref': 'gb'}, extratags={}, @@ -568,21 +572,24 @@ def test_lookup_postcode_with_address_details(apiobj): rank_address=4, distance=0.0) ] + @pytest.mark.parametrize('objid', [napi.PlaceID(1736), napi.OsmID('W', 55), napi.OsmID('N', 55, 'amenity')]) -def test_lookup_missing_object(apiobj, objid): +def test_lookup_missing_object(apiobj, frontend, objid): apiobj.add_placex(place_id=1, osm_type='N', osm_id=55, class_='place', type='suburb') - assert apiobj.api.details(objid) is None + api = frontend(apiobj, options={'details'}) + assert api.details(objid) is None @pytest.mark.parametrize('gtype', (napi.GeometryFormat.KML, - napi.GeometryFormat.SVG, - napi.GeometryFormat.TEXT)) -def test_lookup_unsupported_geometry(apiobj, gtype): + napi.GeometryFormat.SVG, + napi.GeometryFormat.TEXT)) +def test_lookup_unsupported_geometry(apiobj, frontend, gtype): apiobj.add_placex(place_id=332) + api = frontend(apiobj, options={'details'}) with pytest.raises(ValueError): - apiobj.api.details(napi.PlaceID(332), geometry_output=gtype) + api.details(napi.PlaceID(332), geometry_output=gtype)