Fix incorrect type hints for txredis. (#12042)

Some properties were marked as RedisProtocol instead of ConnectionHandler,
which wraps RedisProtocol instance(s).
code_spécifique_watcha
Patrick Cloke 3 years ago committed by GitHub
parent 26211fec24
commit d8bab6793c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      changelog.d/12042.misc
  2. 9
      stubs/txredisapi.pyi
  3. 4
      synapse/replication/tcp/external_cache.py
  4. 6
      synapse/replication/tcp/redis.py
  5. 4
      synapse/server.py

@ -0,0 +1 @@
Correct type hints for txredis.

@ -20,7 +20,7 @@ from twisted.internet import protocol
from twisted.internet.defer import Deferred from twisted.internet.defer import Deferred
class RedisProtocol(protocol.Protocol): class RedisProtocol(protocol.Protocol):
def publish(self, channel: str, message: bytes): ... def publish(self, channel: str, message: bytes) -> "Deferred[None]": ...
def ping(self) -> "Deferred[None]": ... def ping(self) -> "Deferred[None]": ...
def set( def set(
self, self,
@ -52,11 +52,14 @@ def lazyConnection(
convertNumbers: bool = ..., convertNumbers: bool = ...,
) -> RedisProtocol: ... ) -> RedisProtocol: ...
class ConnectionHandler: ... # ConnectionHandler doesn't actually inherit from RedisProtocol, but it proxies
# most methods to it via ConnectionHandler.__getattr__.
class ConnectionHandler(RedisProtocol):
def disconnect(self) -> "Deferred[None]": ...
class RedisFactory(protocol.ReconnectingClientFactory): class RedisFactory(protocol.ReconnectingClientFactory):
continueTrying: bool continueTrying: bool
handler: RedisProtocol handler: ConnectionHandler
pool: List[RedisProtocol] pool: List[RedisProtocol]
replyTimeout: Optional[int] replyTimeout: Optional[int]
def __init__( def __init__(

@ -21,7 +21,7 @@ from synapse.logging.context import make_deferred_yieldable
from synapse.util import json_decoder, json_encoder from synapse.util import json_decoder, json_encoder
if TYPE_CHECKING: if TYPE_CHECKING:
from txredisapi import RedisProtocol from txredisapi import ConnectionHandler
from synapse.server import HomeServer from synapse.server import HomeServer
@ -63,7 +63,7 @@ class ExternalCache:
def __init__(self, hs: "HomeServer"): def __init__(self, hs: "HomeServer"):
if hs.config.redis.redis_enabled: if hs.config.redis.redis_enabled:
self._redis_connection: Optional[ self._redis_connection: Optional[
"RedisProtocol" "ConnectionHandler"
] = hs.get_outbound_redis_connection() ] = hs.get_outbound_redis_connection()
else: else:
self._redis_connection = None self._redis_connection = None

@ -93,7 +93,7 @@ class RedisSubscriber(txredisapi.SubscriberProtocol):
synapse_handler: "ReplicationCommandHandler" synapse_handler: "ReplicationCommandHandler"
synapse_stream_name: str synapse_stream_name: str
synapse_outbound_redis_connection: txredisapi.RedisProtocol synapse_outbound_redis_connection: txredisapi.ConnectionHandler
def __init__(self, *args: Any, **kwargs: Any): def __init__(self, *args: Any, **kwargs: Any):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -313,7 +313,7 @@ class RedisDirectTcpReplicationClientFactory(SynapseRedisFactory):
protocol = RedisSubscriber protocol = RedisSubscriber
def __init__( def __init__(
self, hs: "HomeServer", outbound_redis_connection: txredisapi.RedisProtocol self, hs: "HomeServer", outbound_redis_connection: txredisapi.ConnectionHandler
): ):
super().__init__( super().__init__(
@ -353,7 +353,7 @@ def lazyConnection(
reconnect: bool = True, reconnect: bool = True,
password: Optional[str] = None, password: Optional[str] = None,
replyTimeout: int = 30, replyTimeout: int = 30,
) -> txredisapi.RedisProtocol: ) -> txredisapi.ConnectionHandler:
"""Creates a connection to Redis that is lazily set up and reconnects if the """Creates a connection to Redis that is lazily set up and reconnects if the
connections is lost. connections is lost.
""" """

@ -145,7 +145,7 @@ from synapse.util.stringutils import random_string
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
if TYPE_CHECKING: if TYPE_CHECKING:
from txredisapi import RedisProtocol from txredisapi import ConnectionHandler
from synapse.handlers.oidc import OidcHandler from synapse.handlers.oidc import OidcHandler
from synapse.handlers.saml import SamlHandler from synapse.handlers.saml import SamlHandler
@ -807,7 +807,7 @@ class HomeServer(metaclass=abc.ABCMeta):
return AccountHandler(self) return AccountHandler(self)
@cache_in_self @cache_in_self
def get_outbound_redis_connection(self) -> "RedisProtocol": def get_outbound_redis_connection(self) -> "ConnectionHandler":
""" """
The Redis connection used for replication. The Redis connection used for replication.

Loading…
Cancel
Save