forked from MirrorHub/synapse
Use psycopg2 type stubs (#12269)
This commit is contained in:
parent
c5776780f0
commit
f4c5e5864c
4 changed files with 14 additions and 4 deletions
1
changelog.d/12269.misc
Normal file
1
changelog.d/12269.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Use type stubs for `psycopg2`.
|
1
setup.py
1
setup.py
|
@ -108,6 +108,7 @@ CONDITIONAL_REQUIREMENTS["mypy"] = [
|
||||||
"types-jsonschema>=3.2.0",
|
"types-jsonschema>=3.2.0",
|
||||||
"types-opentracing>=2.4.2",
|
"types-opentracing>=2.4.2",
|
||||||
"types-Pillow>=8.3.4",
|
"types-Pillow>=8.3.4",
|
||||||
|
"types-psycopg2>=2.9.9",
|
||||||
"types-pyOpenSSL>=20.0.7",
|
"types-pyOpenSSL>=20.0.7",
|
||||||
"types-PyYAML>=5.4.10",
|
"types-PyYAML>=5.4.10",
|
||||||
"types-requests>=2.26.0",
|
"types-requests>=2.26.0",
|
||||||
|
|
|
@ -288,7 +288,7 @@ class LoggingTransaction:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if isinstance(self.database_engine, PostgresEngine):
|
if isinstance(self.database_engine, PostgresEngine):
|
||||||
from psycopg2.extras import execute_batch # type: ignore
|
from psycopg2.extras import execute_batch
|
||||||
|
|
||||||
self._do_execute(lambda *x: execute_batch(self.txn, *x), sql, args)
|
self._do_execute(lambda *x: execute_batch(self.txn, *x), sql, args)
|
||||||
else:
|
else:
|
||||||
|
@ -302,10 +302,18 @@ class LoggingTransaction:
|
||||||
rows (e.g. INSERTs).
|
rows (e.g. INSERTs).
|
||||||
"""
|
"""
|
||||||
assert isinstance(self.database_engine, PostgresEngine)
|
assert isinstance(self.database_engine, PostgresEngine)
|
||||||
from psycopg2.extras import execute_values # type: ignore
|
from psycopg2.extras import execute_values
|
||||||
|
|
||||||
return self._do_execute(
|
return self._do_execute(
|
||||||
lambda *x: execute_values(self.txn, *x, fetch=fetch), sql, *args
|
# 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]
|
||||||
|
sql,
|
||||||
|
*args,
|
||||||
)
|
)
|
||||||
|
|
||||||
def execute(self, sql: str, *args: Any) -> None:
|
def execute(self, sql: str, *args: Any) -> None:
|
||||||
|
|
|
@ -27,7 +27,7 @@ def create_engine(database_config) -> BaseDatabaseEngine:
|
||||||
|
|
||||||
if name == "psycopg2":
|
if name == "psycopg2":
|
||||||
# Note that psycopg2cffi-compat provides the psycopg2 module on pypy.
|
# Note that psycopg2cffi-compat provides the psycopg2 module on pypy.
|
||||||
import psycopg2 # type: ignore
|
import psycopg2
|
||||||
|
|
||||||
return PostgresEngine(psycopg2, database_config)
|
return PostgresEngine(psycopg2, database_config)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue