]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix: add prod() implementation for Python 3.7
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 31 Aug 2022 09:40:44 +0000 (10:40 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 10 Dec 2022 13:01:55 +0000 (13:01 +0000)
psycopg/psycopg/_compat.py
psycopg/psycopg/types/array.py
tests/types/test_array.py

index 66d1c8392cc1bcb1b3e1aae76c39dc8d872fb60b..91c87b8d2ab5af4477b85073236aa9f836072109 100644 (file)
@@ -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",
 ]
index e128ea60bba327618e41fade0fa5938a8efbc8dc..47290cdf448190db7ac27d93a6df2c61d9f9839f 100644 (file)
@@ -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
index 0d80152b8367034fe5249c8c868b489d2ba9e303..11996ad54553449f01d16ef8d6971ffc66812a33 100644 (file)
@@ -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