From 054e7a0a43a7c2d2c192409dd2ecd3b3bbf7e6d0 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Wed, 31 Aug 2022 10:40:44 +0100 Subject: [PATCH] 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 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 -- 2.47.3