Type hints and docstrings.

This commit is contained in:
Edward Betts 2023-05-15 15:30:06 +00:00
parent 3bc6863b49
commit 8e41dcab58

View file

@ -5,6 +5,7 @@ import re
import typing import typing
import flask import flask
import geoalchemy2
from sqlalchemy import and_, func, or_, text from sqlalchemy import and_, func, or_, text
from sqlalchemy.dialects import postgresql from sqlalchemy.dialects import postgresql
from sqlalchemy.orm import selectinload from sqlalchemy.orm import selectinload
@ -87,19 +88,25 @@ def is_street_number_first(lat: float, lon: float) -> bool:
return bool(alpha2_number_first & alpha2) return bool(alpha2_number_first & alpha2)
def make_envelope(bounds): def make_envelope(bounds: list[float]) -> geoalchemy2.functions.ST_MakeEnvelope:
"""Make en envelope for the given bounds."""
return func.ST_MakeEnvelope(*bounds, srid) return func.ST_MakeEnvelope(*bounds, srid)
def get_bbox_centroid(bbox): def get_bbox_centroid(bbox: list[float]) -> tuple[str, str]:
"""Get centroid of bounding box."""
bbox = make_envelope(bbox) bbox = make_envelope(bbox)
centroid = database.session.query(func.ST_AsText(func.ST_Centroid(bbox))).scalar() centroid = database.session.query(func.ST_AsText(func.ST_Centroid(bbox))).scalar()
m = re_point.match(centroid) m = re_point.match(centroid)
assert m assert m
return reversed(m.groups()) lon, lat = m.groups()
assert lon and lat
return (lat, lon)
def make_envelope_around_point(lat: float, lon: float, distance: float): def make_envelope_around_point(
lat: float, lon: float, distance: float
) -> geoalchemy2.functions.ST_MakeEnvelope:
conn = database.session.connection() conn = database.session.connection()
p = func.ST_MakePoint(lon, lat) p = func.ST_MakePoint(lon, lat)
@ -191,6 +198,7 @@ def get_and_save_item(qid: str) -> model.Item | None:
print(f'{entity["pageid"]=} {entity["ns"]=} {entity["type"]=}') print(f'{entity["pageid"]=} {entity["ns"]=} {entity["type"]=}')
print(entity.keys()) print(entity.keys())
raise raise
assert item
item.locations = model.location_objects(coords) item.locations = model.location_objects(coords)
database.session.add(item) database.session.add(item)
database.session.commit() database.session.commit()
@ -214,7 +222,7 @@ def get_isa_count(items: list[model.Item]) -> list[tuple[str, int]]:
return isa_count.most_common() return isa_count.most_common()
def get_items_in_bbox(bbox): def get_items_in_bbox(bbox: list[float]):
db_bbox = make_envelope(bbox) db_bbox = make_envelope(bbox)
q = ( q = (
@ -1072,10 +1080,10 @@ class PlaceItems(typing.TypedDict):
"""Place items.""" """Place items."""
count: int count: int
items: list[model.Item] items: list[dict[str, typing.Any]]
def get_place_items(osm_type: int, osm_id: int) -> PlaceItems: def get_place_items(osm_type: str, osm_id: int) -> PlaceItems:
"""Return place items for given osm_type and osm_id.""" """Return place items for given osm_type and osm_id."""
src_id = osm_id * {"way": 1, "relation": -1}[osm_type] src_id = osm_id * {"way": 1, "relation": -1}[osm_type]