Improve type annotations for `execute_values`. (#12311)

pull/12315/head
reivilibre 2022-03-28 17:21:23 +01:00 committed by GitHub
parent a4643a685c
commit 89f11f8c6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 10 deletions

1
changelog.d/12311.misc Normal file
View File

@ -0,0 +1 @@
Improve type annotations for `execute_values`.

View File

@ -290,11 +290,15 @@ class LoggingTransaction:
if isinstance(self.database_engine, PostgresEngine):
from psycopg2.extras import execute_batch
self._do_execute(lambda *x: execute_batch(self.txn, *x), sql, args)
self._do_execute(
lambda the_sql: execute_batch(self.txn, the_sql, args), sql
)
else:
self.executemany(sql, args)
def execute_values(self, sql: str, *args: Any, fetch: bool = True) -> List[Tuple]:
def execute_values(
self, sql: str, values: Iterable[Iterable[Any]], fetch: bool = True
) -> List[Tuple]:
"""Corresponds to psycopg2.extras.execute_values. Only available when
using postgres.
@ -305,15 +309,8 @@ class LoggingTransaction:
from psycopg2.extras import execute_values
return self._do_execute(
# Type ignore: mypy is unhappy because if `x` is a 5-tuple, then there will
# be two values for `fetch`: one given positionally, and another given
# as a keyword argument. We might be able to fix this by
# - propagating the signature of psycopg2.extras.execute_values to this
# function, or
# - changing `*args: Any` to `values: T` for some appropriate T.
lambda *x: execute_values(self.txn, *x, fetch=fetch), # type: ignore[misc]
lambda the_sql: execute_values(self.txn, the_sql, values, fetch=fetch),
sql,
*args,
)
def execute(self, sql: str, *args: Any) -> None: