From: Daniele Varrazzo Date: Wed, 31 Aug 2022 09:40:44 +0000 (+0100) Subject: fix: add prod() implementation for Python 3.7 X-Git-Tag: 3.1.5~12^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=054e7a0a43a7c2d2c192409dd2ecd3b3bbf7e6d0;p=thirdparty%2Fpsycopg.git fix: add prod() implementation for Python 3.7 --- diff --git a/psycopg/psycopg/_compat.py b/psycopg/psycopg/_compat.py index 66d1c8392..91c87b8d2 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 e128ea60b..47290cdf4 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 0d80152b8..11996ad54 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