diff options
author | Andrew Morgan <andrew@amorgan.xyz> | 2023-03-09 15:12:26 +0000 |
---|---|---|
committer | Andrew Morgan <andrew@amorgan.xyz> | 2023-03-09 16:50:31 +0000 |
commit | 3dcc1efc431ca53945d574a5a8673c6494be9c8a (patch) | |
tree | 43aa826381207a59487071307e1ce0e7511bd5b7 | |
parent | Move callback-related code from the PasswordAuthProvider to its own class (diff) | |
download | synapse-github/anoa/module_api_callbacks_split.tar.xz |
Move callback-related code from AccountData to its own class github/anoa/module_api_callbacks_split anoa/module_api_callbacks_split
-rw-r--r-- | synapse/handlers/account_data.py | 19 | ||||
-rw-r--r-- | synapse/module_api/__init__.py | 8 | ||||
-rw-r--r-- | synapse/module_api/callbacks/__init__.py | 2 | ||||
-rw-r--r-- | synapse/module_api/callbacks/account_data_callbacks.py | 35 | ||||
-rw-r--r-- | tests/rest/client/test_account_data.py | 2 |
5 files changed, 45 insertions, 21 deletions
diff --git a/synapse/handlers/account_data.py b/synapse/handlers/account_data.py index 7e01c18c6c..a367e2a070 100644 --- a/synapse/handlers/account_data.py +++ b/synapse/handlers/account_data.py @@ -14,7 +14,7 @@ # limitations under the License. import logging import random -from typing import TYPE_CHECKING, Awaitable, Callable, List, Optional, Tuple +from typing import TYPE_CHECKING, List, Optional, Tuple from synapse.api.constants import AccountDataTypes from synapse.replication.http.account_data import ( @@ -33,10 +33,6 @@ if TYPE_CHECKING: logger = logging.getLogger(__name__) -ON_ACCOUNT_DATA_UPDATED_CALLBACK = Callable[ - [str, Optional[str], str, JsonDict], Awaitable -] - class AccountDataHandler: def __init__(self, hs: "HomeServer"): @@ -60,16 +56,7 @@ class AccountDataHandler: self._remove_tag_client = ReplicationRemoveTagRestServlet.make_client(hs) self._account_data_writers = hs.config.worker.writers.account_data - self._on_account_data_updated_callbacks: List[ - ON_ACCOUNT_DATA_UPDATED_CALLBACK - ] = [] - - def register_module_callbacks( - self, on_account_data_updated: Optional[ON_ACCOUNT_DATA_UPDATED_CALLBACK] = None - ) -> None: - """Register callbacks from modules.""" - if on_account_data_updated is not None: - self._on_account_data_updated_callbacks.append(on_account_data_updated) + self._module_api_callbacks = hs.get_module_api_callbacks().account_data async def _notify_modules( self, @@ -92,7 +79,7 @@ class AccountDataHandler: account_data_type: The type of the account data. content: The content that is now associated with this type. """ - for callback in self._on_account_data_updated_callbacks: + for callback in self._module_api_callbacks.on_account_data_updated_callbacks: try: await callback(user_id, room_id, account_data_type, content) except Exception as e: diff --git a/synapse/module_api/__init__.py b/synapse/module_api/__init__.py index 7d34f621f4..5c53487007 100644 --- a/synapse/module_api/__init__.py +++ b/synapse/module_api/__init__.py @@ -41,7 +41,6 @@ from synapse.api.errors import SynapseError from synapse.events import EventBase from synapse.events.presence_router import PresenceRouter from synapse.events.spamcheck import SpamChecker -from synapse.handlers.account_data import ON_ACCOUNT_DATA_UPDATED_CALLBACK from synapse.handlers.auth import AuthHandler from synapse.handlers.device import DeviceHandler from synapse.handlers.push_rules import RuleSpec, check_actions @@ -59,6 +58,9 @@ from synapse.logging.context import ( run_in_background, ) from synapse.metrics.background_process_metrics import run_as_background_process +from synapse.module_api.callbacks.account_data_callbacks import ( + ON_ACCOUNT_DATA_UPDATED_CALLBACK, +) from synapse.module_api.callbacks.account_validity_callbacks import ( IS_USER_EXPIRED_CALLBACK, ON_LEGACY_ADMIN_REQUEST, @@ -271,8 +273,6 @@ class ModuleApi: self._public_room_list_manager = PublicRoomListManager(hs) self._account_data_manager = AccountDataManager(hs) - self._account_data_handler = hs.get_account_data_handler() - ################################################################################# # The following methods should only be called during the module's initialisation. @@ -452,7 +452,7 @@ class ModuleApi: Added in Synapse 1.57.0. """ - return self._account_data_handler.register_module_callbacks( + return self._callbacks.account_data.register_callbacks( on_account_data_updated=on_account_data_updated, ) diff --git a/synapse/module_api/callbacks/__init__.py b/synapse/module_api/callbacks/__init__.py index add3f2938d..6419607f92 100644 --- a/synapse/module_api/callbacks/__init__.py +++ b/synapse/module_api/callbacks/__init__.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from .account_data_callbacks import AccountDataModuleApiCallbacks from .account_validity_callbacks import AccountValidityModuleApiCallbacks from .background_updater_callbacks import BackgroundUpdaterModuleApiCallbacks from .password_auth_provider_callbacks import PasswordAuthProviderModuleApiCallbacks @@ -26,6 +27,7 @@ __all__ = [ class ModuleApiCallbacks: def __init__(self) -> None: + self.account_data = AccountDataModuleApiCallbacks() self.account_validity = AccountValidityModuleApiCallbacks() self.background_updater = BackgroundUpdaterModuleApiCallbacks() self.password_auth_provider = PasswordAuthProviderModuleApiCallbacks() diff --git a/synapse/module_api/callbacks/account_data_callbacks.py b/synapse/module_api/callbacks/account_data_callbacks.py new file mode 100644 index 0000000000..3321fa185a --- /dev/null +++ b/synapse/module_api/callbacks/account_data_callbacks.py @@ -0,0 +1,35 @@ +# Copyright 2015, 2016 OpenMarket Ltd +# Copyright 2021, 2023 The Matrix.org Foundation C.I.C. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# 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 Awaitable, Callable, List, Optional + +from synapse.types import JsonDict + +ON_ACCOUNT_DATA_UPDATED_CALLBACK = Callable[ + [str, Optional[str], str, JsonDict], Awaitable +] + + +class AccountDataModuleApiCallbacks: + def __init__(self) -> None: + self.on_account_data_updated_callbacks: List[ + ON_ACCOUNT_DATA_UPDATED_CALLBACK + ] = [] + + def register_callbacks( + self, on_account_data_updated: Optional[ON_ACCOUNT_DATA_UPDATED_CALLBACK] = None + ) -> None: + """Register callbacks from modules.""" + if on_account_data_updated is not None: + self.on_account_data_updated_callbacks.append(on_account_data_updated) diff --git a/tests/rest/client/test_account_data.py b/tests/rest/client/test_account_data.py index d5b0640e7a..1ff8bb41d0 100644 --- a/tests/rest/client/test_account_data.py +++ b/tests/rest/client/test_account_data.py @@ -33,7 +33,7 @@ class AccountDataTestCase(unittest.HomeserverTestCase): a user's account data changes. """ mocked_callback = Mock(return_value=make_awaitable(None)) - self.hs.get_account_data_handler()._on_account_data_updated_callbacks.append( + self.hs.get_module_api_callbacks().account_data.on_account_data_updated_callbacks.append( mocked_callback ) |