avoid forwarding variables via SQL

This commit is contained in:
Sarah Hoffmann
2023-07-12 14:04:30 +02:00
parent f264eaeda2
commit d42e2e391f
2 changed files with 12 additions and 12 deletions

View File

@@ -302,7 +302,9 @@ def create_from_osmline_row(row: Optional[SaRow],
def create_from_tiger_row(row: Optional[SaRow],
class_type: Type[BaseResultT]) -> Optional[BaseResultT]:
class_type: Type[BaseResultT],
osm_type: Optional[str] = None,
osm_id: Optional[int] = None) -> Optional[BaseResultT]:
""" Construct a new result and add the data from the result row
from the Tiger data interpolation table. 'class_type' defines
the type of result to return. Returns None if the row is None.
@@ -317,7 +319,7 @@ def create_from_tiger_row(row: Optional[SaRow],
res = class_type(source_table=SourceTable.TIGER,
place_id=row.place_id,
osm_object=(row.osm_type, row.osm_id),
osm_object=(osm_type or row.osm_type, osm_id or row.osm_id),
category=('place', 'houses' if hnr is None else 'house'),
postcode=row.postcode,
country_code='us',

View File

@@ -7,7 +7,8 @@
"""
Implementation of reverse geocoding.
"""
from typing import Optional, List, Callable, Type, Tuple, Dict, Any
from typing import Optional, List, Callable, Type, Tuple, Dict, Any, cast
import functools
import sqlalchemy as sa
@@ -270,9 +271,7 @@ class ReverseGeocoder:
return (await self.conn.execute(sql, self.bind_params)).one_or_none()
async def _find_tiger_number_for_street(self, parent_place_id: int,
parent_type: str,
parent_id: int) -> Optional[SaRow]:
async def _find_tiger_number_for_street(self, parent_place_id: int) -> Optional[SaRow]:
t = self.conn.t.tiger
def _base_query() -> SaSelect:
@@ -287,8 +286,6 @@ class ReverseGeocoder:
return sa.select(inner.c.place_id,
inner.c.parent_place_id,
sa.sql.expression.label('osm_type', parent_type),
sa.sql.expression.label('osm_id', parent_id),
_interpolated_housenumber(inner),
_interpolated_position(inner),
inner.c.postcode,
@@ -332,14 +329,15 @@ class ReverseGeocoder:
distance = addr_row.distance
elif row.country_code == 'us' and parent_place_id is not None:
log().comment('Find TIGER housenumber for street')
addr_row = await self._find_tiger_number_for_street(parent_place_id,
row.osm_type,
row.osm_id)
addr_row = await self._find_tiger_number_for_street(parent_place_id)
log().var_dump('Result (street Tiger housenumber)', addr_row)
if addr_row is not None:
row_func = cast(RowFunc,
functools.partial(nres.create_from_tiger_row,
osm_type=row.osm_type,
osm_id=row.osm_id))
row = addr_row
row_func = nres.create_from_tiger_row
else:
distance = row.distance