Update entrances schema

This commit is contained in:
Emily Love Watson
2025-08-14 14:37:24 -05:00
parent 048d571e46
commit 823ad5d279
15 changed files with 139 additions and 26 deletions

View File

@@ -196,6 +196,9 @@ def _format_details_json(result: DetailedResult, options: Mapping[str, Any]) ->
else:
_add_address_rows(out, 'hierarchy', result.parented_rows, locales)
if result.entrances is not None:
out.keyval('entrances', result.entrances)
out.end_object()
return out()

View File

@@ -107,6 +107,9 @@ def format_base_json(results: Union[ReverseResults, SearchResults],
_write_typed_address(out, result.address_rows, result.country_code)
out.end_object().next()
if options.get('entrances', False) and result.entrances:
out.keyval('entrances', result.entrances)
if options.get('extratags', False):
out.keyval('extratags', result.extratags)
@@ -180,6 +183,9 @@ def format_base_geojson(results: Union[ReverseResults, SearchResults],
_write_typed_address(out, result.address_rows, result.country_code)
out.end_object().next()
if options.get('entrances', False):
out.keyval('entrances', result.entrances)
if options.get('extratags', False):
out.keyval('extratags', result.extratags)
@@ -251,6 +257,9 @@ def format_base_geocodejson(results: Union[ReverseResults, SearchResults],
out.keyval(f"level{line.admin_level}", line.local_name)
out.end_object().next()
if options.get('entrances', False):
out.keyval('entrances', result.entrances)
if options.get('extratags', False):
out.keyval('extra', result.extratags)

View File

@@ -8,6 +8,7 @@
Helper functions for output of results in XML format.
"""
from typing import Mapping, Any, Optional, Union
import dataclasses
import datetime as dt
import xml.etree.ElementTree as ET
@@ -122,4 +123,10 @@ def format_base_xml(results: Union[ReverseResults, SearchResults],
for k, v in result.names.items():
ET.SubElement(eroot, 'name', attrib={'desc': k}).text = v
if options.get('entrances', False):
eroot = ET.SubElement(root if simple else place, 'entrances')
if result.entrances:
for entrance_detail in result.entrances:
ET.SubElement(eroot, 'entrance', attrib=dataclasses.asdict(entrance_detail))
return '<?xml version="1.0" encoding="UTF-8" ?>\n' + ET.tostring(root, encoding='unicode')

View File

@@ -72,6 +72,8 @@ def extend_query_parts(queryparts: Dict[str, Any], details: Dict[str, Any],
queryparts['polygon_text'] = '1'
if parsed.address_details:
queryparts['addressdetails'] = '1'
if parsed.entrances:
queryparts['entrances'] = '1'
if namedetails:
queryparts['namedetails'] = '1'
if extratags:

View File

@@ -158,6 +158,7 @@ async def details_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
result = await api.details(place,
address_details=params.get_bool('addressdetails', False),
entrances=params.get_bool('entrances', False),
linked_places=params.get_bool('linkedplaces', True),
parented_places=params.get_bool('hierarchy', False),
keywords=params.get_bool('keywords', False),
@@ -216,6 +217,7 @@ async def reverse_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
fmt_options = {'query': query,
'extratags': params.get_bool('extratags', False),
'namedetails': params.get_bool('namedetails', False),
'entrances': params.get_bool('entrances', False),
'addressdetails': params.get_bool('addressdetails', True)}
output = params.formatting().format_result(ReverseResults([result] if result else []),
@@ -252,6 +254,7 @@ async def lookup_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
fmt_options = {'extratags': params.get_bool('extratags', False),
'namedetails': params.get_bool('namedetails', False),
'entrances': params.get_bool('entrances', False),
'addressdetails': params.get_bool('addressdetails', True)}
output = params.formatting().format_result(results, fmt, fmt_options)
@@ -298,6 +301,7 @@ async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
details = parse_geometry_details(params, fmt)
details['countries'] = params.get('countrycodes', None)
details['entrances'] = params.get_bool('entrances', False)
details['excluded'] = params.get('exclude_place_ids', None)
details['viewbox'] = params.get('viewbox', None) or params.get('viewboxlbrt', None)
details['bounded_viewbox'] = params.get_bool('bounded', False)
@@ -363,6 +367,7 @@ async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
'viewbox': queryparts.get('viewbox'),
'extratags': params.get_bool('extratags', False),
'namedetails': params.get_bool('namedetails', False),
'entrances': params.get_bool('entrances', False),
'addressdetails': params.get_bool('addressdetails', False)}
output = params.formatting().format_result(results, fmt, fmt_options)