psycopg.git / summary / log / commit / refs
commit 054e7a0a43a7c2d2c192409dd2ecd3b3bbf7e6d0
Author: Daniele Varrazzo <daniele.varrazzo@gmail.com>
Date: Wed Aug 31 09:40:44 2022 +0000
fix: add prod() implementation for Python 3.7
psycopg/psycopg/_compat.py | 9 ++++++++-
psycopg/psycopg/types/array.py | 3 +--
tests/types/test_array.py | 2 +-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/psycopg/psycopg/_compat.py b/psycopg/psycopg/_compat.py
index 66d1c839..91c87b8d 100644
--- a/psycopg/psycopg/_compat.py
+++ b/psycopg/psycopg/_compat.py
@@ -6,7 +6,7 @@ compatibility functions for different Python versions
import sys
import asyncio
-from typing import Any, Awaitable, Generator, Optional, Union, TypeVar
+from typing import Any, Awaitable, Generator, Optional, Sequence, Union, TypeVar
if sys.version_info >= (3, 8):
from typing import Protocol
@@ -18,6 +18,7 @@ FutureT: "TypeAlias" = Union["asyncio.Future[T]", Generator[Any, None, T], Await
if sys.version_info >= (3, 8):
create_task = asyncio.create_task
+ from math import prod
else:
@@ -26,6 +27,11 @@ else:
) -> "asyncio.Future[T]":
return asyncio.create_task(coro)
+ from functools import reduce
+
+ def prod(seq: Sequence[int]) -> int:
+ return reduce(int.__mul__, seq, 1)
+
if sys.version_info >= (3, 9):
from zoneinfo import ZoneInfo
@@ -58,4 +64,5 @@ __all__ = [
"ZoneInfo",
"cache",
"create_task",
+ "prod",
]
diff --git a/psycopg/psycopg/types/array.py b/psycopg/psycopg/types/array.py
index e128ea60..47290cdf 100644
--- a/psycopg/psycopg/types/array.py
+++ b/psycopg/psycopg/types/array.py
@@ -6,7 +6,6 @@ Adapters for arrays
import re
import struct
-from math import prod
from typing import Any, cast, Callable, List, Optional, Pattern, Set, Tuple, Type
from .. import pq
@@ -14,7 +13,7 @@ from .. import errors as e
from .. import postgres
from ..abc import AdaptContext, Buffer, Dumper, DumperKey, NoneType, LoadFunc
from ..adapt import RecursiveDumper, RecursiveLoader, PyFormat
-from .._compat import cache
+from .._compat import cache, prod
from .._struct import pack_len, unpack_len
from ..postgres import TEXT_OID, INVALID_OID
from .._typeinfo import TypeInfo
diff --git a/tests/types/test_array.py b/tests/types/test_array.py
index 0d80152b..11996ad5 100644
--- a/tests/types/test_array.py
+++ b/tests/types/test_array.py
@@ -1,4 +1,3 @@
-from math import prod
from typing import List, Any
from decimal import Decimal
@@ -9,6 +8,7 @@ from psycopg import pq
from psycopg import sql
from psycopg.adapt import PyFormat, Transformer, Dumper
from psycopg.types import TypeInfo
+from psycopg._compat import prod
from psycopg.postgres import types as builtins
[parent: d870170fd463]