From: Daniele Varrazzo Date: Thu, 30 May 2024 01:14:03 +0000 (+0200) Subject: refactor: drop use of typing.Dict X-Git-Tag: 3.2.0~19^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0862e36c0ea74b0e362f661fc0988a0e841bad16;p=thirdparty%2Fpsycopg.git refactor: drop use of typing.Dict --- diff --git a/docs/lib/pg3_docs.py b/docs/lib/pg3_docs.py index 05a68762c..674f2d7c0 100644 --- a/docs/lib/pg3_docs.py +++ b/docs/lib/pg3_docs.py @@ -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=()): diff --git a/psycopg/psycopg/_adapters_map.py b/psycopg/psycopg/_adapters_map.py index 70a5586b0..e4e72242f 100644 --- a/psycopg/psycopg/_adapters_map.py +++ b/psycopg/psycopg/_adapters_map.py @@ -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, diff --git a/psycopg/psycopg/_capabilities.py b/psycopg/psycopg/_capabilities.py index 44725a8af..491b8c79d 100644 --- a/psycopg/psycopg/_capabilities.py +++ b/psycopg/psycopg/_capabilities.py @@ -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. diff --git a/psycopg/psycopg/_copy_base.py b/psycopg/psycopg/_copy_base.py index 3f1ddabe4..2ae2c5502 100644 --- a/psycopg/psycopg/_copy_base.py +++ b/psycopg/psycopg/_copy_base.py @@ -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)] diff --git a/psycopg/psycopg/_dns.py b/psycopg/psycopg/_dns.py index 612d4cfab..1d74aa470 100644 --- a/psycopg/psycopg/_dns.py +++ b/psycopg/psycopg/_dns.py @@ -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_[^\.]+)\.(?P_[^\.]+)\.(?P.+)") - 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") diff --git a/psycopg/psycopg/_encodings.py b/psycopg/psycopg/_encodings.py index cc2981a21..a6c0ac4c4 100644 --- a/psycopg/psycopg/_encodings.py +++ b/psycopg/psycopg/_encodings.py @@ -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 diff --git a/psycopg/psycopg/_py_transformer.py b/psycopg/psycopg/_py_transformer.py index f8726c949..260d8d30c 100644 --- a/psycopg/psycopg/_py_transformer.py +++ b/psycopg/psycopg/_py_transformer.py @@ -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 = "" diff --git a/psycopg/psycopg/_queries.py b/psycopg/psycopg/_queries.py index a1936df8c..5cbdf00a7 100644 --- a/psycopg/psycopg/_queries.py +++ b/psycopg/psycopg/_queries.py @@ -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) diff --git a/psycopg/psycopg/_tz.py b/psycopg/psycopg/_tz.py index acc38c8eb..c6f400d7c 100644 --- a/psycopg/psycopg/_tz.py +++ b/psycopg/psycopg/_tz.py @@ -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, } diff --git a/psycopg/psycopg/abc.py b/psycopg/psycopg/abc.py index 091f88df2..90202f891 100644 --- a/psycopg/psycopg/abc.py +++ b/psycopg/psycopg/abc.py @@ -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] diff --git a/psycopg/psycopg/errors.py b/psycopg/psycopg/errors.py index 928b781cf..a81a2ae51 100644 --- a/psycopg/psycopg/errors.py +++ b/psycopg/psycopg/errors.py @@ -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 diff --git a/psycopg/psycopg/rows.py b/psycopg/psycopg/rows.py index 9ab13fbba..53490a593 100644 --- a/psycopg/psycopg/rows.py +++ b/psycopg/psycopg/rows.py @@ -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_ diff --git a/psycopg/psycopg/types/composite.py b/psycopg/psycopg/types/composite.py index 114d7039a..5e09bd920 100644 --- a/psycopg/psycopg/types/composite.py +++ b/psycopg/psycopg/types/composite.py @@ -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] diff --git a/psycopg/psycopg/types/enum.py b/psycopg/psycopg/types/enum.py index d8551906a..b8676dcb2 100644 --- a/psycopg/psycopg/types/enum.py +++ b/psycopg/psycopg/types/enum.py @@ -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 diff --git a/psycopg/psycopg/types/hstore.py b/psycopg/psycopg/types/hstore.py index 509d617a3..98c90dd99 100644 --- a/psycopg/psycopg/types/hstore.py +++ b/psycopg/psycopg/types/hstore.py @@ -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): diff --git a/psycopg/psycopg/types/json.py b/psycopg/psycopg/types/json.py index 55944decc..161e2333b 100644 --- a/psycopg/psycopg/types/json.py +++ b/psycopg/psycopg/types/json.py @@ -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, diff --git a/psycopg/psycopg/types/numeric.py b/psycopg/psycopg/types/numeric.py index fc22e81bf..35c3a051b 100644 --- a/psycopg/psycopg/types/numeric.py +++ b/psycopg/psycopg/types/numeric.py @@ -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() diff --git a/psycopg/psycopg/types/range.py b/psycopg/psycopg/types/range.py index 775398542..e5551e762 100644 --- a/psycopg/psycopg/types/range.py +++ b/psycopg/psycopg/types/range.py @@ -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) diff --git a/psycopg_c/psycopg_c/_psycopg/transform.pyx b/psycopg_c/psycopg_c/_psycopg/transform.pyx index 97b6e2978..4e2ccdf0b 100644 --- a/psycopg_c/psycopg_c/_psycopg/transform.pyx +++ b/psycopg_c/psycopg_c/_psycopg/transform.pyx @@ -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 diff --git a/psycopg_pool/psycopg_pool/base.py b/psycopg_pool/psycopg_pool/base.py index b2946ee0a..748d1362a 100644 --- a/psycopg_pool/psycopg_pool/base.py +++ b/psycopg_pool/psycopg_pool/base.py @@ -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). """ diff --git a/psycopg_pool/psycopg_pool/null_pool.py b/psycopg_pool/psycopg_pool/null_pool.py index fd3b4f462..a891db5e3 100644 --- a/psycopg_pool/psycopg_pool/null_pool.py +++ b/psycopg_pool/psycopg_pool/null_pool.py @@ -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, diff --git a/psycopg_pool/psycopg_pool/null_pool_async.py b/psycopg_pool/psycopg_pool/null_pool_async.py index 4cac69230..da255ecc4 100644 --- a/psycopg_pool/psycopg_pool/null_pool_async.py +++ b/psycopg_pool/psycopg_pool/null_pool_async.py @@ -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, diff --git a/psycopg_pool/psycopg_pool/pool.py b/psycopg_pool/psycopg_pool/pool.py index 25010fe60..a179f33fc 100644 --- a/psycopg_pool/psycopg_pool/pool.py +++ b/psycopg_pool/psycopg_pool/pool.py @@ -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 diff --git a/psycopg_pool/psycopg_pool/pool_async.py b/psycopg_pool/psycopg_pool/pool_async.py index f5b3fd22b..0811f5e40 100644 --- a/psycopg_pool/psycopg_pool/pool_async.py +++ b/psycopg_pool/psycopg_pool/pool_async.py @@ -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 diff --git a/tests/conftest.py b/tests/conftest.py index cea5ae775..643a3174f 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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 diff --git a/tests/dbapi20.py b/tests/dbapi20.py index ea98800f5..d15dbcb1a 100644 --- a/tests/dbapi20.py +++ b/tests/dbapi20.py @@ -22,7 +22,7 @@ __author__ = 'Stuart Bishop ' 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 diff --git a/tests/pool/test_pool.py b/tests/pool/test_pool.py index 054d47912..b22ea435e 100644 --- a/tests/pool/test_pool.py +++ b/tests/pool/test_pool.py @@ -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 diff --git a/tests/pool/test_pool_async.py b/tests/pool/test_pool_async.py index 8976bce7d..b18c3e426 100644 --- a/tests/pool/test_pool_async.py +++ b/tests/pool/test_pool_async.py @@ -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 diff --git a/tests/pool/test_pool_null.py b/tests/pool/test_pool_null.py index 89b39d7af..13260ad0d 100644 --- a/tests/pool/test_pool_null.py +++ b/tests/pool/test_pool_null.py @@ -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 diff --git a/tests/pool/test_pool_null_async.py b/tests/pool/test_pool_null_async.py index c74acb8fd..c35cacba3 100644 --- a/tests/pool/test_pool_null_async.py +++ b/tests/pool/test_pool_null_async.py @@ -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 diff --git a/tests/scripts/bench-411.py b/tests/scripts/bench-411.py index 77b4960f9..f6a9b0003 100644 --- a/tests/scripts/bench-411.py +++ b/tests/scripts/bench-411.py @@ -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: diff --git a/tests/test_psycopg_dbapi20.py b/tests/test_psycopg_dbapi20.py index d852567ad..982929e07 100644 --- a/tests/test_psycopg_dbapi20.py +++ b/tests/test_psycopg_dbapi20.py @@ -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 diff --git a/tests/typing_example.py b/tests/typing_example.py index 68b9a1365..4bea2c14d 100644 --- a/tests/typing_example.py +++ b/tests/typing_example.py @@ -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]