type-hint HomeserverTestcase.setup_test_homeserver (#10961)

* type-hint `HomeserverTestcase.setup_test_homeserver`

For better IDE completion. A small drive-by.
This commit is contained in:
David Robertson 2021-10-01 12:22:47 +01:00 committed by GitHub
parent 7e440520c9
commit e46ac85d67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 9 deletions

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

@ -0,0 +1 @@
Add type-hint to `HomeserverTestcase.setup_test_homeserver`.

View File

@ -70,8 +70,16 @@ class BaseStreamTestCase(unittest.HomeserverTestCase):
# databases objects are the same. # databases objects are the same.
self.worker_hs.get_datastore().db_pool = hs.get_datastore().db_pool self.worker_hs.get_datastore().db_pool = hs.get_datastore().db_pool
# Normally we'd pass in the handler to `setup_test_homeserver`, which would
# eventually hit "Install @cache_in_self attributes" in tests/utils.py.
# Unfortunately our handler wants a reference to the homeserver. That leaves
# us with a chicken-and-egg problem.
# We can workaround this: create the homeserver first, create the handler
# and bodge it in after the fact. The bodging requires us to know the
# dirty details of how `cache_in_self` works. We politely ask mypy to
# ignore our dirty dealings.
self.test_handler = self._build_replication_data_handler() self.test_handler = self._build_replication_data_handler()
self.worker_hs._replication_data_handler = self.test_handler self.worker_hs._replication_data_handler = self.test_handler # type: ignore[attr-defined]
repl_handler = ReplicationCommandHandler(self.worker_hs) repl_handler = ReplicationCommandHandler(self.worker_hs)
self.client = ClientReplicationStreamProtocol( self.client = ClientReplicationStreamProtocol(
@ -315,12 +323,15 @@ class BaseMultiWorkerStreamTestCase(unittest.HomeserverTestCase):
) )
) )
# Copy the port into a new, non-Optional variable so mypy knows we're
# not going to reset `instance_loc` to `None` under its feet. See
# https://mypy.readthedocs.io/en/latest/common_issues.html#narrowing-and-inner-functions
port = instance_loc.port
self.reactor.add_tcp_client_callback( self.reactor.add_tcp_client_callback(
self.reactor.lookups[instance_loc.host], self.reactor.lookups[instance_loc.host],
instance_loc.port, instance_loc.port,
lambda: self._handle_http_replication_attempt( lambda: self._handle_http_replication_attempt(worker_hs, port),
worker_hs, instance_loc.port
),
) )
store = worker_hs.get_datastore() store = worker_hs.get_datastore()

View File

@ -94,9 +94,9 @@ class LoginRestServletTestCase(unittest.HomeserverTestCase):
def make_homeserver(self, reactor, clock): def make_homeserver(self, reactor, clock):
self.hs = self.setup_test_homeserver() self.hs = self.setup_test_homeserver()
self.hs.config.enable_registration = True self.hs.config.registration.enable_registration = True
self.hs.config.registrations_require_3pid = [] self.hs.config.registration.registrations_require_3pid = []
self.hs.config.auto_join_rooms = [] self.hs.config.registration.auto_join_rooms = []
self.hs.config.captcha.enable_registration_captcha = False self.hs.config.captcha.enable_registration_captcha = False
return self.hs return self.hs

View File

@ -20,7 +20,7 @@ import inspect
import logging import logging
import secrets import secrets
import time import time
from typing import Callable, Dict, Iterable, Optional, Tuple, Type, TypeVar, Union from typing import Any, Callable, Dict, Iterable, Optional, Tuple, Type, TypeVar, Union
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from canonicaljson import json from canonicaljson import json
@ -449,7 +449,7 @@ class HomeserverTestCase(TestCase):
client_ip, client_ip,
) )
def setup_test_homeserver(self, *args, **kwargs): def setup_test_homeserver(self, *args: Any, **kwargs: Any) -> HomeServer:
""" """
Set up the test homeserver, meant to be called by the overridable Set up the test homeserver, meant to be called by the overridable
make_homeserver. It automatically passes through the test class's make_homeserver. It automatically passes through the test class's