]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor: drop use of typing.Dict
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 30 May 2024 01:14:03 +0000 (03:14 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 4 Jun 2024 14:52:16 +0000 (16:52 +0200)
33 files changed:
docs/lib/pg3_docs.py
psycopg/psycopg/_adapters_map.py
psycopg/psycopg/_capabilities.py
psycopg/psycopg/_copy_base.py
psycopg/psycopg/_dns.py
psycopg/psycopg/_encodings.py
psycopg/psycopg/_py_transformer.py
psycopg/psycopg/_queries.py
psycopg/psycopg/_tz.py
psycopg/psycopg/abc.py
psycopg/psycopg/errors.py
psycopg/psycopg/rows.py
psycopg/psycopg/types/composite.py
psycopg/psycopg/types/enum.py
psycopg/psycopg/types/hstore.py
psycopg/psycopg/types/json.py
psycopg/psycopg/types/numeric.py
psycopg/psycopg/types/range.py
psycopg_c/psycopg_c/_psycopg/transform.pyx
psycopg_pool/psycopg_pool/base.py
psycopg_pool/psycopg_pool/null_pool.py
psycopg_pool/psycopg_pool/null_pool_async.py
psycopg_pool/psycopg_pool/pool.py
psycopg_pool/psycopg_pool/pool_async.py
tests/conftest.py
tests/dbapi20.py
tests/pool/test_pool.py
tests/pool/test_pool_async.py
tests/pool/test_pool_null.py
tests/pool/test_pool_null_async.py
tests/scripts/bench-411.py
tests/test_psycopg_dbapi20.py
tests/typing_example.py

index 05a68762c43bb0b19217a6875a2588cb9b58638d..674f2d7c00de222f6fab68885beb32523170021f 100644 (file)
@@ -4,11 +4,12 @@ Customisation for docs generation.
 
 # Copyright (C) 2020 The Psycopg Team
 
+from __future__ import annotations
+
 import os
 import re
 import logging
 import importlib
-from typing import Dict
 from collections import deque
 
 
@@ -48,7 +49,7 @@ def setup(app):
 
 
 # Classes which may have __module__ overwritten
-recovered_classes: Dict[type, str] = {}
+recovered_classes: dict[type, str] = {}
 
 
 def recover_defined_module(m, skip_modules=()):
index 70a5586b00790857286881cf25ff5df8ff31e491..e4e72242fce01ed69f8443632e80eaae364d12f9 100644 (file)
@@ -6,7 +6,7 @@ Mapping from types/oids to Dumpers/Loaders
 
 from __future__ import annotations
 
-from typing import Any, Dict, Type, cast, TYPE_CHECKING
+from typing import Any, Type, cast, TYPE_CHECKING
 
 from . import pq
 from . import errors as e
@@ -61,12 +61,12 @@ class AdaptersMap:
 
     types: TypesRegistry
 
-    _dumpers: Dict[PyFormat, Dict[type | str, Type[Dumper]]]
-    _dumpers_by_oid: list[Dict[int, Type[Dumper]]]
-    _loaders: list[Dict[int, Type[Loader]]]
+    _dumpers: dict[PyFormat, dict[type | str, Type[Dumper]]]
+    _dumpers_by_oid: list[dict[int, Type[Dumper]]]
+    _loaders: list[dict[int, Type[Loader]]]
 
     # Record if a dumper or loader has an optimised version.
-    _optimised: Dict[type, type] = {}
+    _optimised: dict[type, type] = {}
 
     def __init__(
         self,
index 44725a8af06b83a593f91695b714e3ce03f88a47..491b8c79dc12f27d3a9214a004b396cbf7dc41cf 100644 (file)
@@ -4,7 +4,7 @@ psycopg capabilities objects
 
 # Copyright (C) 2024 The Psycopg Team
 
-from typing import Dict
+from __future__ import annotations
 
 from . import pq
 from . import _cmodule
@@ -17,7 +17,7 @@ class Capabilities:
     """
 
     def __init__(self) -> None:
-        self._cache: Dict[str, str] = {}
+        self._cache: dict[str, str] = {}
 
     def has_encrypt_password(self, check: bool = False) -> bool:
         """Check if the `PGconn.encrypt_password()` method is implemented.
index 3f1ddabe495aba283343a4e4cd9b08af05979ae7..2ae2c5502f4365d1fd06fb60261d5ea21ba403cc 100644 (file)
@@ -10,7 +10,7 @@ import re
 import sys
 import struct
 from abc import ABC, abstractmethod
-from typing import Any, Dict, Generic, Match, Sequence, Tuple, TYPE_CHECKING
+from typing import Any, Generic, Match, Sequence, Tuple, TYPE_CHECKING
 
 from . import pq
 from . import adapt
@@ -415,7 +415,7 @@ _dump_repl = {
 }
 
 
-def _dump_sub(m: Match[bytes], __map: Dict[bytes, bytes] = _dump_repl) -> bytes:
+def _dump_sub(m: Match[bytes], __map: dict[bytes, bytes] = _dump_repl) -> bytes:
     return __map[m.group(0)]
 
 
@@ -423,7 +423,7 @@ _load_re = re.compile(b"\\\\[btnvfr\\\\]")
 _load_repl = {v: k for k, v in _dump_repl.items()}
 
 
-def _load_sub(m: Match[bytes], __map: Dict[bytes, bytes] = _load_repl) -> bytes:
+def _load_sub(m: Match[bytes], __map: dict[bytes, bytes] = _load_repl) -> bytes:
     return __map[m.group(0)]
 
 
index 612d4cfabcd77f2e2eb7dd08cd699639afa7d80b..1d74aa4704f036bc8b1ccb7366633e0934bdd218 100644 (file)
@@ -11,7 +11,7 @@ import os
 import re
 import warnings
 from random import randint
-from typing import Any, DefaultDict, Dict, NamedTuple, Sequence, TYPE_CHECKING
+from typing import Any, DefaultDict, NamedTuple, Sequence, TYPE_CHECKING
 from collections import defaultdict
 
 try:
@@ -36,7 +36,7 @@ async_resolver = AsyncResolver()
 async_resolver.cache = Cache()
 
 
-async def resolve_hostaddr_async(params: Dict[str, Any]) -> Dict[str, Any]:
+async def resolve_hostaddr_async(params: dict[str, Any]) -> dict[str, Any]:
     """
     Perform async DNS lookup of the hosts and return a new params dict.
 
@@ -75,12 +75,12 @@ async def resolve_hostaddr_async(params: Dict[str, Any]) -> Dict[str, Any]:
     return out
 
 
-def resolve_srv(params: Dict[str, Any]) -> Dict[str, Any]:
+def resolve_srv(params: dict[str, Any]) -> dict[str, Any]:
     """Apply SRV DNS lookup as defined in :RFC:`2782`."""
     return Rfc2782Resolver().resolve(params)
 
 
-async def resolve_srv_async(params: Dict[str, Any]) -> Dict[str, Any]:
+async def resolve_srv_async(params: dict[str, Any]) -> dict[str, Any]:
     """Async equivalent of `resolve_srv()`."""
     return await Rfc2782Resolver().resolve_async(params)
 
@@ -101,7 +101,7 @@ class Rfc2782Resolver:
 
     re_srv_rr = re.compile(r"^(?P<service>_[^\.]+)\.(?P<proto>_[^\.]+)\.(?P<target>.+)")
 
-    def resolve(self, params: Dict[str, Any]) -> Dict[str, Any]:
+    def resolve(self, params: dict[str, Any]) -> dict[str, Any]:
         """Update the parameters host and port after SRV lookup."""
         attempts = self._get_attempts(params)
         if not attempts:
@@ -116,7 +116,7 @@ class Rfc2782Resolver:
 
         return self._return_params(params, hps)
 
-    async def resolve_async(self, params: Dict[str, Any]) -> Dict[str, Any]:
+    async def resolve_async(self, params: dict[str, Any]) -> dict[str, Any]:
         """Update the parameters host and port after SRV lookup."""
         attempts = self._get_attempts(params)
         if not attempts:
@@ -131,7 +131,7 @@ class Rfc2782Resolver:
 
         return self._return_params(params, hps)
 
-    def _get_attempts(self, params: Dict[str, Any]) -> list[HostPort]:
+    def _get_attempts(self, params: dict[str, Any]) -> list[HostPort]:
         """
         Return the list of host, and for each host if SRV lookup must be tried.
 
@@ -205,8 +205,8 @@ class Rfc2782Resolver:
         ]
 
     def _return_params(
-        self, params: Dict[str, Any], hps: list[HostPort]
-    ) -> Dict[str, Any]:
+        self, params: dict[str, Any], hps: list[HostPort]
+    ) -> dict[str, Any]:
         if not hps:
             # Nothing found, we ended up with an empty list
             raise e.OperationalError("no host found after SRV RR lookup")
index cc2981a21ab217e7d4601f43462e39561dca808b..a6c0ac4c4b4b972ca5ddc4ebea85d00d1eac4900 100644 (file)
@@ -9,7 +9,7 @@ from __future__ import annotations
 import re
 import string
 import codecs
-from typing import Any, Dict, TYPE_CHECKING
+from typing import Any, TYPE_CHECKING
 
 from .pq._enums import ConnStatus
 from .errors import NotSupportedError
@@ -69,7 +69,7 @@ _py_codecs = {
     "WIN874": "cp874",
 }
 
-py_codecs: Dict[bytes, str] = {}
+py_codecs: dict[bytes, str] = {}
 py_codecs.update((k.encode(), v) for k, v in _py_codecs.items())
 
 # Add an alias without underscore, for lenient lookups
index f8726c94996900ff42b9189edbeb48e764ce2430..260d8d30ce1cb79eb7ca4a4319a629c9a471bcd7 100644 (file)
@@ -11,7 +11,7 @@ dependencies problems).
 
 from __future__ import annotations
 
-from typing import Any, Dict, Sequence, Tuple, DefaultDict, TYPE_CHECKING
+from typing import Any, Sequence, Tuple, DefaultDict, TYPE_CHECKING
 from collections import defaultdict
 
 from . import pq
@@ -28,9 +28,9 @@ if TYPE_CHECKING:
     from .pq.abc import PGresult
     from ._connection_base import BaseConnection
 
-DumperCache: TypeAlias = Dict[DumperKey, abc.Dumper]
-OidDumperCache: TypeAlias = Dict[int, abc.Dumper]
-LoaderCache: TypeAlias = Dict[int, abc.Loader]
+DumperCache: TypeAlias = dict[DumperKey, abc.Dumper]
+OidDumperCache: TypeAlias = dict[int, abc.Dumper]
+LoaderCache: TypeAlias = dict[int, abc.Loader]
 
 TEXT = pq.Format.TEXT
 PY_TEXT = PyFormat.TEXT
@@ -94,7 +94,7 @@ class Transformer(AdaptContext):
         self._row_loaders: list[LoadFunc] = []
 
         # mapping oid -> type sql representation
-        self._oid_types: Dict[int, bytes] = {}
+        self._oid_types: dict[int, bytes] = {}
 
         self._encoding = ""
 
index a1936df8cc8040d8a4530641bea6333ba2f05d9d..5cbdf00a7d54d735f097908457f1d19b75d2f85e 100644 (file)
@@ -7,7 +7,7 @@ Utility module to manipulate queries
 from __future__ import annotations
 
 import re
-from typing import Any, Callable, Dict, Mapping, Match, NamedTuple
+from typing import Any, Callable, Mapping, Match, NamedTuple
 from typing import Sequence, Tuple, TYPE_CHECKING
 from functools import lru_cache
 
@@ -199,7 +199,7 @@ def _query2pg_nocache(
             formats.append(part.format)
 
     elif isinstance(parts[0].item, str):
-        seen: Dict[str, Tuple[bytes, PyFormat]] = {}
+        seen: dict[str, Tuple[bytes, PyFormat]] = {}
         order = []
         for part in parts[:-1]:
             assert isinstance(part.item, str)
@@ -306,7 +306,7 @@ def _query2pg_client_nocache(
             chunks.append(b"%s")
 
     elif isinstance(parts[0].item, str):
-        seen: Dict[str, Tuple[bytes, PyFormat]] = {}
+        seen: dict[str, Tuple[bytes, PyFormat]] = {}
         order = []
         for part in parts[:-1]:
             assert isinstance(part.item, str)
index acc38c8eb19b3a398bf085ac5b52cf6eaaa5db48..c6f400d7c881ce3fcc4dc8b0757da834f4a01891 100644 (file)
@@ -7,7 +7,6 @@ Timezone utility functions.
 from __future__ import annotations
 
 import logging
-from typing import Dict
 from datetime import timezone, tzinfo
 
 from .pq.abc import PGconn
@@ -15,7 +14,7 @@ from ._compat import ZoneInfo
 
 logger = logging.getLogger("psycopg")
 
-_timezones: Dict[bytes | None, tzinfo] = {
+_timezones: dict[bytes | None, tzinfo] = {
     None: timezone.utc,
     b"UTC": timezone.utc,
 }
index 091f88df2a9524be5bcd7dd90f98015ccfcdb2af..90202f8917381a08cc563f6dbc9acf8bb6a8986e 100644 (file)
@@ -6,7 +6,7 @@ Protocol objects representing different implementations of the same classes.
 
 from __future__ import annotations
 
-from typing import Any, Dict, Callable, Generator, Mapping
+from typing import Any, Callable, Generator, Mapping
 from typing import Protocol, Sequence, Tuple, TYPE_CHECKING
 
 from . import pq
@@ -32,7 +32,7 @@ ConnectionType = TypeVar("ConnectionType", bound="BaseConnection[Any]")
 PipelineCommand: TypeAlias = Callable[[], None]
 DumperKey: TypeAlias = type | Tuple["DumperKey", ...]
 ConnParam: TypeAlias = str | int | None
-ConnDict: TypeAlias = Dict[str, ConnParam]
+ConnDict: TypeAlias = dict[str, ConnParam]
 ConnMapping: TypeAlias = Mapping[str, ConnParam]
 
 
index 928b781cf8f6c05db9916434f564c98e922f79f1..a81a2ae513ab2b93d72ad8f6141ae8e0fc93413b 100644 (file)
@@ -21,7 +21,7 @@ DBAPI-defined Exceptions are defined in the following hierarchy::
 from __future__ import annotations
 
 from dataclasses import dataclass, field, fields
-from typing import Any, Callable, Dict, NoReturn, Sequence, Tuple, Type, TYPE_CHECKING
+from typing import Any, Callable, NoReturn, Sequence, Tuple, Type, TYPE_CHECKING
 from asyncio import CancelledError
 
 from .pq.abc import PGconn, PGresult
@@ -31,9 +31,9 @@ from ._compat import TypeAlias, TypeGuard
 if TYPE_CHECKING:
     from .pq.misc import PGnotify, ConninfoOption
 
-ErrorInfo: TypeAlias = None | PGresult | Dict[int, bytes | None]
+ErrorInfo: TypeAlias = None | PGresult | dict[int, bytes | None]
 
-_sqlcodes: Dict[str, "Type[Error]"] = {}
+_sqlcodes: dict[str, "Type[Error]"] = {}
 
 
 @dataclass
index 9ab13fbba828cdb2447db1769c15f84deccab0ba..53490a59374b5b51286cfc13246c8d6214e9acc5 100644 (file)
@@ -7,7 +7,7 @@ psycopg row factories
 from __future__ import annotations
 
 import functools
-from typing import Any, Callable, Dict, NamedTuple, NoReturn
+from typing import Any, Callable, NamedTuple, NoReturn
 from typing import TYPE_CHECKING, Protocol, Sequence, Tuple, Type
 from collections import namedtuple
 
@@ -87,7 +87,7 @@ An alias for the type returned by `tuple_row()` (i.e. a tuple of any content).
 """
 
 
-DictRow: TypeAlias = Dict[str, Any]
+DictRow: TypeAlias = dict[str, Any]
 """
 An alias for the type returned by `dict_row()`
 
@@ -118,7 +118,7 @@ def dict_row(cursor: "BaseCursor[Any, Any]") -> "RowMaker[DictRow]":
     if names is None:
         return no_result
 
-    def dict_row_(values: Sequence[Any]) -> Dict[str, Any]:
+    def dict_row_(values: Sequence[Any]) -> dict[str, Any]:
         return dict(zip(names, values))
 
     return dict_row_
index 114d7039a569b87691739d1979003415859ace2a..5e09bd92026175f0669e83ed09cb0df31ee069a3 100644 (file)
@@ -9,7 +9,7 @@ from __future__ import annotations
 import re
 import struct
 from collections import namedtuple
-from typing import Any, Callable, cast, Dict, Iterator
+from typing import Any, Callable, cast, Iterator
 from typing import NamedTuple, Sequence, Tuple, Type, TYPE_CHECKING
 
 from .. import pq
@@ -217,7 +217,7 @@ class RecordBinaryLoader(Loader):
         # Usually there will be only one, but if there is more than one
         # row in the same query (in different columns, or even in different
         # records), oids might differ and we'd need separate transformers.
-        self._txs: Dict[Tuple[int, ...], abc.Transformer] = {}
+        self._txs: dict[Tuple[int, ...], abc.Transformer] = {}
 
     def load(self, data: abc.Buffer) -> Tuple[Any, ...]:
         nfields = unpack_len(data, 0)[0]
index d8551906af1712491e5635695f4e58bb4bbde2ed..b8676dcb205434d6de8160c64ae111eaa00154af 100644 (file)
@@ -5,8 +5,7 @@ Adapters for the enum type.
 from __future__ import annotations
 
 from enum import Enum
-from typing import Any, Dict, Generic, Mapping, Sequence
-from typing import Tuple, Type, cast, TYPE_CHECKING
+from typing import Any, Generic, Mapping, Sequence, Tuple, Type, cast, TYPE_CHECKING
 
 from .. import sql
 from .. import postgres
@@ -23,8 +22,8 @@ if TYPE_CHECKING:
 
 E = TypeVar("E", bound=Enum)
 
-EnumDumpMap: TypeAlias = Dict[E, bytes]
-EnumLoadMap: TypeAlias = Dict[bytes, E]
+EnumDumpMap: TypeAlias = dict[E, bytes]
+EnumLoadMap: TypeAlias = dict[bytes, E]
 EnumMapping: TypeAlias = Mapping[E, str] | Sequence[Tuple[E, str]] | None
 
 # Hashable versions
index 509d617a353bf943fbe713718fc87e9e00512785..98c90dd995c3104fa75a58c59ca5a927581717fd 100644 (file)
@@ -1,5 +1,5 @@
 """
-Dict to hstore adaptation
+dict to hstore adaptation
 """
 
 # Copyright (C) 2021 The Psycopg Team
@@ -7,7 +7,7 @@ Dict to hstore adaptation
 from __future__ import annotations
 
 import re
-from typing import Dict, Type
+from typing import Type
 
 from .. import errors as e
 from .. import postgres
@@ -37,7 +37,7 @@ _re_hstore = re.compile(
 )
 
 
-Hstore: TypeAlias = Dict[str, str | None]
+Hstore: TypeAlias = dict[str, str | None]
 
 
 class BaseHstoreDumper(RecursiveDumper):
index 55944decc5db29e58e20cbed35781af948941472..161e2333b541ee26afe05d006ca0a3c59abf5d37 100644 (file)
@@ -7,7 +7,7 @@ Adapters for JSON types.
 from __future__ import annotations
 
 import json
-from typing import Any, Callable, Dict, Tuple, Type
+from typing import Any, Callable, Tuple, Type
 
 from .. import abc
 from .. import _oids
@@ -230,7 +230,7 @@ def _get_current_dumper(
         return _default_dumpers[cls, format]
 
 
-_default_dumpers: Dict[Tuple[Type[_JsonWrapper], PyFormat], Type[Dumper]] = {
+_default_dumpers: dict[Tuple[Type[_JsonWrapper], PyFormat], Type[Dumper]] = {
     (Json, PyFormat.BINARY): JsonBinaryDumper,
     (Json, PyFormat.TEXT): JsonDumper,
     (Jsonb, PyFormat.BINARY): JsonbBinaryDumper,
index fc22e81bf1fb233dd8d3767418f35bad96146c06..35c3a051b9c5e72025c691684b60ae5d4e0ea7a6 100644 (file)
@@ -10,7 +10,7 @@ import sys
 import struct
 from abc import ABC, abstractmethod
 from math import log
-from typing import Any, Callable, DefaultDict, Dict, Tuple, cast, TYPE_CHECKING
+from typing import Any, Callable, DefaultDict, Tuple, cast, TYPE_CHECKING
 from decimal import Decimal, DefaultContext, Context
 
 from .. import _oids
@@ -60,7 +60,7 @@ class _IntOrSubclassDumper(_IntDumper):
 
 
 class _SpecialValuesDumper(Dumper):
-    _special: Dict[bytes, bytes] = {}
+    _special: dict[bytes, bytes] = {}
 
     def dump(self, obj: Any) -> Buffer | None:
         return str(obj).encode()
index 775398542f7aa1be9409c5f09bf58bed24bc38e4..e5551e762dd2ae1af411c9c78b891083c937cdf7 100644 (file)
@@ -7,8 +7,7 @@ Support for range types adaptation.
 from __future__ import annotations
 
 import re
-from typing import Any, Dict, Generic, Type, Tuple
-from typing import cast, TYPE_CHECKING
+from typing import Any, Generic, Type, Tuple, cast, TYPE_CHECKING
 from decimal import Decimal
 from datetime import date, datetime
 
@@ -248,12 +247,12 @@ class Range(Generic[T]):
     def __ge__(self, other: Any) -> bool:
         return self == other or self > other  # type: ignore
 
-    def __getstate__(self) -> Dict[str, Any]:
+    def __getstate__(self) -> dict[str, Any]:
         return {
             slot: getattr(self, slot) for slot in self.__slots__ if hasattr(self, slot)
         }
 
-    def __setstate__(self, state: Dict[str, Any]) -> None:
+    def __setstate__(self, state: dict[str, Any]) -> None:
         for slot, value in state.items():
             setattr(self, slot, value)
 
index 97b6e29783b66cbf79d57098dda9915bb8bba215..4e2ccdf0bc25aa4020da8cfb5b5ae9780a580dc0 100644 (file)
@@ -19,7 +19,7 @@ from cpython.bytes cimport PyBytes_AS_STRING
 from cpython.tuple cimport PyTuple_New, PyTuple_SET_ITEM
 from cpython.object cimport PyObject, PyObject_CallFunctionObjArgs
 
-from typing import Any, Dict, Iterable, Sequence, Tuple
+from typing import Any, Iterable, Sequence, Tuple
 
 from psycopg import errors as e
 from psycopg.pq import Format as PqFormat
index b2946ee0a1722e75a9c02d3f61c62075c90d9247..748d1362ae94beeebbb476975212a863cb39984c 100644 (file)
@@ -8,7 +8,7 @@ from __future__ import annotations
 
 from time import monotonic
 from random import random
-from typing import Any, Dict, Tuple, TYPE_CHECKING
+from typing import Any, Tuple, TYPE_CHECKING
 
 from psycopg import errors as e
 
@@ -46,7 +46,7 @@ class BasePool:
         self,
         conninfo: str = "",
         *,
-        kwargs: Dict[str, Any] | None,
+        kwargs: dict[str, Any] | None,
         min_size: int,
         max_size: int | None,
         name: str | None,
@@ -67,7 +67,7 @@ class BasePool:
             raise ValueError("num_workers must be at least 1")
 
         self.conninfo = conninfo
-        self.kwargs: Dict[str, Any] = kwargs or {}
+        self.kwargs: dict[str, Any] = kwargs or {}
         self.name = name
         self._min_size = min_size
         self._max_size = max_size
@@ -157,7 +157,7 @@ class BasePool:
             f"can't return connection to pool {self.name!r}, {msg}: {conn}"
         )
 
-    def get_stats(self) -> Dict[str, int]:
+    def get_stats(self) -> dict[str, int]:
         """
         Return current stats about the pool usage.
         """
@@ -165,7 +165,7 @@ class BasePool:
         rv.update(self._get_measures())
         return rv
 
-    def pop_stats(self) -> Dict[str, int]:
+    def pop_stats(self) -> dict[str, int]:
         """
         Return current stats about the pool usage.
 
@@ -176,7 +176,7 @@ class BasePool:
         rv.update(self._get_measures())
         return rv
 
-    def _get_measures(self) -> Dict[str, int]:
+    def _get_measures(self) -> dict[str, int]:
         """
         Return immediate measures of the pool (not counters).
         """
index fd3b4f4620b833af55e2135baefda9e5cb2dee9e..a891db5e3dd21da5af2bfcfc0ab9c5b6901bfc0d 100644 (file)
@@ -10,7 +10,7 @@ Psycopg null connection pool module (sync version).
 from __future__ import annotations
 
 import logging
-from typing import Any, cast, Dict, Type
+from typing import Any, cast, Type
 
 from psycopg import Connection
 from psycopg.pq import TransactionStatus
@@ -32,7 +32,7 @@ class NullConnectionPool(_BaseNullConnectionPool, ConnectionPool[CT]):
         conninfo: str = "",
         *,
         connection_class: Type[CT] = cast(Type[CT], Connection),
-        kwargs: Dict[str, Any] | None = None,
+        kwargs: dict[str, Any] | None = None,
         min_size: int = 0,
         max_size: int | None = None,
         open: bool | None = None,
index 4cac69230395b83d53376ca15e0482cf8175d0ea..da255ecc4bb888645666779aec459d025390eaa7 100644 (file)
@@ -7,7 +7,7 @@ Psycopg null connection pool module (async version).
 from __future__ import annotations
 
 import logging
-from typing import Any, cast, Dict, Type
+from typing import Any, cast, Type
 
 from psycopg import AsyncConnection
 from psycopg.pq import TransactionStatus
@@ -28,7 +28,7 @@ class AsyncNullConnectionPool(_BaseNullConnectionPool, AsyncConnectionPool[ACT])
         conninfo: str = "",
         *,
         connection_class: Type[ACT] = cast(Type[ACT], AsyncConnection),
-        kwargs: Dict[str, Any] | None = None,
+        kwargs: dict[str, Any] | None = None,
         min_size: int = 0,  # Note: min_size default value changed to 0.
         max_size: int | None = None,
         open: bool | None = None,
index 25010fe60da86495dc3f978f9c480ab8415c76b7..a179f33fca4166c1bf1f26fc3fda0b304ca0f51d 100644 (file)
@@ -14,7 +14,7 @@ import warnings
 from abc import ABC, abstractmethod
 from time import monotonic
 from types import TracebackType
-from typing import Any, Iterator, cast, Dict, Generic
+from typing import Any, Iterator, cast, Generic
 from typing import Type
 from weakref import ref
 from contextlib import contextmanager
@@ -43,7 +43,7 @@ class ConnectionPool(Generic[CT], BasePool):
         conninfo: str = "",
         *,
         connection_class: Type[CT] = cast(Type[CT], Connection),
-        kwargs: Dict[str, Any] | None = None,
+        kwargs: dict[str, Any] | None = None,
         min_size: int = 4,
         max_size: int | None = None,
         open: bool | None = None,
@@ -811,7 +811,7 @@ class ConnectionPool(Generic[CT], BasePool):
             )
             to_close.close()
 
-    def _get_measures(self) -> Dict[str, int]:
+    def _get_measures(self) -> dict[str, int]:
         rv = super()._get_measures()
         rv[self._REQUESTS_WAITING] = len(self._waiting)
         return rv
index f5b3fd22b73b9e2b3e95b39f72f09f12ad931009..0811f5e408d52be2337454cbde646dd6e82cf247 100644 (file)
@@ -11,7 +11,7 @@ import warnings
 from abc import ABC, abstractmethod
 from time import monotonic
 from types import TracebackType
-from typing import Any, AsyncIterator, cast, Dict, Generic
+from typing import Any, AsyncIterator, cast, Generic
 from typing import Type
 from weakref import ref
 from contextlib import asynccontextmanager
@@ -42,7 +42,7 @@ class AsyncConnectionPool(Generic[ACT], BasePool):
         conninfo: str = "",
         *,
         connection_class: Type[ACT] = cast(Type[ACT], AsyncConnection),
-        kwargs: Dict[str, Any] | None = None,
+        kwargs: dict[str, Any] | None = None,
         min_size: int = 4,
         max_size: int | None = None,
         open: bool | None = None,
@@ -868,7 +868,7 @@ class AsyncConnectionPool(Generic[ACT], BasePool):
             )
             await to_close.close()
 
-    def _get_measures(self) -> Dict[str, int]:
+    def _get_measures(self) -> dict[str, int]:
         rv = super()._get_measures()
         rv[self._REQUESTS_WAITING] = len(self._waiting)
         return rv
index cea5ae775f9a76ebcdd152f8dfcbbb39d30af095..643a3174f9640e3e1b49f1f266935d4458e5b159 100644 (file)
@@ -3,7 +3,7 @@ from __future__ import annotations
 import asyncio
 import selectors
 import sys
-from typing import Any, Dict
+from typing import Any
 
 import pytest
 
@@ -73,7 +73,7 @@ def pytest_sessionstart(session):
     cache.set("segfault", True)
 
 
-asyncio_options: Dict[str, Any] = {}
+asyncio_options: dict[str, Any] = {}
 if sys.platform == "win32":
     asyncio_options["loop_factory"] = (
         asyncio.WindowsSelectorEventLoopPolicy().new_event_loop
index ea98800f525f5de4821b83be53b1fab5e9c43c2b..d15dbcb1aaf8eb3a7b6b2ad3101a40e3131c00db 100644 (file)
@@ -22,7 +22,7 @@ __author__ = 'Stuart Bishop <stuart@stuartbishop.net>'
 import unittest
 import time
 import sys
-from typing import Any, Dict
+from typing import Any
 
 
 # Revision 1.12  2009/02/06 03:35:11  kf7xm
@@ -103,7 +103,7 @@ class DatabaseAPI20Test(unittest.TestCase):
     # method is to be found
     driver: Any = None
     connect_args = () # List of arguments to pass to connect
-    connect_kw_args: Dict[Any, Any] = {} # Keyword arguments for connect
+    connect_kw_args: dict[Any, Any] = {} # Keyword arguments for connect
     table_prefix = 'dbapi20test_' # If you need to specify a prefix for tables
 
     ddl1 = 'create table %sbooze (name varchar(20))' % table_prefix
index 054d479125231ddd98e47fac067d0ac537f0b8fc..b22ea435ef26a9b41a7f789feb66e70bfe85badf 100644 (file)
@@ -6,7 +6,7 @@ from __future__ import annotations
 import logging
 import weakref
 from time import time
-from typing import Any, Dict, Tuple
+from typing import Any, Tuple
 
 import pytest
 
@@ -43,7 +43,7 @@ def test_bad_size(dsn, min_size, max_size):
         pool.ConnectionPool(min_size=min_size, max_size=max_size)
 
 
-class MyRow(Dict[str, Any]):
+class MyRow(dict[str, Any]):
     pass
 
 
index 8976bce7d82f6030571659f4f8d304235d2cd6a0..b18c3e42672e771b917f52b15f7152fc4fad3d92 100644 (file)
@@ -3,7 +3,7 @@ from __future__ import annotations
 import logging
 import weakref
 from time import time
-from typing import Any, Dict, Tuple
+from typing import Any, Tuple
 
 import pytest
 
@@ -43,7 +43,7 @@ async def test_bad_size(dsn, min_size, max_size):
         pool.AsyncConnectionPool(min_size=min_size, max_size=max_size)
 
 
-class MyRow(Dict[str, Any]):
+class MyRow(dict[str, Any]):
     pass
 
 
index 89b39d7af36e6d410003dd1b2fb10e2881c8db29..13260ad0d6776bec338d8fdafd6a8648fb019e4a 100644 (file)
@@ -4,7 +4,7 @@
 from __future__ import annotations
 
 import logging
-from typing import Any, Dict
+from typing import Any
 
 import pytest
 from packaging.version import parse as ver  # noqa: F401  # used in skipif
@@ -41,7 +41,7 @@ def test_bad_size(dsn, min_size, max_size):
         pool.NullConnectionPool(min_size=min_size, max_size=max_size)
 
 
-class MyRow(Dict[str, Any]):
+class MyRow(dict[str, Any]):
     pass
 
 
index c74acb8fdfd5201179294ad8108d3b0588f3206a..c35cacba3c072c83c7c8c0d7f2f34c2e5724245d 100644 (file)
@@ -1,7 +1,7 @@
 from __future__ import annotations
 
 import logging
-from typing import Any, Dict
+from typing import Any
 
 import pytest
 from packaging.version import parse as ver  # noqa: F401  # used in skipif
@@ -41,7 +41,7 @@ async def test_bad_size(dsn, min_size, max_size):
         pool.AsyncNullConnectionPool(min_size=min_size, max_size=max_size)
 
 
-class MyRow(Dict[str, Any]):
+class MyRow(dict[str, Any]):
     pass
 
 
index 77b4960f9a895e249a09b510f91902a40c6a629c..f6a9b0003a8acbcc9fd8c393b819698c6d6ce438 100644 (file)
@@ -7,7 +7,7 @@ import random
 import asyncio
 import logging
 from enum import Enum
-from typing import Any, Dict, Generator
+from typing import Any, Generator
 from argparse import ArgumentParser, Namespace
 from contextlib import contextmanager
 from concurrent.futures import ThreadPoolExecutor
@@ -28,7 +28,7 @@ class Driver(str, Enum):
 
 
 ids: list[int] = []
-data: list[Dict[str, Any]] = []
+data: list[dict[str, Any]] = []
 
 
 def main() -> None:
index d852567ada91a1b6110c718bb6f62ca95f517029..982929e07e6f71e8b365be3809a5f7e463eba4ec 100644 (file)
@@ -1,6 +1,6 @@
 import pytest
 import datetime as dt
-from typing import Any, Dict
+from typing import Any
 
 import psycopg
 from psycopg.conninfo import conninfo_to_dict
@@ -18,7 +18,7 @@ def with_dsn(request, session_dsn):
 class PsycopgTests(dbapi20.DatabaseAPI20Test):
     driver = psycopg
     # connect_args = () # set by the fixture
-    connect_kw_args: Dict[Any, Any] = {}
+    connect_kw_args: dict[Any, Any] = {}
 
     def test_nextset(self):
         # tested elsewhere
index 68b9a1365b5ab90b29f430feb5a36f6b9d2b91ed..4bea2c14d4cf46fe8c477da5d3c8ee3a66febc7d 100644 (file)
@@ -3,7 +3,7 @@
 from __future__ import annotations
 
 from dataclasses import dataclass
-from typing import Any, Callable, Dict, Sequence, Tuple
+from typing import Any, Callable, Sequence, Tuple
 
 from psycopg import Connection, Cursor, ServerCursor, connect, rows
 from psycopg import AsyncConnection, AsyncCursor, AsyncServerCursor
@@ -162,7 +162,7 @@ def check_row_factories() -> None:
     v1: Tuple[Any, ...] = conn1.execute("").fetchall()[0]
 
     conn2 = connect(row_factory=rows.dict_row)
-    v2: Dict[str, Any] = conn2.execute("").fetchall()[0]
+    v2: dict[str, Any] = conn2.execute("").fetchall()[0]
 
     conn3 = connect(row_factory=rows.class_row(Person))
     v3: Person = conn3.execute("").fetchall()[0]