]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Add psycopg_pool._compat module.
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 13 Nov 2021 22:41:42 +0000 (23:41 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 13 Nov 2021 22:41:42 +0000 (23:41 +0100)
Using psycopg._compat creates an unwanted coupling between the modules.
As it is now psycopg_pool 3.0.1 is not compatible with psycopg < 3.0.3
because of the dependency on Deque added in 1a5b09b2.

psycopg/psycopg/_compat.py
psycopg_pool/psycopg_pool/_compat.py [new file with mode: 0644]
psycopg_pool/psycopg_pool/base.py
psycopg_pool/psycopg_pool/pool.py
psycopg_pool/psycopg_pool/pool_async.py

index 0576b71ad6bdac45f7684e888d7c2a2f413b89bb..226da669d057d14840762439a7965d71fbb0299d 100644 (file)
@@ -29,7 +29,6 @@ else:
 
 if sys.version_info >= (3, 8):
     create_task = asyncio.create_task
-    Task = asyncio.Task
 
 elif sys.version_info >= (3, 7):
 
@@ -38,7 +37,6 @@ elif sys.version_info >= (3, 7):
     ) -> "asyncio.Future[T]":
         return asyncio.create_task(coro)
 
-    Task = asyncio.Future
 
 else:
 
@@ -47,7 +45,6 @@ else:
     ) -> "asyncio.Future[T]":
         return asyncio.ensure_future(coro)
 
-    Task = asyncio.Future
 
 if sys.version_info >= (3, 9):
     from zoneinfo import ZoneInfo
diff --git a/psycopg_pool/psycopg_pool/_compat.py b/psycopg_pool/psycopg_pool/_compat.py
new file mode 100644 (file)
index 0000000..d91ca7b
--- /dev/null
@@ -0,0 +1,60 @@
+"""
+compatibility functions for different Python versions
+"""
+
+# Copyright (C) 2021 The Psycopg Team
+
+import sys
+import asyncio
+from typing import Any, Awaitable, Generator, Optional, Union, TypeVar
+
+T = TypeVar("T")
+FutureT = Union["asyncio.Future[T]", Generator[Any, None, T], Awaitable[T]]
+
+if sys.version_info >= (3, 7):
+    from contextlib import asynccontextmanager
+else:
+
+    def asynccontextmanager(func):
+        def helper(*args, **kwds):
+            raise NotImplementedError(
+                "async pool not implemented on Python 3.6"
+            )
+
+        return helper
+
+
+if sys.version_info >= (3, 8):
+    create_task = asyncio.create_task
+    Task = asyncio.Task
+
+elif sys.version_info >= (3, 7):
+
+    def create_task(
+        coro: FutureT[T], name: Optional[str] = None
+    ) -> "asyncio.Future[T]":
+        return asyncio.create_task(coro)
+
+    Task = asyncio.Future
+
+else:
+
+    def create_task(
+        coro: FutureT[T], name: Optional[str] = None
+    ) -> "asyncio.Future[T]":
+        return asyncio.ensure_future(coro)
+
+    Task = asyncio.Future
+
+if sys.version_info >= (3, 9):
+    from collections import Counter, deque as Deque
+else:
+    from typing import Counter, Deque
+
+__all__ = [
+    "Counter",
+    "Deque",
+    "Task",
+    "asynccontextmanager",
+    "create_task",
+]
index afb4bc533318579610b65c27c29777856b82e128..160221507353cea71a987770139115bee4f920e6 100644 (file)
@@ -8,7 +8,8 @@ from random import random
 from typing import Any, Callable, Dict, Generic, Optional
 
 from psycopg.abc import ConnectionType
-from psycopg._compat import Counter, Deque
+
+from ._compat import Counter, Deque
 
 
 class BasePool(Generic[ConnectionType]):
index 74dda9e7a56f13c5a890611fa7eb23b8de5afc41..dcbcde02ac547a3af78ec60753cf8a02b572d814 100644 (file)
@@ -18,11 +18,11 @@ from contextlib import contextmanager
 from psycopg import errors as e
 from psycopg import Connection
 from psycopg.pq import TransactionStatus
-from psycopg._compat import Deque
 
 from .base import ConnectionAttempt, BasePool
 from .sched import Scheduler
 from .errors import PoolClosed, PoolTimeout, TooManyRequests
+from ._compat import Deque
 
 logger = logging.getLogger("psycopg.pool")
 
index f1da22240afd0a334a558d8bd4f67ca83177422d..80dc00f833284ed581dba705f8a899591fd6de36 100644 (file)
@@ -16,12 +16,12 @@ from weakref import ref
 
 from psycopg import errors as e
 from psycopg.pq import TransactionStatus
-from psycopg._compat import Task, asynccontextmanager, create_task, Deque
 from psycopg.connection_async import AsyncConnection
 
 from .base import ConnectionAttempt, BasePool
 from .sched import AsyncScheduler
 from .errors import PoolClosed, PoolTimeout, TooManyRequests
+from ._compat import Task, asynccontextmanager, create_task, Deque
 
 logger = logging.getLogger("psycopg.pool")