Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Fix incorrect type hints for txredis. (#12042)
Browse files Browse the repository at this point in the history
Some properties were marked as RedisProtocol instead of ConnectionHandler,
which wraps RedisProtocol instance(s).
  • Loading branch information
clokep authored Mar 8, 2022
1 parent 26211fe commit d8bab67
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 10 deletions.
1 change: 1 addition & 0 deletions changelog.d/12042.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Correct type hints for txredis.
9 changes: 6 additions & 3 deletions stubs/txredisapi.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ from twisted.internet import protocol
from twisted.internet.defer import Deferred

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 set(
self,
Expand Down Expand Up @@ -52,11 +52,14 @@ def lazyConnection(
convertNumbers: bool = ...,
) -> 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):
continueTrying: bool
handler: RedisProtocol
handler: ConnectionHandler
pool: List[RedisProtocol]
replyTimeout: Optional[int]
def __init__(
Expand Down
4 changes: 2 additions & 2 deletions synapse/replication/tcp/external_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from synapse.util import json_decoder, json_encoder

if TYPE_CHECKING:
from txredisapi import RedisProtocol
from txredisapi import ConnectionHandler

from synapse.server import HomeServer

Expand Down Expand Up @@ -63,7 +63,7 @@ class ExternalCache:
def __init__(self, hs: "HomeServer"):
if hs.config.redis.redis_enabled:
self._redis_connection: Optional[
"RedisProtocol"
"ConnectionHandler"
] = hs.get_outbound_redis_connection()
else:
self._redis_connection = None
Expand Down
6 changes: 3 additions & 3 deletions synapse/replication/tcp/redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class RedisSubscriber(txredisapi.SubscriberProtocol):

synapse_handler: "ReplicationCommandHandler"
synapse_stream_name: str
synapse_outbound_redis_connection: txredisapi.RedisProtocol
synapse_outbound_redis_connection: txredisapi.ConnectionHandler

def __init__(self, *args: Any, **kwargs: Any):
super().__init__(*args, **kwargs)
Expand Down Expand Up @@ -313,7 +313,7 @@ class RedisDirectTcpReplicationClientFactory(SynapseRedisFactory):
protocol = RedisSubscriber

def __init__(
self, hs: "HomeServer", outbound_redis_connection: txredisapi.RedisProtocol
self, hs: "HomeServer", outbound_redis_connection: txredisapi.ConnectionHandler
):

super().__init__(
Expand Down Expand Up @@ -353,7 +353,7 @@ def lazyConnection(
reconnect: bool = True,
password: Optional[str] = None,
replyTimeout: int = 30,
) -> txredisapi.RedisProtocol:
) -> txredisapi.ConnectionHandler:
"""Creates a connection to Redis that is lazily set up and reconnects if the
connections is lost.
"""
Expand Down
4 changes: 2 additions & 2 deletions synapse/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@
logger = logging.getLogger(__name__)

if TYPE_CHECKING:
from txredisapi import RedisProtocol
from txredisapi import ConnectionHandler

from synapse.handlers.oidc import OidcHandler
from synapse.handlers.saml import SamlHandler
Expand Down Expand Up @@ -807,7 +807,7 @@ def get_account_handler(self) -> AccountHandler:
return AccountHandler(self)

@cache_in_self
def get_outbound_redis_connection(self) -> "RedisProtocol":
def get_outbound_redis_connection(self) -> "ConnectionHandler":
"""
The Redis connection used for replication.
Expand Down

0 comments on commit d8bab67

Please sign in to comment.