add tests for details result formatting and trim results

Values that are None are no longer included in the output to save
a bit of bandwidth.
This commit is contained in:
Sarah Hoffmann
2023-02-04 14:17:47 +01:00
parent b742200442
commit 42c3754dcd
5 changed files with 206 additions and 23 deletions

View File

@@ -20,6 +20,7 @@ from .status import (StatusResult as StatusResult)
from .types import (PlaceID as PlaceID,
OsmID as OsmID,
PlaceRef as PlaceRef,
Point as Point,
GeometryFormat as GeometryFormat,
LookupDetails as LookupDetails)
from .results import (SourceTable as SourceTable,

View File

@@ -105,6 +105,9 @@ class SearchResult:
geometry: Dict[str, str] = dataclasses.field(default_factory=dict)
def __post_init__(self) -> None:
if self.indexed_date is not None and self.indexed_date.tzinfo is None:
self.indexed_date = self.indexed_date.replace(tzinfo=dt.timezone.utc)
@property
def lat(self) -> float:

View File

@@ -45,7 +45,7 @@ def _add_address_row(writer: JsonWriter, row: napi.AddressLine,
locales: napi.Locales) -> None:
writer.start_object()\
.keyval('localname', locales.display_name(row.names))\
.keyval('place_id', row.place_id)
.keyval_not_none('place_id', row.place_id)
if row.osm_object is not None:
writer.keyval('osm_id', row.osm_object[1])\
@@ -100,8 +100,8 @@ def _format_search_json(result: napi.SearchResult, options: Mapping[str, Any]) -
out = JsonWriter()
out.start_object()\
.keyval('place_id', result.place_id)\
.keyval('parent_place_id', result.parent_place_id)
.keyval_not_none('place_id', result.place_id)\
.keyval_not_none('parent_place_id', result.parent_place_id)
if result.osm_object is not None:
out.keyval('osm_type', result.osm_object[0])\
@@ -111,16 +111,16 @@ def _format_search_json(result: napi.SearchResult, options: Mapping[str, Any]) -
.keyval('type', result.category[1])\
.keyval('admin_level', result.admin_level)\
.keyval('localname', locales.display_name(result.names))\
.keyval('names', result.names or [])\
.keyval('addresstags', result.address or [])\
.keyval('housenumber', result.housenumber)\
.keyval('calculated_postcode', result.postcode)\
.keyval('country_code', result.country_code)\
.keyval_not_none('names', result.names or None)\
.keyval_not_none('addresstags', result.address or None)\
.keyval_not_none('housenumber', result.housenumber)\
.keyval_not_none('calculated_postcode', result.postcode)\
.keyval_not_none('country_code', result.country_code)\
.keyval_not_none('indexed_date', result.indexed_date, lambda v: v.isoformat())\
.keyval('importance', result.importance)\
.keyval_not_none('importance', result.importance)\
.keyval('calculated_importance', result.calculated_importance())\
.keyval('extratags', result.extratags or [])\
.keyval('calculated_wikipedia', result.wikipedia)\
.keyval_not_none('extratags', result.extratags or None)\
.keyval_not_none('calculated_wikipedia', result.wikipedia)\
.keyval('rank_address', result.rank_address)\
.keyval('rank_search', result.rank_search)\
.keyval('isarea', 'Polygon' in (geom or result.geometry.get('type') or ''))\