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

Add type hints to some handlers #8505

Merged
merged 6 commits into from
Oct 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/8505.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add type hints to various parts of the code base.
5 changes: 5 additions & 0 deletions mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@ files =
synapse/events/builder.py,
synapse/events/spamcheck.py,
synapse/federation,
synapse/handlers/account_data.py,
synapse/handlers/auth.py,
synapse/handlers/cas_handler.py,
synapse/handlers/deactivate_account.py,
synapse/handlers/device.py,
synapse/handlers/devicemessage.py,
synapse/handlers/directory.py,
synapse/handlers/events.py,
synapse/handlers/federation.py,
Expand All @@ -26,7 +29,9 @@ files =
synapse/handlers/message.py,
synapse/handlers/oidc_handler.py,
synapse/handlers/pagination.py,
synapse/handlers/password_policy.py,
synapse/handlers/presence.py,
synapse/handlers/read_marker.py,
synapse/handlers/room.py,
synapse/handlers/room_member.py,
synapse/handlers/room_member_worker.py,
Expand Down
2 changes: 1 addition & 1 deletion synapse/federation/federation_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -861,7 +861,7 @@ def __init__(self, hs: "HomeServer"):
self._edu_type_to_instance = {} # type: Dict[str, str]

def register_edu_handler(
self, edu_type: str, handler: Callable[[str, dict], Awaitable[None]]
self, edu_type: str, handler: Callable[[str, JsonDict], Awaitable[None]]
):
"""Sets the handler callable that will be used to handle an incoming
federation EDU of the given type.
Expand Down
14 changes: 11 additions & 3 deletions synapse/handlers/account_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,24 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import TYPE_CHECKING, List, Tuple

from synapse.types import JsonDict, UserID

if TYPE_CHECKING:
from synapse.app.homeserver import HomeServer


class AccountDataEventSource:
def __init__(self, hs):
def __init__(self, hs: "HomeServer"):
self.store = hs.get_datastore()

def get_current_key(self, direction="f"):
def get_current_key(self, direction: str = "f") -> int:
return self.store.get_max_account_data_stream_id()

async def get_new_events(self, user, from_key, **kwargs):
async def get_new_events(
self, user: UserID, from_key: int, **kwargs
) -> Tuple[List[JsonDict], int]:
user_id = user.to_string()
last_stream_id = from_key

Expand Down
9 changes: 6 additions & 3 deletions synapse/handlers/deactivate_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,24 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
from typing import Optional
from typing import TYPE_CHECKING, Optional

from synapse.api.errors import SynapseError
from synapse.metrics.background_process_metrics import run_as_background_process
from synapse.types import UserID, create_requester

from ._base import BaseHandler

if TYPE_CHECKING:
from synapse.app.homeserver import HomeServer

logger = logging.getLogger(__name__)


class DeactivateAccountHandler(BaseHandler):
"""Handler which deals with deactivating user accounts."""

def __init__(self, hs):
def __init__(self, hs: "HomeServer"):
super().__init__(hs)
self.hs = hs
self._auth_handler = hs.get_auth_handler()
Expand Down Expand Up @@ -137,7 +140,7 @@ async def deactivate_account(

return identity_server_supports_unbinding

async def _reject_pending_invites_for_user(self, user_id: str):
async def _reject_pending_invites_for_user(self, user_id: str) -> None:
"""Reject pending invites addressed to a given user ID.

Args:
Expand Down
25 changes: 17 additions & 8 deletions synapse/handlers/devicemessage.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# limitations under the License.

import logging
from typing import Any, Dict
from typing import TYPE_CHECKING, Any, Dict

from synapse.api.errors import SynapseError
from synapse.logging.context import run_in_background
Expand All @@ -24,18 +24,22 @@
set_tag,
start_active_span,
)
from synapse.types import UserID, get_domain_from_id
from synapse.types import JsonDict, UserID, get_domain_from_id
from synapse.util import json_encoder
from synapse.util.stringutils import random_string

if TYPE_CHECKING:
from synapse.app.homeserver import HomeServer


logger = logging.getLogger(__name__)


class DeviceMessageHandler:
def __init__(self, hs):
def __init__(self, hs: "HomeServer"):
"""
Args:
hs (synapse.server.HomeServer): server
hs: server
"""
self.store = hs.get_datastore()
self.notifier = hs.get_notifier()
Expand All @@ -48,7 +52,7 @@ def __init__(self, hs):

self._device_list_updater = hs.get_device_handler().device_list_updater

async def on_direct_to_device_edu(self, origin, content):
async def on_direct_to_device_edu(self, origin: str, content: JsonDict) -> None:
local_messages = {}
sender_user_id = content["sender"]
if origin != get_domain_from_id(sender_user_id):
Expand Down Expand Up @@ -95,7 +99,7 @@ async def _check_for_unknown_devices(
message_type: str,
sender_user_id: str,
by_device: Dict[str, Dict[str, Any]],
):
) -> None:
"""Checks inbound device messages for unknown remote devices, and if
found marks the remote cache for the user as stale.
"""
Expand Down Expand Up @@ -138,11 +142,16 @@ async def _check_for_unknown_devices(
self._device_list_updater.user_device_resync, sender_user_id
)

async def send_device_message(self, sender_user_id, message_type, messages):
async def send_device_message(
self,
sender_user_id: str,
message_type: str,
messages: Dict[str, Dict[str, JsonDict]],
) -> None:
set_tag("number_of_messages", len(messages))
set_tag("sender", sender_user_id)
local_messages = {}
remote_messages = {}
remote_messages = {} # type: Dict[str, Dict[str, Dict[str, JsonDict]]]
for user_id, by_device in messages.items():
# we use UserID.from_string to catch invalid user ids
if self.is_mine(UserID.from_string(user_id)):
Expand Down
10 changes: 7 additions & 3 deletions synapse/handlers/password_policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@

import logging
import re
from typing import TYPE_CHECKING

from synapse.api.errors import Codes, PasswordRefusedError

if TYPE_CHECKING:
from synapse.app.homeserver import HomeServer

logger = logging.getLogger(__name__)


class PasswordPolicyHandler:
def __init__(self, hs):
def __init__(self, hs: "HomeServer"):
self.policy = hs.config.password_policy
self.enabled = hs.config.password_policy_enabled

Expand All @@ -33,11 +37,11 @@ def __init__(self, hs):
self.regexp_uppercase = re.compile("[A-Z]")
self.regexp_lowercase = re.compile("[a-z]")

def validate_password(self, password):
def validate_password(self, password: str) -> None:
"""Checks whether a given password complies with the server's policy.

Args:
password (str): The password to check against the server's policy.
password: The password to check against the server's policy.

Raises:
PasswordRefusedError: The password doesn't comply with the server's policy.
Expand Down
10 changes: 8 additions & 2 deletions synapse/handlers/read_marker.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,29 @@
# limitations under the License.

import logging
from typing import TYPE_CHECKING

from synapse.util.async_helpers import Linearizer

from ._base import BaseHandler

if TYPE_CHECKING:
from synapse.app.homeserver import HomeServer

logger = logging.getLogger(__name__)


class ReadMarkerHandler(BaseHandler):
def __init__(self, hs):
def __init__(self, hs: "HomeServer"):
super().__init__(hs)
self.server_name = hs.config.server_name
self.store = hs.get_datastore()
self.read_marker_linearizer = Linearizer(name="read_marker")
self.notifier = hs.get_notifier()

async def received_client_read_marker(self, room_id, user_id, event_id):
async def received_client_read_marker(
self, room_id: str, user_id: str, event_id: str
) -> None:
"""Updates the read marker for a given user in a given room if the event ID given
is ahead in the stream relative to the current read marker.

Expand Down
2 changes: 1 addition & 1 deletion synapse/notifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ def on_new_event(
self,
stream_key: str,
new_token: Union[int, RoomStreamToken],
users: Collection[UserID] = [],
users: Collection[Union[str, UserID]] = [],
rooms: Collection[str] = [],
):
""" Used to inform listeners that something has happened event wise.
Expand Down
4 changes: 3 additions & 1 deletion synapse/storage/databases/main/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -1220,7 +1220,9 @@ async def record_user_external_id(
desc="record_user_external_id",
)

async def user_set_password_hash(self, user_id: str, password_hash: str) -> None:
async def user_set_password_hash(
self, user_id: str, password_hash: Optional[str]
) -> None:
"""
NB. This does *not* evict any cache because the one use for this
removes most of the entries subsequently anyway so it would be
Expand Down