From: Sarah Hoffmann Date: Wed, 24 May 2023 21:17:15 +0000 (+0200) Subject: mingle names from linked places into results X-Git-Tag: v4.3.0~74^2~10 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/b48cda717306c8b267b7857e724b161cefefdc74 mingle names from linked places into results --- diff --git a/nominatim/api/results.py b/nominatim/api/results.py index 1e77d0be..7c215afe 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. """ @@ -229,7 +247,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 +396,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, diff --git a/nominatim/cli.py b/nominatim/cli.py index 13658309..6a89a8de 100644 --- a/nominatim/cli.py +++ b/nominatim/cli.py @@ -251,7 +251,7 @@ class AdminServe: return 0 -def get_set_parser(**kwargs: Any) -> CommandlineParser: +def get_set_parser() -> CommandlineParser: """\ Initializes the parser and adds various subcommands for nominatim cli. @@ -287,6 +287,4 @@ def nominatim(**kwargs: Any) -> int: Command-line tools for importing, updating, administrating and querying the Nominatim database. """ - parser = get_set_parser(**kwargs) - - return parser.run(**kwargs) + return get_set_parser().run(**kwargs)