]> 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 datetime as dt
 import textwrap
 import io
+import re
 
 import sqlalchemy as sa
 from sqlalchemy.ext.asyncio import AsyncConnection
 
 import sqlalchemy as sa
 from sqlalchemy.ext.asyncio import AsyncConnection
@@ -103,6 +104,9 @@ class BaseLogger:
             except TypeError:
                 return sqlstr
 
             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
 
 
         return sqlstr % params
 
 
index f5ec82bdbc4ef24b46d357c5ea060195b6302e68..ed4aef1f15ec088d9336efc6072e24837d96ab3a 100644 (file)
@@ -7,7 +7,8 @@
 """
 Custom types for SQLAlchemy.
 """
 """
 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
 
 import sqlalchemy as sa
 from sqlalchemy import types
@@ -16,7 +17,7 @@ from nominatim.typing import SaColumn, SaBind
 
 #pylint: disable=all
 
 
 #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.
     """
     """ 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
 
             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 process
 
 
@@ -50,7 +51,7 @@ class Geometry(types.UserDefinedType[Any]):
         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): # type: ignore[type-arg]
 
         def intersects(self, other: SaColumn) -> 'sa.Operators':
             return self.op('&&')(other)
 
         def intersects(self, other: SaColumn) -> 'sa.Operators':
             return self.op('&&')(other)