X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/f335e78d1eb54737202aa7a1bafaece19b6659a6..7d911f9ffbdf63b2b2a45c3a3ee7063d006a5779:/nominatim/api/results.py?ds=sidebyside diff --git a/nominatim/api/results.py b/nominatim/api/results.py index 1e77d0be..c661b508 100644 --- a/nominatim/api/results.py +++ b/nominatim/api/results.py @@ -27,6 +27,24 @@ from nominatim.api.localization import Locales # This file defines complex result data classes. # pylint: disable=too-many-instance-attributes +def _mingle_name_tags(names: Optional[Dict[str, str]]) -> Optional[Dict[str, str]]: + """ Mix-in names from linked places, so that they show up + as standard names where necessary. + """ + if not names: + return None + + out = {} + for k, v in names.items(): + if k.startswith('_place_'): + outkey = k[7:] + out[k if outkey in names else outkey] = v + else: + out[k] = v + + return out + + class SourceTable(enum.Enum): """ Enumeration of kinds of results. """ @@ -210,6 +228,12 @@ class SearchResults(List[SearchResult]): May be empty when no result was found. """ + def localize(self, locales: Locales) -> None: + """ Apply the given locales to all results. + """ + for result in self: + result.localize(locales) + def _filter_geometries(row: SaRow) -> Dict[str, str]: return {k[9:]: v for k, v in row._mapping.items() # pylint: disable=W0212 @@ -229,7 +253,7 @@ def create_from_placex_row(row: Optional[SaRow], place_id=row.place_id, osm_object=(row.osm_type, row.osm_id), category=(row.class_, row.type), - names=row.name, + names=_mingle_name_tags(row.name), address=row.address, extratags=row.extratags, housenumber=row.housenumber, @@ -378,10 +402,8 @@ def _result_row_to_address_row(row: SaRow) -> AddressLine: if hasattr(row, 'place_type') and row.place_type: extratags['place'] = row.place_type - names = row.name + names = _mingle_name_tags(row.name) or {} if getattr(row, 'housenumber', None) is not None: - if names is None: - names = {} names['housenumber'] = row.housenumber return AddressLine(place_id=row.place_id,