]> git.openstreetmap.org Git - nominatim.git/blobdiff - nominatim/typing.py
remove typing_extensions requirement
[nominatim.git] / nominatim / typing.py
index 6d7549899bda1ae674c4ee42a0a717ea10eb0445..308f3e6a2cbb515245e81aa47a739ce562b1c04e 100644 (file)
@@ -9,14 +9,16 @@ Type definitions for typing annotations.
 
 Complex type definitions are moved here, to keep the source files readable.
 """
 
 Complex type definitions are moved here, to keep the source files readable.
 """
-from typing import Union, Mapping, TypeVar, TYPE_CHECKING
+from typing import Any, Union, Mapping, TypeVar, Sequence, TYPE_CHECKING
 
 # Generics varaible names do not confirm to naming styles, ignore globally here.
 
 # Generics varaible names do not confirm to naming styles, ignore globally here.
-# pylint: disable=invalid-name
+# pylint: disable=invalid-name,abstract-method,multiple-statements
+# pylint: disable=missing-class-docstring,useless-import-alias
 
 if TYPE_CHECKING:
     import psycopg2.sql
     import psycopg2.extensions
 
 if TYPE_CHECKING:
     import psycopg2.sql
     import psycopg2.extensions
+    import psycopg2.extras
     import os
 
 StrPath = Union[str, 'os.PathLike[str]']
     import os
 
 StrPath = Union[str, 'os.PathLike[str]']
@@ -26,4 +28,25 @@ SysEnv = Mapping[str, str]
 # psycopg2-related types
 
 Query = Union[str, bytes, 'psycopg2.sql.Composable']
 # psycopg2-related types
 
 Query = Union[str, bytes, 'psycopg2.sql.Composable']
+
+T_ResultKey = TypeVar('T_ResultKey', int, str)
+
+class DictCursorResult(Mapping[str, Any]):
+    def __getitem__(self, x: Union[int, str]) -> Any: ...
+
+DictCursorResults = Sequence[DictCursorResult]
+
 T_cursor = TypeVar('T_cursor', bound='psycopg2.extensions.cursor')
 T_cursor = TypeVar('T_cursor', bound='psycopg2.extensions.cursor')
+
+# The following typing features require typing_extensions to work
+# on all supported Python versions.
+# Only require this for type checking but not for normal operations.
+
+if TYPE_CHECKING:
+    from typing_extensions import (Protocol as Protocol,
+                                   Final as Final,
+                                   TypedDict as TypedDict)
+else:
+    Protocol = object
+    Final = 'Final'
+    TypedDict = dict