(:ticket:`#422`).
- Fix `Cursor.rownumber` to return `!None` when the result has no row to fetch
(:ticket:`#437`).
+- Avoid error in pyright caused by aliasing TypeAlias (:ticket:`#439`).
- Fix `Copy.set_types()` used with `varchar` and `name` types (:ticket:`#452`).
``psycopg_pool`` release notes
==============================
+Future releases
+---------------
+
+psycopg_pool 3.1.5 (unreleased)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- Avoid error in pyright caused by aliasing TypeAlias (:ticket:`#439`).
+
+
Current release
---------------
import asyncio
from typing import Any, Awaitable, Generator, Optional, Sequence, Union, TypeVar
+# NOTE: TypeAlias cannot be exported by this module, as pyright special-cases it.
+# For this raisin it must be imported directly from typing_extension where used.
+# See https://github.com/microsoft/pyright/issues/4197
+from typing_extensions import TypeAlias
+
if sys.version_info >= (3, 8):
from typing import Protocol
else:
from typing_extensions import Protocol
T = TypeVar("T")
-FutureT: "TypeAlias" = Union["asyncio.Future[T]", Generator[Any, None, T], Awaitable[T]]
+FutureT: TypeAlias = Union["asyncio.Future[T]", Generator[Any, None, T], Awaitable[T]]
if sys.version_info >= (3, 8):
create_task = asyncio.create_task
cache = lru_cache(maxsize=None)
if sys.version_info >= (3, 10):
- from typing import TypeAlias, TypeGuard
+ from typing import TypeGuard
else:
- from typing_extensions import TypeAlias, TypeGuard
+ from typing_extensions import TypeGuard
if sys.version_info >= (3, 11):
from typing import LiteralString
"Deque",
"LiteralString",
"Protocol",
- "TypeAlias",
"TypeGuard",
"ZoneInfo",
"cache",
import logging
from types import TracebackType
from typing import Any, List, Optional, Union, Tuple, Type, TypeVar, TYPE_CHECKING
+from typing_extensions import TypeAlias
from . import pq
from . import errors as e
from .abc import PipelineCommand, PQGen
-from ._compat import Deque, TypeAlias
+from ._compat import Deque
from ._encodings import pgconn_encoding
from ._preparing import Key, Prepare
from .generators import pipeline_communicate, fetch_many, send
from enum import IntEnum, auto
from typing import Iterator, Optional, Sequence, Tuple, TYPE_CHECKING
from collections import OrderedDict
+from typing_extensions import TypeAlias
from . import pq
-from ._compat import Deque, TypeAlias
+from ._compat import Deque
from ._queries import PostgresQuery
if TYPE_CHECKING:
import struct
from typing import Callable, cast, Optional, Tuple
+from typing_extensions import TypeAlias
from .abc import Buffer
from . import errors as e
-from ._compat import Protocol, TypeAlias
+from ._compat import Protocol
PackInt: TypeAlias = Callable[[int], bytes]
UnpackInt: TypeAlias = Callable[[Buffer], Tuple[int]]
from typing import Any, Dict, List, Optional, Sequence, Tuple
from typing import DefaultDict, TYPE_CHECKING
from collections import defaultdict
+from typing_extensions import TypeAlias
from . import pq
from . import postgres
from . import errors as e
from .abc import Buffer, LoadFunc, AdaptContext, PyFormat, DumperKey, NoneType
from .rows import Row, RowMaker
-from ._compat import TypeAlias
from .postgres import INVALID_OID, TEXT_OID
from ._encodings import pgconn_encoding
from enum import Enum
from typing import Any, Dict, Iterator, Optional, overload
from typing import Sequence, Tuple, Type, TypeVar, Union, TYPE_CHECKING
+from typing_extensions import TypeAlias
from . import errors as e
from .abc import AdaptContext
from .rows import dict_row
-from ._compat import TypeAlias
if TYPE_CHECKING:
from .connection import Connection
from typing import Any, Callable, Generator, Mapping
from typing import List, Optional, Sequence, Tuple, TypeVar, Union
from typing import TYPE_CHECKING
+from typing_extensions import TypeAlias
from . import pq
from ._enums import PyFormat as PyFormat
-from ._compat import Protocol, TypeAlias, LiteralString
+from ._compat import Protocol, LiteralString
if TYPE_CHECKING:
from . import sql
from warnings import warn
from functools import partial
from contextlib import contextmanager
+from typing_extensions import TypeAlias
from . import pq
from . import errors as e
from .adapt import AdaptersMap
from ._enums import IsolationLevel
from .cursor import Cursor
-from ._compat import TypeAlias, LiteralString
+from ._compat import LiteralString
from .conninfo import make_conninfo, conninfo_to_dict, ConnectionInfo
from ._pipeline import BasePipeline, Pipeline
from .generators import notifies, connect, execute
# Copyright (C) 2020 The Psycopg Team
from typing import Any, Dict, Optional, Sequence, Tuple, Type, Union
+from typing_extensions import TypeAlias
from .pq.abc import PGconn, PGresult
from .pq._enums import DiagnosticField
-from ._compat import TypeAlias, TypeGuard
+from ._compat import TypeGuard
ErrorInfo: TypeAlias = Union[None, PGresult, Dict[int, Optional[bytes]]]
from typing import Any, Callable, List, Optional, Sequence, Tuple
from typing import Union, TYPE_CHECKING
+from typing_extensions import TypeAlias
from ._enums import Format, Trace
-from .._compat import Protocol, TypeAlias
+from .._compat import Protocol
if TYPE_CHECKING:
from .misc import PGnotify, ConninfoOption, PGresAttDesc
from typing import Any, Callable, Dict, NamedTuple, NoReturn, Sequence, Tuple
from typing import TYPE_CHECKING, Type, TypeVar
from collections import namedtuple
+from typing_extensions import TypeAlias
from . import errors as e
-from ._compat import Protocol, TypeAlias
+from ._compat import Protocol
from ._encodings import _as_python_identifier
if TYPE_CHECKING:
from enum import Enum
from typing import Any, Dict, Generic, Optional, Mapping, Sequence
from typing import Tuple, Type, TypeVar, Union, cast
+from typing_extensions import TypeAlias
from .. import postgres
from .. import errors as e
from ..pq import Format
from ..abc import AdaptContext
from ..adapt import Buffer, Dumper, Loader
-from .._compat import TypeAlias
from .._encodings import conn_encoding
from .._typeinfo import EnumInfo as EnumInfo # exported here
import re
from typing import Dict, List, Optional
+from typing_extensions import TypeAlias
from .. import errors as e
from .. import postgres
from ..abc import Buffer, AdaptContext
from ..adapt import PyFormat, RecursiveDumper, RecursiveLoader
-from .._compat import TypeAlias
from ..postgres import TEXT_OID
from .._typeinfo import TypeInfo
# Copyright (C) 2020 The Psycopg Team
from typing import Callable, Optional, Type, Union, TYPE_CHECKING
+from typing_extensions import TypeAlias
from .. import postgres
from ..pq import Format
from ..abc import AdaptContext
from ..adapt import Buffer, Dumper, Loader
-from .._compat import TypeAlias
if TYPE_CHECKING:
import ipaddress
zip_safe = False
install_requires =
backports.zoneinfo >= 0.2.0; python_version < "3.9"
- typing-extensions >= 4.1; python_version < "3.11"
+ typing-extensions >= 4.1
tzdata; sys_platform == "win32"
[options.package_data]
import sys
import asyncio
from typing import Any, Awaitable, Generator, Optional, Union, Type, TypeVar
+from typing_extensions import TypeAlias
import psycopg.errors as e
T = TypeVar("T")
-FutureT: "TypeAlias" = Union["asyncio.Future[T]", Generator[Any, None, T], Awaitable[T]]
+FutureT: TypeAlias = Union["asyncio.Future[T]", Generator[Any, None, T], Awaitable[T]]
if sys.version_info >= (3, 8):
create_task = asyncio.create_task
else:
from typing import Counter, Deque
-if sys.version_info >= (3, 10):
- from typing import TypeAlias
-else:
- from typing_extensions import TypeAlias
-
__all__ = [
"Counter",
"Deque",
"Task",
- "TypeAlias",
"create_task",
]
packages = find:
zip_safe = False
install_requires =
- typing-extensions >= 3.10; python_version < "3.10"
+ typing-extensions >= 3.10
[options.package_data]
psycopg_pool = py.typed
import subprocess as sp
from typing import List
from pathlib import Path
+from typing_extensions import TypeAlias
import psycopg
from psycopg.rows import TupleRow
from psycopg.crdb import CrdbConnection
-from psycopg._compat import TypeAlias
Connection: TypeAlias = psycopg.Connection[TupleRow]