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], 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 """ Construct a new result and add the data from the result row
from the Tiger data interpolation table. 'class_type' defines from the Tiger data interpolation table. 'class_type' defines
the type of result to return. Returns None if the row is None. 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, res = class_type(source_table=SourceTable.TIGER,
place_id=row.place_id, 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'), category=('place', 'houses' if hnr is None else 'house'),
postcode=row.postcode, postcode=row.postcode,
country_code='us', country_code='us',

View File

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