]> git.openstreetmap.org Git - nominatim.git/commitdiff
make types compatible with older Python versions
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 2 Jul 2023 21:05:15 +0000 (23:05 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 2 Jul 2023 21:06:42 +0000 (23:06 +0200)
nominatim/api/logging.py
nominatim/db/sqlalchemy_types.py

index 3160ede8f53b01027ee17ffd8ef01d497f38fc9e..3785579073a71df7544518b407c5f34b173664ca 100644 (file)
@@ -12,6 +12,7 @@ from contextvars import ContextVar
 import datetime as dt
 import textwrap
 import io
+import re
 
 import sqlalchemy as sa
 from sqlalchemy.ext.asyncio import AsyncConnection
@@ -103,6 +104,9 @@ class BaseLogger:
             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
 
 
index f5ec82bdbc4ef24b46d357c5ea060195b6302e68..ed4aef1f15ec088d9336efc6072e24837d96ab3a 100644 (file)
@@ -7,7 +7,8 @@
 """
 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
@@ -16,7 +17,7 @@ from nominatim.typing import SaColumn, SaBind
 
 #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.
     """
@@ -35,7 +36,7 @@ class Geometry(types.UserDefinedType[Any]):
             if isinstance(value, str):
                 return 'SRID=4326;' + value
 
-            return 'SRID=4326;' + value.to_wkt()
+            return 'SRID=4326;' + cast(str, value.to_wkt())
         return process
 
 
@@ -50,7 +51,7 @@ class Geometry(types.UserDefinedType[Any]):
         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)