import datetime as dt
import textwrap
import io
+import re
import sqlalchemy as sa
from sqlalchemy.ext.asyncio import AsyncConnection
except TypeError:
return sqlstr
+ # Fixes an odd issue with Python 3.7 where percentages are not
+ # quoted correctly.
+ sqlstr = re.sub(r'%(?!\()', '%%', sqlstr)
return sqlstr % params
"""
Custom types for SQLAlchemy.
"""
-from typing import Callable, Any
+from typing import Callable, Any, cast
+import sys
import sqlalchemy as sa
from sqlalchemy import types
#pylint: disable=all
-class Geometry(types.UserDefinedType[Any]):
+class Geometry(types.UserDefinedType): # type: ignore[type-arg]
""" Simplified type decorator for PostGIS geometry. This type
only supports geometries in 4326 projection.
"""
if isinstance(value, str):
return 'SRID=4326;' + value
- return 'SRID=4326;' + value.to_wkt()
+ return 'SRID=4326;' + cast(str, value.to_wkt())
return process
return sa.func.ST_GeomFromText(bindvalue, type_=self)
- class comparator_factory(types.UserDefinedType.Comparator):
+ class comparator_factory(types.UserDefinedType.Comparator): # type: ignore[type-arg]
def intersects(self, other: SaColumn) -> 'sa.Operators':
return self.op('&&')(other)