fix linting issues

This commit is contained in:
Sarah Hoffmann
2023-07-01 18:02:46 +02:00
parent 673c3c7a55
commit 49e0d83d5d
6 changed files with 31 additions and 28 deletions

View File

@@ -80,7 +80,8 @@ class BaseLogger:
""" """
def format_sql(self, conn: AsyncConnection, statement: 'sa.Executable', def format_sql(self, conn: AsyncConnection, statement: 'sa.Executable',
extra_params: Union[Mapping[str, Any], Sequence[Mapping[str, Any]], None]) -> str: extra_params: Union[Mapping[str, Any],
Sequence[Mapping[str, Any]], None]) -> str:
""" Return the comiled version of the statement. """ Return the comiled version of the statement.
""" """
compiled = cast('sa.ClauseElement', statement).compile(conn.sync_engine) compiled = cast('sa.ClauseElement', statement).compile(conn.sync_engine)
@@ -95,13 +96,14 @@ class BaseLogger:
sqlstr = str(compiled) sqlstr = str(compiled)
if '%s' in sqlstr: if sa.__version__.startswith('1'):
try: try:
return sqlstr % tuple((repr(compiled.params[name]) for name in compiled.positiontup)) return sqlstr % tuple((repr(params.get(name, None))
for name in compiled.positiontup)) # type: ignore
except TypeError: except TypeError:
return sqlstr return sqlstr
return str(compiled) % params return sqlstr % params
class HTMLLogger(BaseLogger): class HTMLLogger(BaseLogger):

View File

@@ -7,11 +7,11 @@
""" """
Implementation of reverse geocoding. Implementation of reverse geocoding.
""" """
from typing import Optional, List, Callable, Type, Tuple from typing import Optional, List, Callable, Type, Tuple, Dict, Any
import sqlalchemy as sa import sqlalchemy as sa
from nominatim.typing import SaColumn, SaSelect, SaFromClause, SaLabel, SaRow from nominatim.typing import SaColumn, SaSelect, SaFromClause, SaLabel, SaRow, SaBind
from nominatim.api.connection import SearchConnection from nominatim.api.connection import SearchConnection
import nominatim.api.results as nres import nominatim.api.results as nres
from nominatim.api.logging import log from nominatim.api.logging import log
@@ -24,8 +24,8 @@ from nominatim.db.sqlalchemy_types import Geometry
RowFunc = Callable[[Optional[SaRow], Type[nres.ReverseResult]], Optional[nres.ReverseResult]] RowFunc = Callable[[Optional[SaRow], Type[nres.ReverseResult]], Optional[nres.ReverseResult]]
WKT_PARAM = sa.bindparam('wkt', type_=Geometry) WKT_PARAM: SaBind = sa.bindparam('wkt', type_=Geometry)
MAX_RANK_PARAM = sa.bindparam('max_rank') MAX_RANK_PARAM: SaBind = sa.bindparam('max_rank')
def _select_from_placex(t: SaFromClause, use_wkt: bool = True) -> SaSelect: def _select_from_placex(t: SaFromClause, use_wkt: bool = True) -> SaSelect:
""" Create a select statement with the columns relevant for reverse """ Create a select statement with the columns relevant for reverse
@@ -93,7 +93,7 @@ class ReverseGeocoder:
self.conn = conn self.conn = conn
self.params = params self.params = params
self.bind_params = {'max_rank': params.max_rank} self.bind_params: Dict[str, Any] = {'max_rank': params.max_rank}
@property @property

View File

@@ -14,7 +14,7 @@ import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import ARRAY, array_agg from sqlalchemy.dialects.postgresql import ARRAY, array_agg
from nominatim.typing import SaFromClause, SaScalarSelect, SaColumn, \ from nominatim.typing import SaFromClause, SaScalarSelect, SaColumn, \
SaExpression, SaSelect, SaRow SaExpression, SaSelect, SaRow, SaBind
from nominatim.api.connection import SearchConnection from nominatim.api.connection import SearchConnection
from nominatim.api.types import SearchDetails, DataLayer, GeometryFormat, Bbox from nominatim.api.types import SearchDetails, DataLayer, GeometryFormat, Bbox
import nominatim.api.results as nres import nominatim.api.results as nres
@@ -39,15 +39,15 @@ def _details_to_bind_params(details: SearchDetails) -> Dict[str, Any]:
'countries': details.countries} 'countries': details.countries}
LIMIT_PARAM = sa.bindparam('limit') LIMIT_PARAM: SaBind = sa.bindparam('limit')
MIN_RANK_PARAM = sa.bindparam('min_rank') MIN_RANK_PARAM: SaBind = sa.bindparam('min_rank')
MAX_RANK_PARAM = sa.bindparam('max_rank') MAX_RANK_PARAM: SaBind = sa.bindparam('max_rank')
VIEWBOX_PARAM = sa.bindparam('viewbox', type_=Geometry) VIEWBOX_PARAM: SaBind = sa.bindparam('viewbox', type_=Geometry)
VIEWBOX2_PARAM = sa.bindparam('viewbox2', type_=Geometry) VIEWBOX2_PARAM: SaBind = sa.bindparam('viewbox2', type_=Geometry)
NEAR_PARAM = sa.bindparam('near', type_=Geometry) NEAR_PARAM: SaBind = sa.bindparam('near', type_=Geometry)
NEAR_RADIUS_PARAM = sa.bindparam('near_radius') NEAR_RADIUS_PARAM: SaBind = sa.bindparam('near_radius')
EXCLUDED_PARAM = sa.bindparam('excluded') EXCLUDED_PARAM: SaBind = sa.bindparam('excluded')
COUNTRIES_PARAM = sa.bindparam('countries') COUNTRIES_PARAM: SaBind = sa.bindparam('countries')
def _select_placex(t: SaFromClause) -> SaSelect: def _select_placex(t: SaFromClause) -> SaSelect:
return sa.select(t.c.place_id, t.c.osm_type, t.c.osm_id, t.c.name, return sa.select(t.c.place_id, t.c.osm_type, t.c.osm_id, t.c.name,

View File

@@ -16,8 +16,6 @@ import math
from struct import unpack from struct import unpack
from binascii import unhexlify from binascii import unhexlify
import sqlalchemy as sa
from nominatim.errors import UsageError from nominatim.errors import UsageError
# pylint: disable=no-member,too-many-boolean-expressions,too-many-instance-attributes # pylint: disable=no-member,too-many-boolean-expressions,too-many-instance-attributes
@@ -192,7 +190,8 @@ class Bbox:
""" Return the WKT representation of the Bbox. This """ Return the WKT representation of the Bbox. This
is a simple polygon with four points. is a simple polygon with four points.
""" """
return 'POLYGON(({0} {1},{0} {3},{2} {3},{2} {1},{0} {1}))'.format(*self.coords) return 'POLYGON(({0} {1},{0} {3},{2} {3},{2} {1},{0} {1}))'\
.format(*self.coords) # pylint: disable=consider-using-f-string
@staticmethod @staticmethod
@@ -445,6 +444,7 @@ class SearchDetails(LookupDetails):
""" Restrict search to places with one of the given class/type categories. """ Restrict search to places with one of the given class/type categories.
An empty list (the default) will disable this filter. An empty list (the default) will disable this filter.
""" """
viewbox_x2: Optional[Bbox] = None
def __post_init__(self) -> None: def __post_init__(self) -> None:
if self.viewbox is not None: if self.viewbox is not None:
@@ -452,8 +452,6 @@ class SearchDetails(LookupDetails):
yext = (self.viewbox.maxlat - self.viewbox.minlat)/2 yext = (self.viewbox.maxlat - self.viewbox.minlat)/2
self.viewbox_x2 = Bbox(self.viewbox.minlon - xext, self.viewbox.minlat - yext, self.viewbox_x2 = Bbox(self.viewbox.minlon - xext, self.viewbox.minlat - yext,
self.viewbox.maxlon + xext, self.viewbox.maxlat + yext) self.viewbox.maxlon + xext, self.viewbox.maxlat + yext)
else:
self.viewbox_x2 = None
def restrict_min_max_rank(self, new_min: int, new_max: int) -> None: def restrict_min_max_rank(self, new_min: int, new_max: int) -> None:

View File

@@ -10,9 +10,11 @@ Custom types for SQLAlchemy.
from typing import Callable, Any from typing import Callable, Any
import sqlalchemy as sa import sqlalchemy as sa
import sqlalchemy.types as types from sqlalchemy import types
from nominatim.typing import SaColumn from nominatim.typing import SaColumn, SaBind
#pylint: disable=all
class Geometry(types.UserDefinedType[Any]): class Geometry(types.UserDefinedType[Any]):
""" Simplified type decorator for PostGIS geometry. This type """ Simplified type decorator for PostGIS geometry. This type
@@ -44,13 +46,13 @@ class Geometry(types.UserDefinedType[Any]):
return process return process
def bind_expression(self, bindvalue: 'sa.BindParameter[Any]') -> SaColumn: def bind_expression(self, bindvalue: SaBind) -> SaColumn:
return sa.func.ST_GeomFromText(bindvalue, type_=self) return sa.func.ST_GeomFromText(bindvalue, type_=self)
class comparator_factory(types.UserDefinedType.Comparator): class comparator_factory(types.UserDefinedType.Comparator):
def intersects(self, other: SaColumn) -> SaColumn: def intersects(self, other: SaColumn) -> 'sa.Operators':
return self.op('&&')(other) return self.op('&&')(other)
def is_line_like(self) -> SaColumn: def is_line_like(self) -> SaColumn:

View File

@@ -70,3 +70,4 @@ SaExpression: TypeAlias = 'sa.ColumnElement[bool]'
SaLabel: TypeAlias = 'sa.Label[Any]' SaLabel: TypeAlias = 'sa.Label[Any]'
SaFromClause: TypeAlias = 'sa.FromClause' SaFromClause: TypeAlias = 'sa.FromClause'
SaSelectable: TypeAlias = 'sa.Selectable' SaSelectable: TypeAlias = 'sa.Selectable'
SaBind: TypeAlias = 'sa.BindParameter[Any]'