X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/c4928c646df3b4ff1409358c2e34b9883d600d39..e129df379493789f749d7e92b6f1f29db192d01e:/nominatim/typing.py diff --git a/nominatim/typing.py b/nominatim/typing.py index 6d754989..7274f1d3 100644 --- a/nominatim/typing.py +++ b/nominatim/typing.py @@ -2,21 +2,23 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Type definitions for typing annotations. 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. -# pylint: disable=invalid-name +# Generics variable names do not confirm to naming styles, ignore globally here. +# 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 + import psycopg2.extras import os StrPath = Union[str, 'os.PathLike[str]'] @@ -26,4 +28,47 @@ SysEnv = Mapping[str, str] # 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') + +# 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 + + +# SQLAlchemy introduced generic types in version 2.0 making typing +# incompatible with older versions. Add wrappers here so we don't have +# to litter the code with bare-string types. + +if TYPE_CHECKING: + import sqlalchemy as sa + from typing_extensions import (TypeAlias as TypeAlias) +else: + TypeAlias = str + +SaLambdaSelect: TypeAlias = 'Union[sa.Select[Any], sa.StatementLambdaElement]' +SaSelect: TypeAlias = 'sa.Select[Any]' +SaScalarSelect: TypeAlias = 'sa.ScalarSelect[Any]' +SaRow: TypeAlias = 'sa.Row[Any]' +SaColumn: TypeAlias = 'sa.ColumnElement[Any]' +SaExpression: TypeAlias = 'sa.ColumnElement[bool]' +SaLabel: TypeAlias = 'sa.Label[Any]' +SaFromClause: TypeAlias = 'sa.FromClause' +SaSelectable: TypeAlias = 'sa.Selectable' +SaBind: TypeAlias = 'sa.BindParameter[Any]'