]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor(pool): add psycopg_pool.abc module
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 4 Oct 2023 20:02:58 +0000 (22:02 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 11 Oct 2023 21:45:38 +0000 (23:45 +0200)
psycopg_pool/psycopg_pool/abc.py [new file with mode: 0644]
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

diff --git a/psycopg_pool/psycopg_pool/abc.py b/psycopg_pool/psycopg_pool/abc.py
new file mode 100644 (file)
index 0000000..5cc72f7
--- /dev/null
@@ -0,0 +1,31 @@
+"""
+Types used in the psycopg_pool package
+"""
+
+# Copyright (C) 2023 The Psycopg Team
+
+from __future__ import annotations
+
+from typing import Any, Awaitable, Callable, TypeVar, Union, TYPE_CHECKING
+
+from typing_extensions import TypeAlias
+
+if TYPE_CHECKING:
+    from .pool import ConnectionPool
+    from .pool_async import AsyncConnectionPool
+    from psycopg import Connection, AsyncConnection
+
+# Connection types to make the pool generic
+CT = TypeVar("CT", bound="Connection[Any]")
+ACT = TypeVar("ACT", bound="AsyncConnection[Any]")
+
+# Callbacks taking a connection from the pool
+ConnectionCB: TypeAlias = Callable[[CT], None]
+AsyncConnectionCB: TypeAlias = Callable[[ACT], Awaitable[None]]
+
+# Callbacks to pass the pool to on connection failure
+ConnectFailedCB: TypeAlias = Callable[["ConnectionPool[Any]"], None]
+AsyncConnectFailedCB: TypeAlias = Union[
+    Callable[["AsyncConnectionPool[Any]"], None],
+    Callable[["AsyncConnectionPool[Any]"], Awaitable[None]],
+]
index b4e640b74afe45ea9e78cd8a4e827ec13e43063f..d0b33931ea3a086ad1e47908f363952bb2df6fab 100644 (file)
@@ -6,13 +6,14 @@ Psycopg null connection pools
 
 import logging
 import threading
-from typing import Any, Callable, cast, Dict, Optional, overload, Tuple, Type
+from typing import Any, cast, Dict, Optional, overload, Tuple, Type
 
 from psycopg import Connection
 from psycopg.pq import TransactionStatus
 from psycopg.rows import TupleRow
 
-from .pool import ConnectionPool, CT, AddConnection, ConnectFailedCB
+from .abc import CT, ConnectionCB, ConnectFailedCB
+from .pool import ConnectionPool, AddConnection
 from .errors import PoolTimeout, TooManyRequests
 from ._compat import ConnectionTimeout
 
@@ -48,8 +49,8 @@ class NullConnectionPool(_BaseNullConnectionPool, ConnectionPool[CT]):
         conninfo: str = "",
         *,
         open: bool = ...,
-        configure: Optional[Callable[[CT], None]] = ...,
-        reset: Optional[Callable[[CT], None]] = ...,
+        configure: Optional[ConnectionCB[CT]] = ...,
+        reset: Optional[ConnectionCB[CT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -71,8 +72,8 @@ class NullConnectionPool(_BaseNullConnectionPool, ConnectionPool[CT]):
         *,
         open: bool = ...,
         connection_class: Type[CT],
-        configure: Optional[Callable[[CT], None]] = ...,
-        reset: Optional[Callable[[CT], None]] = ...,
+        configure: Optional[ConnectionCB[CT]] = ...,
+        reset: Optional[ConnectionCB[CT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -93,8 +94,8 @@ class NullConnectionPool(_BaseNullConnectionPool, ConnectionPool[CT]):
         *,
         open: bool = True,
         connection_class: Type[CT] = cast(Type[CT], Connection),
-        configure: Optional[Callable[[CT], None]] = None,
-        reset: Optional[Callable[[CT], None]] = None,
+        configure: Optional[ConnectionCB[CT]] = None,
+        reset: Optional[ConnectionCB[CT]] = None,
         kwargs: Optional[Dict[str, Any]] = None,
         # Note: default value changed to 0.
         min_size: int = 0,
index ca9db8bcdbf67f3dd3bfdc100928082d937a6fd8..b1553ee5bb572adf2dce62006c3bba394429af25 100644 (file)
@@ -6,16 +6,17 @@ psycopg asynchronous null connection pool
 
 import asyncio
 import logging
-from typing import Any, Awaitable, Callable, cast, Dict, Optional, overload, Type
+from typing import Any, cast, Dict, Optional, overload, Type
 
 from psycopg import AsyncConnection
 from psycopg.pq import TransactionStatus
 from psycopg.rows import TupleRow
 
+from .abc import ACT, AsyncConnectionCB, AsyncConnectFailedCB
 from .errors import PoolTimeout, TooManyRequests
 from ._compat import ConnectionTimeout
 from .null_pool import _BaseNullConnectionPool
-from .pool_async import AsyncConnectionPool, ACT, AddConnection, AsyncConnectFailedCB
+from .pool_async import AsyncConnectionPool, AddConnection
 
 logger = logging.getLogger("psycopg.pool")
 
@@ -27,8 +28,8 @@ class AsyncNullConnectionPool(_BaseNullConnectionPool, AsyncConnectionPool[ACT])
         conninfo: str = "",
         *,
         open: bool = ...,
-        configure: Optional[Callable[[ACT], Awaitable[None]]] = ...,
-        reset: Optional[Callable[[ACT], Awaitable[None]]] = ...,
+        configure: Optional[AsyncConnectionCB[ACT]] = ...,
+        reset: Optional[AsyncConnectionCB[ACT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -50,8 +51,8 @@ class AsyncNullConnectionPool(_BaseNullConnectionPool, AsyncConnectionPool[ACT])
         *,
         open: bool = ...,
         connection_class: Type[ACT],
-        configure: Optional[Callable[[ACT], Awaitable[None]]] = ...,
-        reset: Optional[Callable[[ACT], Awaitable[None]]] = ...,
+        configure: Optional[AsyncConnectionCB[ACT]] = ...,
+        reset: Optional[AsyncConnectionCB[ACT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -72,8 +73,8 @@ class AsyncNullConnectionPool(_BaseNullConnectionPool, AsyncConnectionPool[ACT])
         *,
         open: bool = True,
         connection_class: Type[ACT] = cast(Type[ACT], AsyncConnection),
-        configure: Optional[Callable[[ACT], Awaitable[None]]] = None,
-        reset: Optional[Callable[[ACT], Awaitable[None]]] = None,
+        configure: Optional[AsyncConnectionCB[ACT]] = None,
+        reset: Optional[AsyncConnectionCB[ACT]] = None,
         kwargs: Optional[Dict[str, Any]] = None,
         # Note: default value changed to 0.
         min_size: int = 0,
index 6e5876eb73c46e64ff76a3ae336496b3334f4b26..cbf3520fb2374aa5f4f68500f4f6514b8bdc7447 100644 (file)
@@ -10,9 +10,8 @@ from abc import ABC, abstractmethod
 from time import monotonic
 from queue import Queue, Empty
 from types import TracebackType
-from typing import Any, Callable, cast, Dict, Generic, Iterator, List
+from typing import Any, cast, Dict, Generic, Iterator, List
 from typing import Optional, overload, Sequence, Type, TypeVar
-from typing_extensions import TypeAlias
 from weakref import ref
 from contextlib import contextmanager
 
@@ -21,6 +20,7 @@ from psycopg import Connection
 from psycopg.pq import TransactionStatus
 from psycopg.rows import TupleRow
 
+from .abc import CT, ConnectionCB, ConnectFailedCB
 from .base import ConnectionAttempt, BasePool
 from .sched import Scheduler
 from .errors import PoolClosed, PoolTimeout, TooManyRequests
@@ -28,10 +28,6 @@ from ._compat import Deque
 
 logger = logging.getLogger("psycopg.pool")
 
-ConnectFailedCB: TypeAlias = Callable[["ConnectionPool"], None]
-
-CT = TypeVar("CT", bound="Connection[Any]")
-
 
 class ConnectionPool(Generic[CT], BasePool):
     _Self = TypeVar("_Self", bound="ConnectionPool[CT]")
@@ -43,8 +39,8 @@ class ConnectionPool(Generic[CT], BasePool):
         conninfo: str = "",
         *,
         open: bool = ...,
-        configure: Optional[Callable[[CT], None]] = ...,
-        reset: Optional[Callable[[CT], None]] = ...,
+        configure: Optional[ConnectionCB[CT]] = ...,
+        reset: Optional[ConnectionCB[CT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -66,8 +62,8 @@ class ConnectionPool(Generic[CT], BasePool):
         *,
         open: bool = ...,
         connection_class: Type[CT],
-        configure: Optional[Callable[[CT], None]] = ...,
-        reset: Optional[Callable[[CT], None]] = ...,
+        configure: Optional[ConnectionCB[CT]] = ...,
+        reset: Optional[ConnectionCB[CT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -88,8 +84,8 @@ class ConnectionPool(Generic[CT], BasePool):
         *,
         open: bool = True,
         connection_class: Type[CT] = cast(Type[CT], Connection[TupleRow]),
-        configure: Optional[Callable[[CT], None]] = None,
-        reset: Optional[Callable[[CT], None]] = None,
+        configure: Optional[ConnectionCB[CT]] = None,
+        reset: Optional[ConnectionCB[CT]] = None,
         kwargs: Optional[Dict[str, Any]] = None,
         min_size: int = 4,
         max_size: Optional[int] = None,
index 5daced6b32edaffdc5ddebcef34d524c1e5c26ea..82ad0e5625a794c05481bbeb9413b749fb74ef46 100644 (file)
@@ -9,9 +9,8 @@ import logging
 from abc import ABC, abstractmethod
 from time import monotonic
 from types import TracebackType
-from typing import Any, AsyncIterator, Awaitable, Callable, cast, Generic
-from typing import Dict, List, Optional, overload, Sequence, Type, TypeVar, Union
-from typing_extensions import TypeAlias
+from typing import Any, AsyncIterator, cast, Generic
+from typing import Dict, List, Optional, overload, Sequence, Type, TypeVar
 from asyncio import create_task, Task
 from weakref import ref
 from contextlib import asynccontextmanager
@@ -21,6 +20,7 @@ from psycopg import AsyncConnection
 from psycopg.pq import TransactionStatus
 from psycopg.rows import TupleRow
 
+from .abc import ACT, AsyncConnectionCB, AsyncConnectFailedCB
 from .base import ConnectionAttempt, BasePool
 from .errors import PoolClosed, PoolTimeout, TooManyRequests
 from ._compat import Deque
@@ -28,13 +28,6 @@ from .sched_async import AsyncScheduler
 
 logger = logging.getLogger("psycopg.pool")
 
-AsyncConnectFailedCB: TypeAlias = Union[
-    Callable[["AsyncConnectionPool"], None],
-    Callable[["AsyncConnectionPool"], Awaitable[None]],
-]
-
-ACT = TypeVar("ACT", bound="AsyncConnection[Any]")
-
 
 class AsyncConnectionPool(Generic[ACT], BasePool):
     _Self = TypeVar("_Self", bound="AsyncConnectionPool[ACT]")
@@ -46,8 +39,8 @@ class AsyncConnectionPool(Generic[ACT], BasePool):
         conninfo: str = "",
         *,
         open: bool = ...,
-        configure: Optional[Callable[[ACT], Awaitable[None]]] = ...,
-        reset: Optional[Callable[[ACT], Awaitable[None]]] = ...,
+        configure: Optional[AsyncConnectionCB[ACT]] = ...,
+        reset: Optional[AsyncConnectionCB[ACT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -69,8 +62,8 @@ class AsyncConnectionPool(Generic[ACT], BasePool):
         *,
         open: bool = ...,
         connection_class: Type[ACT],
-        configure: Optional[Callable[[ACT], Awaitable[None]]] = ...,
-        reset: Optional[Callable[[ACT], Awaitable[None]]] = ...,
+        configure: Optional[AsyncConnectionCB[ACT]] = ...,
+        reset: Optional[AsyncConnectionCB[ACT]] = ...,
         kwargs: Optional[Dict[str, Any]] = ...,
         min_size: int = ...,
         max_size: Optional[int] = ...,
@@ -91,8 +84,8 @@ class AsyncConnectionPool(Generic[ACT], BasePool):
         *,
         open: bool = True,
         connection_class: Type[ACT] = cast(Type[ACT], AsyncConnection),
-        configure: Optional[Callable[[ACT], Awaitable[None]]] = None,
-        reset: Optional[Callable[[ACT], Awaitable[None]]] = None,
+        configure: Optional[AsyncConnectionCB[ACT]] = None,
+        reset: Optional[AsyncConnectionCB[ACT]] = None,
         kwargs: Optional[Dict[str, Any]] = None,
         min_size: int = 4,
         max_size: Optional[int] = None,