From 5a9ca1e3d9e2186afa3e2c2657e1f2d2f4ad1bd6 Mon Sep 17 00:00:00 2001 From: Eric Eastwood Date: Mon, 22 Sep 2025 10:27:59 -0500 Subject: [PATCH] Introduce `Clock.call_when_running(...)` to include logcontext by default (#18944) Introduce `Clock.call_when_running(...)` to wrap startup code in a logcontext, ensuring we can identify which server generated the logs. Background: > Ideally, nothing from the Synapse homeserver would be logged against the `sentinel` > logcontext as we want to know which server the logs came from. In practice, this is not > always the case yet especially outside of request handling. > > Global things outside of Synapse (e.g. Twisted reactor code) should run in the > `sentinel` logcontext. It's only when it calls into application code that a logcontext > gets activated. This means the reactor should be started in the `sentinel` logcontext, > and any time an awaitable yields control back to the reactor, it should reset the > logcontext to be the `sentinel` logcontext. This is important to avoid leaking the > current logcontext to the reactor (which would then get picked up and associated with > the next thing the reactor does). > > *-- `docs/log_contexts.md` Also adds a lint to prefer `Clock.call_when_running(...)` over `reactor.callWhenRunning(...)` Part of https://github.com/element-hq/synapse/issues/18905 --- changelog.d/18944.misc | 1 + scripts-dev/mypy_synapse_plugin.py | 40 ++++ scripts-dev/sign_json.py | 2 +- synapse/_scripts/synapse_port_db.py | 64 ++---- synapse/_scripts/update_synapse_database.py | 2 +- synapse/api/auth/mas.py | 2 +- synapse/api/auth/msc3861_delegated.py | 2 +- synapse/api/errors.py | 2 +- synapse/api/ratelimiting.py | 2 +- synapse/app/_base.py | 5 +- synapse/app/generic_worker.py | 6 +- synapse/app/homeserver.py | 18 +- synapse/appservice/scheduler.py | 2 +- synapse/events/builder.py | 2 +- synapse/federation/sender/__init__.py | 2 +- .../federation/sender/transaction_manager.py | 2 +- synapse/handlers/deactivate_account.py | 2 +- synapse/handlers/device.py | 2 +- synapse/handlers/devicemessage.py | 2 +- synapse/handlers/e2e_keys.py | 2 +- synapse/handlers/identity.py | 2 +- synapse/handlers/message.py | 3 +- synapse/handlers/oidc.py | 3 +- synapse/handlers/ui_auth/checkers.py | 2 +- synapse/http/client.py | 2 +- .../federation/matrix_federation_agent.py | 2 +- .../http/federation/well_known_resolver.py | 7 +- synapse/http/matrixfederationclient.py | 2 +- synapse/http/server.py | 10 +- synapse/http/servlet.py | 2 +- synapse/logging/handlers.py | 14 +- synapse/logging/opentracing.py | 2 +- synapse/media/_base.py | 2 +- synapse/media/media_storage.py | 2 +- synapse/media/oembed.py | 2 +- synapse/media/url_previewer.py | 2 +- synapse/module_api/__init__.py | 2 +- synapse/replication/tcp/commands.py | 2 +- synapse/replication/tcp/external_cache.py | 2 +- synapse/replication/tcp/protocol.py | 2 +- synapse/rest/client/sync.py | 2 +- synapse/rest/key/v2/remote_key_resource.py | 2 +- synapse/rest/well_known.py | 2 +- synapse/server.py | 2 +- synapse/storage/_base.py | 2 +- synapse/storage/background_updates.py | 3 +- .../storage/databases/main/account_data.py | 2 +- synapse/storage/databases/main/appservice.py | 2 +- .../storage/databases/main/censor_events.py | 2 +- .../storage/databases/main/delayed_events.py | 3 +- synapse/storage/databases/main/deviceinbox.py | 3 +- synapse/storage/databases/main/devices.py | 2 +- .../storage/databases/main/e2e_room_keys.py | 2 +- .../storage/databases/main/end_to_end_keys.py | 2 +- .../databases/main/event_federation.py | 2 +- .../databases/main/event_push_actions.py | 2 +- synapse/storage/databases/main/events.py | 2 +- .../databases/main/events_bg_updates.py | 2 +- synapse/storage/databases/main/lock.py | 2 +- synapse/storage/databases/main/push_rule.py | 3 +- synapse/storage/databases/main/pusher.py | 2 +- synapse/storage/databases/main/receipts.py | 2 +- synapse/storage/databases/main/room.py | 2 +- synapse/storage/databases/main/session.py | 2 +- .../storage/databases/main/sliding_sync.py | 2 +- synapse/storage/databases/main/tags.py | 2 +- .../storage/databases/main/task_scheduler.py | 2 +- synapse/storage/databases/main/ui_auth.py | 3 +- synapse/types/__init__.py | 16 +- synapse/util/__init__.py | 169 +------------- synapse/util/async_helpers.py | 5 +- synapse/util/batching_queue.py | 2 +- synapse/util/caches/expiringcache.py | 2 +- synapse/util/caches/lrucache.py | 7 +- synapse/util/caches/response_cache.py | 2 +- synapse/util/clock.py | 208 ++++++++++++++++++ synapse/util/json.py | 57 +++++ synapse/util/macaroons.py | 3 +- synapse/util/metrics.py | 2 +- synapse/util/ratelimitutils.py | 2 +- synapse/util/retryutils.py | 2 +- synapse/visibility.py | 2 +- synmark/__main__.py | 5 +- synmark/suites/logging.py | 2 +- tests/api/test_auth.py | 2 +- tests/api/test_filtering.py | 2 +- tests/api/test_urls.py | 2 +- tests/app/test_openid_listener.py | 2 +- tests/app/test_phone_stats_home.py | 2 +- tests/appservice/test_api.py | 2 +- tests/appservice/test_scheduler.py | 2 +- tests/config/test_room_directory.py | 2 +- tests/crypto/test_keyring.py | 2 +- tests/events/test_auto_accept_invites.py | 2 +- tests/events/test_presence_router.py | 2 +- tests/events/test_snapshot.py | 2 +- tests/federation/test_federation_catch_up.py | 2 +- tests/federation/test_federation_client.py | 2 +- tests/federation/test_federation_devices.py | 2 +- tests/federation/test_federation_media.py | 2 +- .../test_federation_out_of_band_membership.py | 2 +- tests/federation/test_federation_sender.py | 2 +- tests/federation/test_federation_server.py | 2 +- tests/federation/transport/test_knocking.py | 2 +- tests/handlers/test_admin.py | 2 +- tests/handlers/test_appservice.py | 2 +- tests/handlers/test_auth.py | 2 +- tests/handlers/test_cas.py | 2 +- tests/handlers/test_deactivate_account.py | 2 +- tests/handlers/test_device.py | 2 +- tests/handlers/test_directory.py | 2 +- tests/handlers/test_e2e_keys.py | 2 +- tests/handlers/test_e2e_room_keys.py | 2 +- tests/handlers/test_federation.py | 2 +- tests/handlers/test_federation_event.py | 2 +- tests/handlers/test_message.py | 2 +- tests/handlers/test_oauth_delegation.py | 2 +- tests/handlers/test_oidc.py | 2 +- tests/handlers/test_password_providers.py | 2 +- tests/handlers/test_presence.py | 2 +- tests/handlers/test_profile.py | 2 +- tests/handlers/test_receipts.py | 2 +- tests/handlers/test_register.py | 2 +- tests/handlers/test_room_member.py | 2 +- tests/handlers/test_room_policy.py | 2 +- tests/handlers/test_room_summary.py | 2 +- tests/handlers/test_saml.py | 2 +- tests/handlers/test_sliding_sync.py | 2 +- tests/handlers/test_sso.py | 2 +- tests/handlers/test_stats.py | 2 +- tests/handlers/test_sync.py | 2 +- tests/handlers/test_typing.py | 2 +- tests/handlers/test_user_directory.py | 2 +- tests/handlers/test_worker_lock.py | 2 +- tests/http/test_matrixfederationclient.py | 2 +- tests/http/test_simple_client.py | 2 +- tests/http/test_site.py | 2 +- tests/logging/test_opentracing.py | 18 +- tests/media/test_media_retention.py | 2 +- tests/media/test_media_storage.py | 2 +- tests/media/test_oembed.py | 2 +- tests/media/test_url_previewer.py | 2 +- tests/metrics/test_phone_home_stats.py | 2 +- tests/module_api/test_account_data_manager.py | 2 +- tests/module_api/test_api.py | 2 +- .../test_event_unsigned_addition.py | 2 +- tests/module_api/test_spamchecker.py | 2 +- tests/push/test_bulk_push_rule_evaluator.py | 2 +- tests/push/test_email.py | 2 +- tests/push/test_http.py | 2 +- tests/push/test_push_rule_evaluator.py | 2 +- tests/replication/_base.py | 2 +- tests/replication/storage/_base.py | 2 +- tests/replication/storage/test_events.py | 2 +- tests/replication/tcp/streams/test_events.py | 2 +- .../tcp/streams/test_thread_subscriptions.py | 2 +- tests/replication/test_auth.py | 2 +- tests/replication/test_federation_ack.py | 2 +- .../test_federation_sender_shard.py | 2 +- tests/replication/test_multi_media_repo.py | 2 +- tests/replication/test_pusher_shard.py | 2 +- .../test_sharded_event_persister.py | 2 +- tests/replication/test_sharded_receipts.py | 2 +- tests/rest/admin/test_admin.py | 2 +- tests/rest/admin/test_background_updates.py | 2 +- tests/rest/admin/test_device.py | 2 +- tests/rest/admin/test_event_reports.py | 2 +- tests/rest/admin/test_federation.py | 2 +- tests/rest/admin/test_media.py | 2 +- tests/rest/admin/test_registration_tokens.py | 2 +- tests/rest/admin/test_room.py | 2 +- tests/rest/admin/test_scheduled_tasks.py | 2 +- tests/rest/admin/test_server_notice.py | 2 +- tests/rest/admin/test_statistics.py | 2 +- tests/rest/admin/test_user.py | 2 +- tests/rest/admin/test_username_available.py | 2 +- .../sliding_sync/test_connection_tracking.py | 2 +- .../test_extension_account_data.py | 2 +- .../sliding_sync/test_extension_e2ee.py | 2 +- .../sliding_sync/test_extension_receipts.py | 2 +- .../test_extension_thread_subscriptions.py | 2 +- .../sliding_sync/test_extension_to_device.py | 2 +- .../sliding_sync/test_extension_typing.py | 2 +- .../client/sliding_sync/test_extensions.py | 2 +- .../client/sliding_sync/test_lists_filters.py | 2 +- .../sliding_sync/test_room_subscriptions.py | 2 +- .../client/sliding_sync/test_rooms_invites.py | 2 +- .../client/sliding_sync/test_rooms_meta.py | 2 +- .../sliding_sync/test_rooms_required_state.py | 2 +- .../sliding_sync/test_rooms_timeline.py | 2 +- .../client/sliding_sync/test_sliding_sync.py | 2 +- tests/rest/client/test_account.py | 2 +- tests/rest/client/test_auth.py | 2 +- tests/rest/client/test_capabilities.py | 2 +- tests/rest/client/test_consent.py | 2 +- tests/rest/client/test_delayed_events.py | 2 +- tests/rest/client/test_devices.py | 2 +- tests/rest/client/test_directory.py | 2 +- tests/rest/client/test_ephemeral_message.py | 2 +- tests/rest/client/test_events.py | 2 +- tests/rest/client/test_filter.py | 2 +- tests/rest/client/test_identity.py | 2 +- tests/rest/client/test_login.py | 2 +- tests/rest/client/test_login_token_request.py | 2 +- tests/rest/client/test_media.py | 2 +- tests/rest/client/test_mutual_rooms.py | 2 +- tests/rest/client/test_notifications.py | 2 +- tests/rest/client/test_owned_state.py | 2 +- tests/rest/client/test_password_policy.py | 2 +- tests/rest/client/test_power_levels.py | 2 +- tests/rest/client/test_presence.py | 2 +- tests/rest/client/test_profile.py | 2 +- tests/rest/client/test_read_marker.py | 2 +- tests/rest/client/test_receipts.py | 2 +- tests/rest/client/test_redactions.py | 2 +- tests/rest/client/test_register.py | 2 +- tests/rest/client/test_relations.py | 2 +- tests/rest/client/test_rendezvous.py | 2 +- tests/rest/client/test_reporting.py | 2 +- tests/rest/client/test_retention.py | 2 +- tests/rest/client/test_rooms.py | 2 +- tests/rest/client/test_shadow_banned.py | 2 +- tests/rest/client/test_sync.py | 2 +- tests/rest/client/test_third_party_rules.py | 2 +- .../rest/client/test_thread_subscriptions.py | 2 +- tests/rest/client/test_transactions.py | 2 +- tests/rest/client/test_typing.py | 2 +- tests/rest/client/test_upgrade_room.py | 2 +- tests/rest/key/v2/test_remote_key_resource.py | 2 +- tests/rest/media/test_domain_blocking.py | 2 +- tests/rest/media/test_url_preview.py | 2 +- tests/rest/synapse/mas/test_devices.py | 2 +- tests/rest/synapse/mas/test_users.py | 2 +- tests/server.py | 2 +- tests/server_notices/__init__.py | 2 +- tests/server_notices/test_consent.py | 2 +- .../test_resource_limits_server_notices.py | 2 +- tests/state/test_v21.py | 2 +- .../databases/main/test_deviceinbox.py | 2 +- .../databases/main/test_end_to_end_keys.py | 2 +- .../databases/main/test_events_worker.py | 2 +- tests/storage/databases/main/test_lock.py | 2 +- tests/storage/databases/main/test_receipts.py | 2 +- tests/storage/databases/main/test_room.py | 2 +- tests/storage/test__base.py | 2 +- tests/storage/test_account_data.py | 2 +- tests/storage/test_appservice.py | 2 +- tests/storage/test_background_update.py | 2 +- tests/storage/test_cleanup_extrems.py | 2 +- tests/storage/test_client_ips.py | 2 +- tests/storage/test_database.py | 2 +- tests/storage/test_devices.py | 2 +- tests/storage/test_directory.py | 2 +- tests/storage/test_e2e_room_keys.py | 2 +- tests/storage/test_end_to_end_keys.py | 2 +- tests/storage/test_event_chain.py | 2 +- tests/storage/test_event_federation.py | 3 +- tests/storage/test_event_push_actions.py | 2 +- tests/storage/test_events.py | 2 +- tests/storage/test_events_bg_updates.py | 2 +- tests/storage/test_id_generators.py | 2 +- tests/storage/test_monthly_active_users.py | 2 +- tests/storage/test_profile.py | 2 +- tests/storage/test_purge.py | 2 +- tests/storage/test_receipts.py | 2 +- tests/storage/test_redaction.py | 2 +- tests/storage/test_registration.py | 2 +- tests/storage/test_relations.py | 2 +- tests/storage/test_rollback_worker.py | 2 +- tests/storage/test_room.py | 2 +- tests/storage/test_room_search.py | 2 +- tests/storage/test_roommember.py | 2 +- tests/storage/test_sliding_sync_tables.py | 2 +- tests/storage/test_state.py | 2 +- tests/storage/test_state_deletion.py | 2 +- tests/storage/test_stream.py | 2 +- tests/storage/test_thread_subscriptions.py | 2 +- tests/storage/test_transactions.py | 2 +- tests/storage/test_txn_limit.py | 2 +- tests/storage/test_user_directory.py | 2 +- tests/storage/test_user_filters.py | 2 +- tests/test_mau.py | 2 +- tests/test_phone_home.py | 2 +- tests/test_server.py | 2 +- tests/test_state.py | 2 +- tests/test_terms_auth.py | 13 +- tests/test_utils/oidc.py | 2 +- tests/test_visibility.py | 2 +- tests/unittest.py | 2 +- tests/util/test_expiring_cache.py | 2 +- tests/util/test_logcontext.py | 2 +- tests/util/test_task_scheduler.py | 2 +- 292 files changed, 693 insertions(+), 527 deletions(-) create mode 100644 changelog.d/18944.misc create mode 100644 synapse/util/clock.py create mode 100644 synapse/util/json.py diff --git a/changelog.d/18944.misc b/changelog.d/18944.misc new file mode 100644 index 0000000000..9561aa9275 --- /dev/null +++ b/changelog.d/18944.misc @@ -0,0 +1 @@ +Introduce `Clock.call_when_running(...)` to wrap startup code in a logcontext, ensuring we can identify which server generated the logs. diff --git a/scripts-dev/mypy_synapse_plugin.py b/scripts-dev/mypy_synapse_plugin.py index 610dec415a..439a75fc7e 100644 --- a/scripts-dev/mypy_synapse_plugin.py +++ b/scripts-dev/mypy_synapse_plugin.py @@ -68,6 +68,12 @@ PROMETHEUS_METRIC_MISSING_FROM_LIST_TO_CHECK = ErrorCode( category="per-homeserver-tenant-metrics", ) +PREFER_SYNAPSE_CLOCK_CALL_WHEN_RUNNING = ErrorCode( + "prefer-synapse-clock-call-when-running", + "`synapse.util.Clock.call_when_running` should be used instead of `reactor.callWhenRunning`", + category="synapse-reactor-clock", +) + class Sentinel(enum.Enum): # defining a sentinel in this way allows mypy to correctly handle the @@ -229,9 +235,43 @@ class SynapsePlugin(Plugin): ): return check_is_cacheable_wrapper + if fullname in ( + "twisted.internet.interfaces.IReactorCore.callWhenRunning", + "synapse.types.ISynapseThreadlessReactor.callWhenRunning", + "synapse.types.ISynapseReactor.callWhenRunning", + ): + return check_call_when_running + return None +def check_call_when_running(ctx: MethodSigContext) -> CallableType: + """ + Ensure that the `reactor.callWhenRunning` callsites aren't used. + + `synapse.util.Clock.call_when_running` should always be used instead of + `reactor.callWhenRunning`. + + Since `reactor.callWhenRunning` is a reactor callback, the callback will start out + with the sentinel logcontext. `synapse.util.Clock` starts a default logcontext as we + want to know which server the logs came from. + + Args: + ctx: The `FunctionSigContext` from mypy. + """ + signature: CallableType = ctx.default_signature + ctx.api.fail( + ( + "Expected all `reactor.callWhenRunning` calls to use `synapse.util.Clock.call_when_running` instead. " + "This is so all Synapse code runs with a logcontext as we want to know which server the logs came from." + ), + ctx.context, + code=PREFER_SYNAPSE_CLOCK_CALL_WHEN_RUNNING, + ) + + return signature + + def analyze_prometheus_metric_classes(ctx: ClassDefContext) -> None: """ Cross-check the list of Prometheus metric classes against the diff --git a/scripts-dev/sign_json.py b/scripts-dev/sign_json.py index 14aacf9382..40e0c529da 100755 --- a/scripts-dev/sign_json.py +++ b/scripts-dev/sign_json.py @@ -30,7 +30,7 @@ from signedjson.sign import sign_json from synapse.api.room_versions import KNOWN_ROOM_VERSIONS from synapse.crypto.event_signing import add_hashes_and_signatures -from synapse.util import json_encoder +from synapse.util.json import json_encoder def main() -> None: diff --git a/synapse/_scripts/synapse_port_db.py b/synapse/_scripts/synapse_port_db.py index a81db3cfbf..b0a067edcb 100755 --- a/synapse/_scripts/synapse_port_db.py +++ b/synapse/_scripts/synapse_port_db.py @@ -54,11 +54,11 @@ from twisted.internet import defer, reactor as reactor_ from synapse.config.database import DatabaseConnectionConfig from synapse.config.homeserver import HomeServerConfig from synapse.logging.context import ( - LoggingContext, make_deferred_yieldable, run_in_background, ) -from synapse.notifier import ReplicationNotifier +from synapse.server import HomeServer +from synapse.storage import DataStore from synapse.storage.database import DatabasePool, LoggingTransaction, make_conn from synapse.storage.databases.main import FilteringWorkerStore from synapse.storage.databases.main.account_data import AccountDataWorkerStore @@ -98,8 +98,7 @@ from synapse.storage.databases.state.bg_updates import StateBackgroundUpdateStor from synapse.storage.engines import create_engine from synapse.storage.prepare_database import prepare_database from synapse.types import ISynapseReactor -from synapse.util import SYNAPSE_VERSION, Clock -from synapse.util.stringutils import random_string +from synapse.util import SYNAPSE_VERSION # Cast safety: Twisted does some naughty magic which replaces the # twisted.internet.reactor module with a Reactor instance at runtime. @@ -318,31 +317,16 @@ class Store( ) -class MockHomeserver: +class MockHomeserver(HomeServer): + DATASTORE_CLASS = DataStore + def __init__(self, config: HomeServerConfig): - self.clock = Clock(reactor) - self.config = config - self.hostname = config.server.server_name - self.version_string = SYNAPSE_VERSION - self.instance_id = random_string(5) - - def get_clock(self) -> Clock: - return self.clock - - def get_reactor(self) -> ISynapseReactor: - return reactor - - def get_instance_id(self) -> str: - return self.instance_id - - def get_instance_name(self) -> str: - return "master" - - def should_send_federation(self) -> bool: - return False - - def get_replication_notifier(self) -> ReplicationNotifier: - return ReplicationNotifier() + super().__init__( + hostname=config.server.server_name, + config=config, + reactor=reactor, + version_string=f"Synapse/{SYNAPSE_VERSION}", + ) class Porter: @@ -351,12 +335,12 @@ class Porter: sqlite_config: Dict[str, Any], progress: "Progress", batch_size: int, - hs_config: HomeServerConfig, + hs: HomeServer, ): self.sqlite_config = sqlite_config self.progress = progress self.batch_size = batch_size - self.hs_config = hs_config + self.hs = hs async def setup_table(self, table: str) -> Tuple[str, int, int, int, int]: if table in APPEND_ONLY_TABLES: @@ -676,8 +660,7 @@ class Porter: engine = create_engine(db_config.config) - hs = MockHomeserver(self.hs_config) - server_name = hs.hostname + server_name = self.hs.hostname with make_conn( db_config=db_config, @@ -688,16 +671,16 @@ class Porter: engine.check_database( db_conn, allow_outdated_version=allow_outdated_version ) - prepare_database(db_conn, engine, config=self.hs_config) + prepare_database(db_conn, engine, config=self.hs.config) # Type safety: ignore that we're using Mock homeservers here. store = Store( DatabasePool( - hs, # type: ignore[arg-type] + self.hs, db_config, engine, ), db_conn, - hs, # type: ignore[arg-type] + self.hs, ) db_conn.commit() @@ -795,7 +778,7 @@ class Porter: return self.postgres_store = self.build_db_store( - self.hs_config.database.get_single_database() + self.hs.config.database.get_single_database() ) await self.remove_ignored_background_updates_from_database() @@ -1584,6 +1567,8 @@ def main() -> None: config = HomeServerConfig() config.parse_config_dict(hs_config, "", "") + hs = MockHomeserver(config) + def start(stdscr: Optional["curses.window"] = None) -> None: progress: Progress if stdscr: @@ -1595,15 +1580,14 @@ def main() -> None: sqlite_config=sqlite_config, progress=progress, batch_size=args.batch_size, - hs_config=config, + hs=hs, ) @defer.inlineCallbacks def run() -> Generator["defer.Deferred[Any]", Any, None]: - with LoggingContext("synapse_port_db_run"): - yield defer.ensureDeferred(porter.run()) + yield defer.ensureDeferred(porter.run()) - reactor.callWhenRunning(run) + hs.get_clock().call_when_running(run) reactor.run() diff --git a/synapse/_scripts/update_synapse_database.py b/synapse/_scripts/update_synapse_database.py index 3624db3544..caaecda161 100644 --- a/synapse/_scripts/update_synapse_database.py +++ b/synapse/_scripts/update_synapse_database.py @@ -74,7 +74,7 @@ def run_background_updates(hs: HomeServer) -> None: ) ) - reactor.callWhenRunning(run) + hs.get_clock().call_when_running(run) reactor.run() diff --git a/synapse/api/auth/mas.py b/synapse/api/auth/mas.py index 40b4a5bd34..ef82ea9cc7 100644 --- a/synapse/api/auth/mas.py +++ b/synapse/api/auth/mas.py @@ -43,9 +43,9 @@ from synapse.logging.opentracing import ( from synapse.metrics import SERVER_NAME_LABEL from synapse.synapse_rust.http_client import HttpClient from synapse.types import JsonDict, Requester, UserID, create_requester -from synapse.util import json_decoder from synapse.util.caches.cached_call import RetryOnExceptionCachedCall from synapse.util.caches.response_cache import ResponseCache, ResponseCacheContext +from synapse.util.json import json_decoder from . import introspection_response_timer diff --git a/synapse/api/auth/msc3861_delegated.py b/synapse/api/auth/msc3861_delegated.py index c406c683e7..11a89dd3ed 100644 --- a/synapse/api/auth/msc3861_delegated.py +++ b/synapse/api/auth/msc3861_delegated.py @@ -48,9 +48,9 @@ from synapse.logging.opentracing import ( from synapse.metrics import SERVER_NAME_LABEL from synapse.synapse_rust.http_client import HttpClient from synapse.types import Requester, UserID, create_requester -from synapse.util import json_decoder from synapse.util.caches.cached_call import RetryOnExceptionCachedCall from synapse.util.caches.response_cache import ResponseCache, ResponseCacheContext +from synapse.util.json import json_decoder from . import introspection_response_timer diff --git a/synapse/api/errors.py b/synapse/api/errors.py index b3e391cd96..551537fdda 100644 --- a/synapse/api/errors.py +++ b/synapse/api/errors.py @@ -30,7 +30,7 @@ from typing import Any, Dict, List, Optional, Union from twisted.web import http -from synapse.util import json_decoder +from synapse.util.json import json_decoder if typing.TYPE_CHECKING: from synapse.config.homeserver import HomeServerConfig diff --git a/synapse/api/ratelimiting.py b/synapse/api/ratelimiting.py index 509ef6b2c1..9d1c7801bc 100644 --- a/synapse/api/ratelimiting.py +++ b/synapse/api/ratelimiting.py @@ -26,7 +26,7 @@ from synapse.api.errors import LimitExceededError from synapse.config.ratelimiting import RatelimitSettings from synapse.storage.databases.main import DataStore from synapse.types import Requester -from synapse.util import Clock +from synapse.util.clock import Clock if TYPE_CHECKING: # To avoid circular imports: diff --git a/synapse/app/_base.py b/synapse/app/_base.py index cf3d260e65..02c56496bf 100644 --- a/synapse/app/_base.py +++ b/synapse/app/_base.py @@ -241,7 +241,7 @@ def redirect_stdio_to_logs() -> None: def register_start( - cb: Callable[P, Awaitable], *args: P.args, **kwargs: P.kwargs + hs: "HomeServer", cb: Callable[P, Awaitable], *args: P.args, **kwargs: P.kwargs ) -> None: """Register a callback with the reactor, to be called once it is running @@ -278,7 +278,8 @@ def register_start( # on as normal. os._exit(1) - reactor.callWhenRunning(lambda: defer.ensureDeferred(wrapper())) + clock = hs.get_clock() + clock.call_when_running(lambda: defer.ensureDeferred(wrapper())) def listen_metrics(bind_addresses: StrCollection, port: int) -> None: diff --git a/synapse/app/generic_worker.py b/synapse/app/generic_worker.py index 543b26d8ba..0849f25059 100644 --- a/synapse/app/generic_worker.py +++ b/synapse/app/generic_worker.py @@ -356,11 +356,9 @@ def start(config_options: List[str]) -> None: handle_startup_exception(e) async def start() -> None: - # Re-establish log context now that we're back from the reactor - with LoggingContext("start"): - await _base.start(hs) + await _base.start(hs) - register_start(start) + register_start(hs, start) # redirect stdio to the logs, if configured. if not hs.config.logging.no_redirect_stdio: diff --git a/synapse/app/homeserver.py b/synapse/app/homeserver.py index dfc4a00719..54c41c0c28 100644 --- a/synapse/app/homeserver.py +++ b/synapse/app/homeserver.py @@ -377,19 +377,17 @@ def setup(config_options: List[str]) -> SynapseHomeServer: handle_startup_exception(e) async def start() -> None: - # Re-establish log context now that we're back from the reactor - with LoggingContext("start"): - # Load the OIDC provider metadatas, if OIDC is enabled. - if hs.config.oidc.oidc_enabled: - oidc = hs.get_oidc_handler() - # Loading the provider metadata also ensures the provider config is valid. - await oidc.load_metadata() + # Load the OIDC provider metadatas, if OIDC is enabled. + if hs.config.oidc.oidc_enabled: + oidc = hs.get_oidc_handler() + # Loading the provider metadata also ensures the provider config is valid. + await oidc.load_metadata() - await _base.start(hs) + await _base.start(hs) - hs.get_datastores().main.db_pool.updates.start_doing_background_updates() + hs.get_datastores().main.db_pool.updates.start_doing_background_updates() - register_start(start) + register_start(hs, start) return hs diff --git a/synapse/appservice/scheduler.py b/synapse/appservice/scheduler.py index 01f77c4cb6..c8678406a1 100644 --- a/synapse/appservice/scheduler.py +++ b/synapse/appservice/scheduler.py @@ -84,7 +84,7 @@ from synapse.logging.context import run_in_background from synapse.metrics.background_process_metrics import run_as_background_process from synapse.storage.databases.main import DataStore from synapse.types import DeviceListUpdates, JsonMapping -from synapse.util import Clock +from synapse.util.clock import Clock if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/events/builder.py b/synapse/events/builder.py index 5e1913d389..1c9f78c7ca 100644 --- a/synapse/events/builder.py +++ b/synapse/events/builder.py @@ -38,7 +38,7 @@ from synapse.storage.databases.main import DataStore from synapse.synapse_rust.events import EventInternalMetadata from synapse.types import EventID, JsonDict, StrCollection from synapse.types.state import StateFilter -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string if TYPE_CHECKING: diff --git a/synapse/federation/sender/__init__.py b/synapse/federation/sender/__init__.py index 6baa233143..8e3619d1bc 100644 --- a/synapse/federation/sender/__init__.py +++ b/synapse/federation/sender/__init__.py @@ -178,7 +178,7 @@ from synapse.types import ( StrCollection, get_domain_from_id, ) -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.metrics import Measure from synapse.util.retryutils import filter_destinations_by_retry_limiter diff --git a/synapse/federation/sender/transaction_manager.py b/synapse/federation/sender/transaction_manager.py index 050982c499..b548d9ed70 100644 --- a/synapse/federation/sender/transaction_manager.py +++ b/synapse/federation/sender/transaction_manager.py @@ -36,7 +36,7 @@ from synapse.logging.opentracing import ( ) from synapse.metrics import SERVER_NAME_LABEL from synapse.types import JsonDict -from synapse.util import json_decoder +from synapse.util.json import json_decoder from synapse.util.metrics import measure_func if TYPE_CHECKING: diff --git a/synapse/handlers/deactivate_account.py b/synapse/handlers/deactivate_account.py index e4169321cc..c0684380a7 100644 --- a/synapse/handlers/deactivate_account.py +++ b/synapse/handlers/deactivate_account.py @@ -62,7 +62,7 @@ class DeactivateAccountHandler: # Start the user parter loop so it can resume parting users from rooms where # it left off (if it has work left to do). if hs.config.worker.worker_app is None: - hs.get_reactor().callWhenRunning(self._start_user_parting) + hs.get_clock().call_when_running(self._start_user_parting) else: self._notify_account_deactivated_client = ( ReplicationNotifyAccountDeactivatedServlet.make_client(hs) diff --git a/synapse/handlers/device.py b/synapse/handlers/device.py index acae34e71f..65b8a95f8e 100644 --- a/synapse/handlers/device.py +++ b/synapse/handlers/device.py @@ -1002,7 +1002,7 @@ class DeviceWriterHandler(DeviceHandler): # rolling-restarting Synapse. if self._is_main_device_list_writer: # On start up check if there are any updates pending. - hs.get_reactor().callWhenRunning(self._handle_new_device_update_async) + hs.get_clock().call_when_running(self._handle_new_device_update_async) self.device_list_updater = DeviceListUpdater(hs, self) hs.get_federation_registry().register_edu_handler( EduTypes.DEVICE_LIST_UPDATE, diff --git a/synapse/handlers/devicemessage.py b/synapse/handlers/devicemessage.py index b43cbd9c15..860e24d79d 100644 --- a/synapse/handlers/devicemessage.py +++ b/synapse/handlers/devicemessage.py @@ -34,7 +34,7 @@ from synapse.logging.opentracing import ( set_tag, ) from synapse.types import JsonDict, Requester, StreamKeyType, UserID, get_domain_from_id -from synapse.util import json_encoder +from synapse.util.json import json_encoder from synapse.util.stringutils import random_string if TYPE_CHECKING: diff --git a/synapse/handlers/e2e_keys.py b/synapse/handlers/e2e_keys.py index b9abad2188..fa3d207a90 100644 --- a/synapse/handlers/e2e_keys.py +++ b/synapse/handlers/e2e_keys.py @@ -44,9 +44,9 @@ from synapse.types import ( get_domain_from_id, get_verify_key_from_cross_signing_key, ) -from synapse.util import json_decoder from synapse.util.async_helpers import Linearizer, concurrently_execute from synapse.util.cancellation import cancellable +from synapse.util.json import json_decoder from synapse.util.retryutils import ( NotRetryingDestination, filter_destinations_by_retry_limiter, diff --git a/synapse/handlers/identity.py b/synapse/handlers/identity.py index d96b585308..be757201fc 100644 --- a/synapse/handlers/identity.py +++ b/synapse/handlers/identity.py @@ -39,8 +39,8 @@ from synapse.http import RequestTimedOutError from synapse.http.client import SimpleHttpClient from synapse.http.site import SynapseRequest from synapse.types import JsonDict, Requester -from synapse.util import json_decoder from synapse.util.hash import sha256_and_url_safe_base64 +from synapse.util.json import json_decoder from synapse.util.stringutils import ( assert_valid_client_secret, random_string, diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 6db031a4b9..c8c86d8749 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -81,9 +81,10 @@ from synapse.types import ( create_requester, ) from synapse.types.state import StateFilter -from synapse.util import json_decoder, json_encoder, log_failure, unwrapFirstError +from synapse.util import log_failure, unwrapFirstError from synapse.util.async_helpers import Linearizer, gather_results from synapse.util.caches.expiringcache import ExpiringCache +from synapse.util.json import json_decoder, json_encoder from synapse.util.metrics import measure_func from synapse.visibility import get_effective_room_visibility_from_state diff --git a/synapse/handlers/oidc.py b/synapse/handlers/oidc.py index 8f3e717fb4..fc93c6b2a8 100644 --- a/synapse/handlers/oidc.py +++ b/synapse/handlers/oidc.py @@ -67,8 +67,9 @@ from synapse.http.site import SynapseRequest from synapse.logging.context import make_deferred_yieldable from synapse.module_api import ModuleApi from synapse.types import JsonDict, UserID, map_username_to_mxid_localpart -from synapse.util import Clock, json_decoder from synapse.util.caches.cached_call import RetryOnExceptionCachedCall +from synapse.util.clock import Clock +from synapse.util.json import json_decoder from synapse.util.macaroons import MacaroonGenerator, OidcSessionData from synapse.util.templates import _localpart_from_email_filter diff --git a/synapse/handlers/ui_auth/checkers.py b/synapse/handlers/ui_auth/checkers.py index 32dca8c43b..f3c295d9f2 100644 --- a/synapse/handlers/ui_auth/checkers.py +++ b/synapse/handlers/ui_auth/checkers.py @@ -27,7 +27,7 @@ from twisted.web.client import PartialDownloadError from synapse.api.constants import LoginType from synapse.api.errors import Codes, LoginError, SynapseError -from synapse.util import json_decoder +from synapse.util.json import json_decoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/http/client.py b/synapse/http/client.py index 1f6d4dcd86..bbb0efe8b5 100644 --- a/synapse/http/client.py +++ b/synapse/http/client.py @@ -87,8 +87,8 @@ from synapse.logging.context import make_deferred_yieldable, run_in_background from synapse.logging.opentracing import set_tag, start_active_span, tags from synapse.metrics import SERVER_NAME_LABEL from synapse.types import ISynapseReactor, StrSequence -from synapse.util import json_decoder from synapse.util.async_helpers import timeout_deferred +from synapse.util.json import json_decoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/http/federation/matrix_federation_agent.py b/synapse/http/federation/matrix_federation_agent.py index 6ebadf0dbf..2d152d441e 100644 --- a/synapse/http/federation/matrix_federation_agent.py +++ b/synapse/http/federation/matrix_federation_agent.py @@ -49,7 +49,7 @@ from synapse.http.federation.well_known_resolver import WellKnownResolver from synapse.http.proxyagent import ProxyAgent from synapse.logging.context import make_deferred_yieldable, run_in_background from synapse.types import ISynapseReactor -from synapse.util import Clock +from synapse.util.clock import Clock logger = logging.getLogger(__name__) diff --git a/synapse/http/federation/well_known_resolver.py b/synapse/http/federation/well_known_resolver.py index 70242ad0ae..49e58c8228 100644 --- a/synapse/http/federation/well_known_resolver.py +++ b/synapse/http/federation/well_known_resolver.py @@ -27,7 +27,6 @@ from typing import Callable, Dict, Optional, Tuple import attr from twisted.internet import defer -from twisted.internet.interfaces import IReactorTime from twisted.web.client import RedirectAgent from twisted.web.http import stringToDatetime from twisted.web.http_headers import Headers @@ -35,8 +34,10 @@ from twisted.web.iweb import IAgent, IResponse from synapse.http.client import BodyExceededMaxSize, read_body_with_max_size from synapse.logging.context import make_deferred_yieldable -from synapse.util import Clock, json_decoder +from synapse.types import ISynapseThreadlessReactor from synapse.util.caches.ttlcache import TTLCache +from synapse.util.clock import Clock +from synapse.util.json import json_decoder from synapse.util.metrics import Measure # period to cache .well-known results for by default @@ -88,7 +89,7 @@ class WellKnownResolver: def __init__( self, server_name: str, - reactor: IReactorTime, + reactor: ISynapseThreadlessReactor, agent: IAgent, user_agent: bytes, well_known_cache: Optional[TTLCache[bytes, Optional[bytes]]] = None, diff --git a/synapse/http/matrixfederationclient.py b/synapse/http/matrixfederationclient.py index 15f8e147ab..419e4444ab 100644 --- a/synapse/http/matrixfederationclient.py +++ b/synapse/http/matrixfederationclient.py @@ -89,8 +89,8 @@ from synapse.logging.context import make_deferred_yieldable, run_in_background from synapse.logging.opentracing import set_tag, start_active_span, tags from synapse.metrics import SERVER_NAME_LABEL from synapse.types import JsonDict -from synapse.util import json_decoder from synapse.util.async_helpers import AwakenableSleeper, Linearizer, timeout_deferred +from synapse.util.json import json_decoder from synapse.util.metrics import Measure from synapse.util.stringutils import parse_and_validate_server_name diff --git a/synapse/http/server.py b/synapse/http/server.py index e395f79894..0b987f6aa9 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -52,10 +52,11 @@ from zope.interface import implementer from twisted.internet import defer, interfaces, reactor from twisted.internet.defer import CancelledError -from twisted.internet.interfaces import IReactorTime from twisted.python import failure from twisted.web import resource +from synapse.types import ISynapseThreadlessReactor + try: from twisted.web.pages import notFound except ImportError: @@ -77,10 +78,11 @@ from synapse.api.errors import ( from synapse.config.homeserver import HomeServerConfig from synapse.logging.context import defer_to_thread, preserve_fn, run_in_background from synapse.logging.opentracing import active_span, start_active_span, trace_servlet -from synapse.util import Clock, json_encoder from synapse.util.caches import intern_dict from synapse.util.cancellation import is_function_cancellable +from synapse.util.clock import Clock from synapse.util.iterutils import chunk_seq +from synapse.util.json import json_encoder if TYPE_CHECKING: import opentracing @@ -410,7 +412,7 @@ class DirectServeJsonResource(_AsyncResource): clock: Optional[Clock] = None, ): if clock is None: - clock = Clock(cast(IReactorTime, reactor)) + clock = Clock(cast(ISynapseThreadlessReactor, reactor)) super().__init__(clock, extract_context) self.canonical_json = canonical_json @@ -589,7 +591,7 @@ class DirectServeHtmlResource(_AsyncResource): clock: Optional[Clock] = None, ): if clock is None: - clock = Clock(cast(IReactorTime, reactor)) + clock = Clock(cast(ISynapseThreadlessReactor, reactor)) super().__init__(clock, extract_context) diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py index 69bdce2b83..71e809b3f1 100644 --- a/synapse/http/servlet.py +++ b/synapse/http/servlet.py @@ -51,7 +51,7 @@ from synapse.api.errors import Codes, SynapseError from synapse.http import redact_uri from synapse.http.server import HttpServer from synapse.types import JsonDict, RoomAlias, RoomID, StrCollection -from synapse.util import json_decoder +from synapse.util.json import json_decoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/logging/handlers.py b/synapse/logging/handlers.py index dec2a2c3dd..b7945aac72 100644 --- a/synapse/logging/handlers.py +++ b/synapse/logging/handlers.py @@ -60,8 +60,18 @@ class PeriodicallyFlushingMemoryHandler(MemoryHandler): else: reactor_to_use = reactor - # call our hook when the reactor start up - reactor_to_use.callWhenRunning(on_reactor_running) + # Call our hook when the reactor start up + # + # type-ignore: Ideally, we'd use `Clock.call_when_running(...)`, but + # `PeriodicallyFlushingMemoryHandler` is instantiated via Python logging + # configuration, so it's not straightforward to pass in the homeserver's clock + # (and we don't want to burden other peoples logging config with the details). + # + # The important reason why we want to use `Clock.call_when_running` is so that + # the callback runs with a logcontext as we want to know which server the logs + # came from. But since we don't log anything in the callback, it's safe to + # ignore the lint here. + reactor_to_use.callWhenRunning(on_reactor_running) # type: ignore[prefer-synapse-clock-call-when-running] def shouldFlush(self, record: LogRecord) -> bool: """ diff --git a/synapse/logging/opentracing.py b/synapse/logging/opentracing.py index b596b1abdb..405939d518 100644 --- a/synapse/logging/opentracing.py +++ b/synapse/logging/opentracing.py @@ -204,7 +204,7 @@ from twisted.web.http import Request from twisted.web.http_headers import Headers from synapse.config import ConfigError -from synapse.util import json_decoder, json_encoder +from synapse.util.json import json_decoder, json_encoder if TYPE_CHECKING: from synapse.http.site import SynapseRequest diff --git a/synapse/media/_base.py b/synapse/media/_base.py index 29911dab77..15b28074fd 100644 --- a/synapse/media/_base.py +++ b/synapse/media/_base.py @@ -54,8 +54,8 @@ from synapse.logging.context import ( make_deferred_yieldable, run_in_background, ) -from synapse.util import Clock from synapse.util.async_helpers import DeferredEvent +from synapse.util.clock import Clock from synapse.util.stringutils import is_ascii if TYPE_CHECKING: diff --git a/synapse/media/media_storage.py b/synapse/media/media_storage.py index afd33c02a1..99d002a8df 100644 --- a/synapse/media/media_storage.py +++ b/synapse/media/media_storage.py @@ -55,7 +55,7 @@ from synapse.api.errors import NotFoundError from synapse.logging.context import defer_to_thread, run_in_background from synapse.logging.opentracing import start_active_span, trace, trace_with_opname from synapse.media._base import ThreadedFileSender -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.file_consumer import BackgroundFileConsumer from ..types import JsonDict diff --git a/synapse/media/oembed.py b/synapse/media/oembed.py index 16d613d271..45b481f229 100644 --- a/synapse/media/oembed.py +++ b/synapse/media/oembed.py @@ -27,7 +27,7 @@ import attr from synapse.media.preview_html import parse_html_description from synapse.types import JsonDict -from synapse.util import json_decoder +from synapse.util.json import json_decoder if TYPE_CHECKING: from lxml import etree diff --git a/synapse/media/url_previewer.py b/synapse/media/url_previewer.py index 8f106a3d5f..81204913f7 100644 --- a/synapse/media/url_previewer.py +++ b/synapse/media/url_previewer.py @@ -46,9 +46,9 @@ from synapse.media.oembed import OEmbedProvider from synapse.media.preview_html import decode_body, parse_html_to_open_graph from synapse.metrics.background_process_metrics import run_as_background_process from synapse.types import JsonDict, UserID -from synapse.util import json_encoder from synapse.util.async_helpers import ObservableDeferred from synapse.util.caches.expiringcache import ExpiringCache +from synapse.util.json import json_encoder from synapse.util.stringutils import random_string if TYPE_CHECKING: diff --git a/synapse/module_api/__init__.py b/synapse/module_api/__init__.py index 6218135513..7a419145e0 100644 --- a/synapse/module_api/__init__.py +++ b/synapse/module_api/__init__.py @@ -158,9 +158,9 @@ from synapse.types import ( create_requester, ) from synapse.types.state import StateFilter -from synapse.util import Clock from synapse.util.async_helpers import maybe_awaitable from synapse.util.caches.descriptors import CachedFunction, cached as _cached +from synapse.util.clock import Clock from synapse.util.frozenutils import freeze if TYPE_CHECKING: diff --git a/synapse/replication/tcp/commands.py b/synapse/replication/tcp/commands.py index 6ab5356660..8eec68c3dd 100644 --- a/synapse/replication/tcp/commands.py +++ b/synapse/replication/tcp/commands.py @@ -29,7 +29,7 @@ import logging from typing import List, Optional, Tuple, Type, TypeVar from synapse.replication.tcp.streams._base import StreamRow -from synapse.util import json_decoder, json_encoder +from synapse.util.json import json_decoder, json_encoder logger = logging.getLogger(__name__) diff --git a/synapse/replication/tcp/external_cache.py b/synapse/replication/tcp/external_cache.py index 497b26fcaf..bcdd55d2e6 100644 --- a/synapse/replication/tcp/external_cache.py +++ b/synapse/replication/tcp/external_cache.py @@ -27,7 +27,7 @@ from prometheus_client import Counter, Histogram from synapse.logging import opentracing from synapse.logging.context import make_deferred_yieldable from synapse.metrics import SERVER_NAME_LABEL -from synapse.util import json_decoder, json_encoder +from synapse.util.json import json_decoder, json_encoder if TYPE_CHECKING: from txredisapi import ConnectionHandler diff --git a/synapse/replication/tcp/protocol.py b/synapse/replication/tcp/protocol.py index 2ec25bf43d..25a7868cd7 100644 --- a/synapse/replication/tcp/protocol.py +++ b/synapse/replication/tcp/protocol.py @@ -55,7 +55,7 @@ from synapse.replication.tcp.commands import ( ServerCommand, parse_command_from_line, ) -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string if TYPE_CHECKING: diff --git a/synapse/rest/client/sync.py b/synapse/rest/client/sync.py index c424ca5325..bb63b51599 100644 --- a/synapse/rest/client/sync.py +++ b/synapse/rest/client/sync.py @@ -58,8 +58,8 @@ from synapse.logging.opentracing import log_kv, set_tag, trace_with_opname from synapse.rest.admin.experimental_features import ExperimentalFeature from synapse.types import JsonDict, Requester, SlidingSyncStreamToken, StreamToken from synapse.types.rest.client import SlidingSyncBody -from synapse.util import json_decoder from synapse.util.caches.lrucache import LruCache +from synapse.util.json import json_decoder from ._base import client_patterns, set_timeline_upper_limit diff --git a/synapse/rest/key/v2/remote_key_resource.py b/synapse/rest/key/v2/remote_key_resource.py index fea0b9706d..94c679b9e7 100644 --- a/synapse/rest/key/v2/remote_key_resource.py +++ b/synapse/rest/key/v2/remote_key_resource.py @@ -38,8 +38,8 @@ from synapse.http.servlet import ( from synapse.storage.keys import FetchKeyResultForRemote from synapse.types import JsonDict from synapse.types.rest import RequestBodyModel -from synapse.util import json_decoder from synapse.util.async_helpers import yieldable_gather_results +from synapse.util.json import json_decoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/rest/well_known.py b/synapse/rest/well_known.py index e4fe4c45ef..ae8c6a8fc0 100644 --- a/synapse/rest/well_known.py +++ b/synapse/rest/well_known.py @@ -28,7 +28,7 @@ from synapse.api.errors import NotFoundError from synapse.http.server import DirectServeJsonResource from synapse.http.site import SynapseRequest from synapse.types import JsonDict -from synapse.util import json_encoder +from synapse.util.json import json_encoder from synapse.util.stringutils import parse_server_name if TYPE_CHECKING: diff --git a/synapse/server.py b/synapse/server.py index 3fb29a7817..00862eb137 100644 --- a/synapse/server.py +++ b/synapse/server.py @@ -156,7 +156,7 @@ from synapse.storage.controllers import StorageControllers from synapse.streams.events import EventSources from synapse.synapse_rust.rendezvous import RendezvousHandler from synapse.types import DomainSpecificString, ISynapseReactor -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.distributor import Distributor from synapse.util.macaroons import MacaroonGenerator from synapse.util.ratelimitutils import FederationRateLimiter diff --git a/synapse/storage/_base.py b/synapse/storage/_base.py index d55c9e18ed..f214f55897 100644 --- a/synapse/storage/_base.py +++ b/synapse/storage/_base.py @@ -29,8 +29,8 @@ from synapse.storage.database import ( make_in_list_sql_clause, # noqa: F401 ) from synapse.types import get_domain_from_id -from synapse.util import json_decoder from synapse.util.caches.descriptors import CachedFunction +from synapse.util.json import json_decoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/background_updates.py b/synapse/storage/background_updates.py index acc0abee63..9aa9e51aeb 100644 --- a/synapse/storage/background_updates.py +++ b/synapse/storage/background_updates.py @@ -45,7 +45,8 @@ from synapse.metrics.background_process_metrics import run_as_background_process from synapse.storage.engines import PostgresEngine from synapse.storage.types import Connection, Cursor from synapse.types import JsonDict, StrCollection -from synapse.util import Clock, json_encoder +from synapse.util.clock import Clock +from synapse.util.json import json_encoder from . import engines diff --git a/synapse/storage/databases/main/account_data.py b/synapse/storage/databases/main/account_data.py index c049789e44..16876e5461 100644 --- a/synapse/storage/databases/main/account_data.py +++ b/synapse/storage/databases/main/account_data.py @@ -48,9 +48,9 @@ from synapse.storage.databases.main.push_rule import PushRulesWorkerStore from synapse.storage.invite_rule import InviteRulesConfig from synapse.storage.util.id_generators import MultiWriterIdGenerator from synapse.types import JsonDict, JsonMapping -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached from synapse.util.caches.stream_change_cache import StreamChangeCache +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/appservice.py b/synapse/storage/databases/main/appservice.py index 90ff0f0f12..97dbbb1493 100644 --- a/synapse/storage/databases/main/appservice.py +++ b/synapse/storage/databases/main/appservice.py @@ -42,8 +42,8 @@ from synapse.storage.databases.main.roommember import RoomMemberWorkerStore from synapse.storage.types import Cursor from synapse.storage.util.sequence import build_sequence_generator from synapse.types import DeviceListUpdates, JsonMapping -from synapse.util import json_encoder from synapse.util.caches.descriptors import _CacheContext, cached +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/censor_events.py b/synapse/storage/databases/main/censor_events.py index 5b15fd707d..3f9f482add 100644 --- a/synapse/storage/databases/main/censor_events.py +++ b/synapse/storage/databases/main/censor_events.py @@ -32,7 +32,7 @@ from synapse.storage.database import ( ) from synapse.storage.databases.main.cache import CacheInvalidationWorkerStore from synapse.storage.databases.main.events_worker import EventsWorkerStore -from synapse.util import json_encoder +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/delayed_events.py b/synapse/storage/databases/main/delayed_events.py index c88682d55c..8428ee6ed4 100644 --- a/synapse/storage/databases/main/delayed_events.py +++ b/synapse/storage/databases/main/delayed_events.py @@ -22,7 +22,8 @@ from synapse.storage._base import SQLBaseStore, db_to_json from synapse.storage.database import LoggingTransaction, StoreError from synapse.storage.engines import PostgresEngine from synapse.types import JsonDict, RoomID -from synapse.util import json_encoder, stringutils as stringutils +from synapse.util import stringutils +from synapse.util.json import json_encoder logger = logging.getLogger(__name__) diff --git a/synapse/storage/databases/main/deviceinbox.py b/synapse/storage/databases/main/deviceinbox.py index c10e2d2611..f6f3c94a0d 100644 --- a/synapse/storage/databases/main/deviceinbox.py +++ b/synapse/storage/databases/main/deviceinbox.py @@ -53,10 +53,11 @@ from synapse.storage.database import ( ) from synapse.storage.util.id_generators import MultiWriterIdGenerator from synapse.types import JsonDict, StrCollection -from synapse.util import Duration, json_encoder +from synapse.util import Duration from synapse.util.caches.expiringcache import ExpiringCache from synapse.util.caches.stream_change_cache import StreamChangeCache from synapse.util.iterutils import batch_iter +from synapse.util.json import json_encoder from synapse.util.stringutils import parse_and_validate_server_name if TYPE_CHECKING: diff --git a/synapse/storage/databases/main/devices.py b/synapse/storage/databases/main/devices.py index a28cc40a95..fc1e1c73f1 100644 --- a/synapse/storage/databases/main/devices.py +++ b/synapse/storage/databases/main/devices.py @@ -64,11 +64,11 @@ from synapse.types import ( StrCollection, get_verify_key_from_cross_signing_key, ) -from synapse.util import json_decoder, json_encoder from synapse.util.caches.descriptors import cached, cachedList from synapse.util.caches.stream_change_cache import StreamChangeCache from synapse.util.cancellation import cancellable from synapse.util.iterutils import batch_iter +from synapse.util.json import json_decoder, json_encoder from synapse.util.stringutils import shortstr if TYPE_CHECKING: diff --git a/synapse/storage/databases/main/e2e_room_keys.py b/synapse/storage/databases/main/e2e_room_keys.py index 904ae5cb58..d978e115e4 100644 --- a/synapse/storage/databases/main/e2e_room_keys.py +++ b/synapse/storage/databases/main/e2e_room_keys.py @@ -41,7 +41,7 @@ from synapse.storage.database import ( LoggingTransaction, ) from synapse.types import JsonDict, JsonSerializable, StreamKeyType -from synapse.util import json_encoder +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py index 17ccefe6b5..cc389d1582 100644 --- a/synapse/storage/databases/main/end_to_end_keys.py +++ b/synapse/storage/databases/main/end_to_end_keys.py @@ -61,10 +61,10 @@ from synapse.storage.databases.main.cache import CacheInvalidationWorkerStore from synapse.storage.engines import PostgresEngine from synapse.storage.util.id_generators import MultiWriterIdGenerator from synapse.types import JsonDict, JsonMapping, MultiWriterStreamToken -from synapse.util import json_decoder, json_encoder from synapse.util.caches.descriptors import cached, cachedList from synapse.util.cancellation import cancellable from synapse.util.iterutils import batch_iter +from synapse.util.json import json_decoder, json_encoder if TYPE_CHECKING: from synapse.handlers.e2e_keys import SignatureListItem diff --git a/synapse/storage/databases/main/event_federation.py b/synapse/storage/databases/main/event_federation.py index 26a91109df..5c9bd2e848 100644 --- a/synapse/storage/databases/main/event_federation.py +++ b/synapse/storage/databases/main/event_federation.py @@ -59,11 +59,11 @@ from synapse.storage.databases.main.events_worker import EventsWorkerStore from synapse.storage.databases.main.signatures import SignatureWorkerStore from synapse.storage.engines import PostgresEngine, Sqlite3Engine from synapse.types import JsonDict, StrCollection -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached from synapse.util.caches.lrucache import LruCache from synapse.util.cancellation import cancellable from synapse.util.iterutils import batch_iter +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/event_push_actions.py b/synapse/storage/databases/main/event_push_actions.py index f42023418e..4db0230421 100644 --- a/synapse/storage/databases/main/event_push_actions.py +++ b/synapse/storage/databases/main/event_push_actions.py @@ -107,8 +107,8 @@ from synapse.storage.database import ( from synapse.storage.databases.main.receipts import ReceiptsWorkerStore from synapse.storage.databases.main.stream import StreamWorkerStore from synapse.types import JsonDict, StrCollection -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py index a50e889b9d..b6037468b3 100644 --- a/synapse/storage/databases/main/events.py +++ b/synapse/storage/databases/main/events.py @@ -83,9 +83,9 @@ from synapse.types import ( ) from synapse.types.handlers import SLIDING_SYNC_DEFAULT_BUMP_EVENT_TYPES from synapse.types.state import StateFilter -from synapse.util import json_encoder from synapse.util.events import get_plain_text_topic_from_event_content from synapse.util.iterutils import batch_iter, sorted_topologically +from synapse.util.json import json_encoder from synapse.util.stringutils import non_null_str_or_none if TYPE_CHECKING: diff --git a/synapse/storage/databases/main/events_bg_updates.py b/synapse/storage/databases/main/events_bg_updates.py index 8a59091da0..0a0102ee64 100644 --- a/synapse/storage/databases/main/events_bg_updates.py +++ b/synapse/storage/databases/main/events_bg_updates.py @@ -58,8 +58,8 @@ from synapse.types import JsonDict, RoomStreamToken, StateMap, StrCollection from synapse.types.handlers import SLIDING_SYNC_DEFAULT_BUMP_EVENT_TYPES from synapse.types.state import StateFilter from synapse.types.storage import _BackgroundUpdates -from synapse.util import json_encoder from synapse.util.iterutils import batch_iter +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/lock.py b/synapse/storage/databases/main/lock.py index e733f65cb1..27c3578a31 100644 --- a/synapse/storage/databases/main/lock.py +++ b/synapse/storage/databases/main/lock.py @@ -38,7 +38,7 @@ from synapse.storage.database import ( LoggingTransaction, ) from synapse.types import ISynapseReactor -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string if TYPE_CHECKING: diff --git a/synapse/storage/databases/main/push_rule.py b/synapse/storage/databases/main/push_rule.py index d686140556..1860be1713 100644 --- a/synapse/storage/databases/main/push_rule.py +++ b/synapse/storage/databases/main/push_rule.py @@ -56,10 +56,11 @@ from synapse.storage.push_rule import InconsistentRuleException, RuleNotFoundExc from synapse.storage.util.id_generators import IdGenerator, MultiWriterIdGenerator from synapse.synapse_rust.push import FilteredPushRules, PushRule, PushRules from synapse.types import JsonDict -from synapse.util import json_encoder, unwrapFirstError +from synapse.util import unwrapFirstError from synapse.util.async_helpers import gather_results from synapse.util.caches.descriptors import cached, cachedList from synapse.util.caches.stream_change_cache import StreamChangeCache +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/pusher.py b/synapse/storage/databases/main/pusher.py index 9a0a12b5c1..1b2aa79ab1 100644 --- a/synapse/storage/databases/main/pusher.py +++ b/synapse/storage/databases/main/pusher.py @@ -42,8 +42,8 @@ from synapse.storage.database import ( ) from synapse.storage.util.id_generators import MultiWriterIdGenerator from synapse.types import JsonDict -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/receipts.py b/synapse/storage/databases/main/receipts.py index d74bb0184a..ff4eb9acb2 100644 --- a/synapse/storage/databases/main/receipts.py +++ b/synapse/storage/databases/main/receipts.py @@ -55,10 +55,10 @@ from synapse.types import ( PersistedPosition, StrCollection, ) -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached, cachedList from synapse.util.caches.stream_change_cache import StreamChangeCache from synapse.util.iterutils import batch_iter +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py index 6ffc3aed34..9f03c084a5 100644 --- a/synapse/storage/databases/main/room.py +++ b/synapse/storage/databases/main/room.py @@ -65,8 +65,8 @@ from synapse.storage.databases.main.cache import CacheInvalidationWorkerStore from synapse.storage.types import Cursor from synapse.storage.util.id_generators import IdGenerator, MultiWriterIdGenerator from synapse.types import JsonDict, RetentionPolicy, StrCollection, ThirdPartyInstanceID -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached, cachedList +from synapse.util.json import json_encoder from synapse.util.stringutils import MXC_REGEX if TYPE_CHECKING: diff --git a/synapse/storage/databases/main/session.py b/synapse/storage/databases/main/session.py index 8a1331d4c8..8a5fa8386c 100644 --- a/synapse/storage/databases/main/session.py +++ b/synapse/storage/databases/main/session.py @@ -30,7 +30,7 @@ from synapse.storage.database import ( LoggingTransaction, ) from synapse.types import JsonDict -from synapse.util import json_encoder +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/sliding_sync.py b/synapse/storage/databases/main/sliding_sync.py index 72ec8e6b90..f7af3e88d3 100644 --- a/synapse/storage/databases/main/sliding_sync.py +++ b/synapse/storage/databases/main/sliding_sync.py @@ -35,8 +35,8 @@ from synapse.types.handlers.sliding_sync import ( RoomStatusMap, RoomSyncConfig, ) -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/tags.py b/synapse/storage/databases/main/tags.py index 97b190bccc..94cf7f4052 100644 --- a/synapse/storage/databases/main/tags.py +++ b/synapse/storage/databases/main/tags.py @@ -30,8 +30,8 @@ from synapse.storage.database import LoggingTransaction from synapse.storage.databases.main.account_data import AccountDataWorkerStore from synapse.storage.util.id_generators import AbstractStreamIdGenerator from synapse.types import JsonDict, JsonMapping -from synapse.util import json_encoder from synapse.util.caches.descriptors import cached +from synapse.util.json import json_encoder logger = logging.getLogger(__name__) diff --git a/synapse/storage/databases/main/task_scheduler.py b/synapse/storage/databases/main/task_scheduler.py index 4956870b1a..2d4804fef6 100644 --- a/synapse/storage/databases/main/task_scheduler.py +++ b/synapse/storage/databases/main/task_scheduler.py @@ -29,7 +29,7 @@ from synapse.storage.database import ( make_in_list_sql_clause, ) from synapse.types import JsonDict, JsonMapping, ScheduledTask, TaskStatus -from synapse.util import json_encoder +from synapse.util.json import json_encoder if TYPE_CHECKING: from synapse.server import HomeServer diff --git a/synapse/storage/databases/main/ui_auth.py b/synapse/storage/databases/main/ui_auth.py index 17bd0ac09a..569925e39f 100644 --- a/synapse/storage/databases/main/ui_auth.py +++ b/synapse/storage/databases/main/ui_auth.py @@ -27,7 +27,8 @@ from synapse.api.errors import StoreError from synapse.storage._base import SQLBaseStore, db_to_json from synapse.storage.database import LoggingTransaction from synapse.types import JsonDict -from synapse.util import json_encoder, stringutils +from synapse.util import stringutils +from synapse.util.json import json_encoder @attr.s(slots=True, auto_attribs=True) diff --git a/synapse/types/__init__.py b/synapse/types/__init__.py index 2d5b07ab8f..0386cb77d6 100644 --- a/synapse/types/__init__.py +++ b/synapse/types/__init__.py @@ -116,13 +116,27 @@ StrSequence = Union[Tuple[str, ...], List[str]] # Note that this seems to require inheriting *directly* from Interface in order # for mypy-zope to realize it is an interface. -class ISynapseReactor( +class ISynapseThreadlessReactor( IReactorTCP, IReactorSSL, IReactorUNIX, IReactorPluggableNameResolver, IReactorTime, IReactorCore, + Interface, +): + """ + The interfaces necessary for Synapse to function (without threads). + + Helpful because we use `twisted.internet.testing.MemoryReactorClock` in tests which + doesn't implement `IReactorThreads`. + """ + + +# Note that this seems to require inheriting *directly* from Interface in order +# for mypy-zope to realize it is an interface. +class ISynapseReactor( + ISynapseThreadlessReactor, IReactorThreads, Interface, ): diff --git a/synapse/util/__init__.py b/synapse/util/__init__.py index 36129c3a67..2ae2e245a9 100644 --- a/synapse/util/__init__.py +++ b/synapse/util/__init__.py @@ -20,12 +20,9 @@ # import collections.abc -import json import logging import typing from typing import ( - Any, - Callable, Dict, Iterator, Mapping, @@ -36,17 +33,11 @@ from typing import ( ) import attr -from immutabledict import immutabledict from matrix_common.versionstring import get_distribution_version_string -from typing_extensions import ParamSpec -from twisted.internet import defer, task -from twisted.internet.interfaces import IDelayedCall, IReactorTime -from twisted.internet.task import LoopingCall +from twisted.internet import defer from twisted.python.failure import Failure -from synapse.logging import context - if typing.TYPE_CHECKING: pass @@ -62,41 +53,6 @@ class Duration: DAY_MS = 24 * HOUR_MS -def _reject_invalid_json(val: Any) -> None: - """Do not allow Infinity, -Infinity, or NaN values in JSON.""" - raise ValueError("Invalid JSON value: '%s'" % val) - - -def _handle_immutabledict(obj: Any) -> Dict[Any, Any]: - """Helper for json_encoder. Makes immutabledicts serializable by returning - the underlying dict - """ - if type(obj) is immutabledict: - # fishing the protected dict out of the object is a bit nasty, - # but we don't really want the overhead of copying the dict. - try: - # Safety: we catch the AttributeError immediately below. - return obj._dict - except AttributeError: - # If all else fails, resort to making a copy of the immutabledict - return dict(obj) - raise TypeError( - "Object of type %s is not JSON serializable" % obj.__class__.__name__ - ) - - -# A custom JSON encoder which: -# * handles immutabledicts -# * produces valid JSON (no NaNs etc) -# * reduces redundant whitespace -json_encoder = json.JSONEncoder( - allow_nan=False, separators=(",", ":"), default=_handle_immutabledict -) - -# Create a custom decoder to reject Python extensions to JSON. -json_decoder = json.JSONDecoder(parse_constant=_reject_invalid_json) - - def unwrapFirstError(failure: Failure) -> Failure: # Deprecated: you probably just want to catch defer.FirstError and reraise # the subFailure's value, which will do a better job of preserving stacktraces. @@ -105,129 +61,6 @@ def unwrapFirstError(failure: Failure) -> Failure: return failure.value.subFailure -P = ParamSpec("P") - - -@attr.s(slots=True) -class Clock: - """ - A Clock wraps a Twisted reactor and provides utilities on top of it. - - Args: - reactor: The Twisted reactor to use. - """ - - _reactor: IReactorTime = attr.ib() - - async def sleep(self, seconds: float) -> None: - d: defer.Deferred[float] = defer.Deferred() - with context.PreserveLoggingContext(): - self._reactor.callLater(seconds, d.callback, seconds) - await d - - def time(self) -> float: - """Returns the current system time in seconds since epoch.""" - return self._reactor.seconds() - - def time_msec(self) -> int: - """Returns the current system time in milliseconds since epoch.""" - return int(self.time() * 1000) - - def looping_call( - self, - f: Callable[P, object], - msec: float, - *args: P.args, - **kwargs: P.kwargs, - ) -> LoopingCall: - """Call a function repeatedly. - - Waits `msec` initially before calling `f` for the first time. - - If the function given to `looping_call` returns an awaitable/deferred, the next - call isn't scheduled until after the returned awaitable has finished. We get - this functionality thanks to this function being a thin wrapper around - `twisted.internet.task.LoopingCall`. - - Note that the function will be called with no logcontext, so if it is anything - other than trivial, you probably want to wrap it in run_as_background_process. - - Args: - f: The function to call repeatedly. - msec: How long to wait between calls in milliseconds. - *args: Positional arguments to pass to function. - **kwargs: Key arguments to pass to function. - """ - return self._looping_call_common(f, msec, False, *args, **kwargs) - - def looping_call_now( - self, - f: Callable[P, object], - msec: float, - *args: P.args, - **kwargs: P.kwargs, - ) -> LoopingCall: - """Call a function immediately, and then repeatedly thereafter. - - As with `looping_call`: subsequent calls are not scheduled until after the - the Awaitable returned by a previous call has finished. - - Also as with `looping_call`: the function is called with no logcontext and - you probably want to wrap it in `run_as_background_process`. - - Args: - f: The function to call repeatedly. - msec: How long to wait between calls in milliseconds. - *args: Positional arguments to pass to function. - **kwargs: Key arguments to pass to function. - """ - return self._looping_call_common(f, msec, True, *args, **kwargs) - - def _looping_call_common( - self, - f: Callable[P, object], - msec: float, - now: bool, - *args: P.args, - **kwargs: P.kwargs, - ) -> LoopingCall: - """Common functionality for `looping_call` and `looping_call_now`""" - call = task.LoopingCall(f, *args, **kwargs) - call.clock = self._reactor - d = call.start(msec / 1000.0, now=now) - d.addErrback(log_failure, "Looping call died", consumeErrors=False) - return call - - def call_later( - self, delay: float, callback: Callable, *args: Any, **kwargs: Any - ) -> IDelayedCall: - """Call something later - - Note that the function will be called with no logcontext, so if it is anything - other than trivial, you probably want to wrap it in run_as_background_process. - - Args: - delay: How long to wait in seconds. - callback: Function to call - *args: Postional arguments to pass to function. - **kwargs: Key arguments to pass to function. - """ - - def wrapped_callback(*args: Any, **kwargs: Any) -> None: - with context.PreserveLoggingContext(): - callback(*args, **kwargs) - - with context.PreserveLoggingContext(): - return self._reactor.callLater(delay, wrapped_callback, *args, **kwargs) - - def cancel_call_later(self, timer: IDelayedCall, ignore_errs: bool = False) -> None: - try: - timer.cancel() - except Exception: - if not ignore_errs: - raise - - def log_failure( failure: Failure, msg: str, consumeErrors: bool = True ) -> Optional[Failure]: diff --git a/synapse/util/async_helpers.py b/synapse/util/async_helpers.py index c21b7887f9..1c343f8d3e 100644 --- a/synapse/util/async_helpers.py +++ b/synapse/util/async_helpers.py @@ -65,7 +65,8 @@ from synapse.logging.context import ( run_coroutine_in_background, run_in_background, ) -from synapse.util import Clock +from synapse.types import ISynapseThreadlessReactor +from synapse.util.clock import Clock logger = logging.getLogger(__name__) @@ -566,7 +567,7 @@ class Linearizer: if not clock: from twisted.internet import reactor - clock = Clock(cast(IReactorTime, reactor)) + clock = Clock(cast(ISynapseThreadlessReactor, reactor)) self._clock = clock self.max_count = max_count diff --git a/synapse/util/batching_queue.py b/synapse/util/batching_queue.py index 4c0f129423..4c4037412a 100644 --- a/synapse/util/batching_queue.py +++ b/synapse/util/batching_queue.py @@ -39,7 +39,7 @@ from twisted.internet import defer from synapse.logging.context import PreserveLoggingContext, make_deferred_yieldable from synapse.metrics import SERVER_NAME_LABEL from synapse.metrics.background_process_metrics import run_as_background_process -from synapse.util import Clock +from synapse.util.clock import Clock logger = logging.getLogger(__name__) diff --git a/synapse/util/caches/expiringcache.py b/synapse/util/caches/expiringcache.py index 1962a3fdfa..305af5051c 100644 --- a/synapse/util/caches/expiringcache.py +++ b/synapse/util/caches/expiringcache.py @@ -29,8 +29,8 @@ from twisted.internet import defer from synapse.config import cache as cache_config from synapse.metrics.background_process_metrics import run_as_background_process -from synapse.util import Clock from synapse.util.caches import EvictionReason, register_cache +from synapse.util.clock import Clock logger = logging.getLogger(__name__) diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py index 927162700a..187380c433 100644 --- a/synapse/util/caches/lrucache.py +++ b/synapse/util/caches/lrucache.py @@ -46,20 +46,21 @@ from typing import ( ) from twisted.internet import defer, reactor -from twisted.internet.interfaces import IReactorTime from synapse.config import cache as cache_config from synapse.metrics.background_process_metrics import ( run_as_background_process, ) from synapse.metrics.jemalloc import get_jemalloc_stats -from synapse.util import Clock, caches +from synapse.types import ISynapseThreadlessReactor +from synapse.util import caches from synapse.util.caches import CacheMetric, EvictionReason, register_cache from synapse.util.caches.treecache import ( TreeCache, iterate_tree_cache_entry, iterate_tree_cache_items, ) +from synapse.util.clock import Clock from synapse.util.linked_list import ListNode if TYPE_CHECKING: @@ -496,7 +497,7 @@ class LruCache(Generic[KT, VT]): # Default `clock` to something sensible. Note that we rename it to # `real_clock` so that mypy doesn't think its still `Optional`. if clock is None: - real_clock = Clock(cast(IReactorTime, reactor)) + real_clock = Clock(cast(ISynapseThreadlessReactor, reactor)) else: real_clock = clock diff --git a/synapse/util/caches/response_cache.py b/synapse/util/caches/response_cache.py index 49a9151916..79e34262df 100644 --- a/synapse/util/caches/response_cache.py +++ b/synapse/util/caches/response_cache.py @@ -41,9 +41,9 @@ from synapse.logging.opentracing import ( start_active_span, start_active_span_follows_from, ) -from synapse.util import Clock from synapse.util.async_helpers import AbstractObservableDeferred, ObservableDeferred from synapse.util.caches import EvictionReason, register_cache +from synapse.util.clock import Clock logger = logging.getLogger(__name__) diff --git a/synapse/util/clock.py b/synapse/util/clock.py new file mode 100644 index 0000000000..8d6ab007ba --- /dev/null +++ b/synapse/util/clock.py @@ -0,0 +1,208 @@ +# +# This file is licensed under the Affero General Public License (AGPL) version 3. +# +# Copyright (C) 2025 New Vector, Ltd +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# See the GNU Affero General Public License for more details: +# . +# +# + + +from typing import ( + Any, + Callable, +) + +import attr +from typing_extensions import ParamSpec + +from twisted.internet import defer, task +from twisted.internet.interfaces import IDelayedCall +from twisted.internet.task import LoopingCall + +from synapse.logging import context +from synapse.types import ISynapseThreadlessReactor +from synapse.util import log_failure + +P = ParamSpec("P") + + +@attr.s(slots=True) +class Clock: + """ + A Clock wraps a Twisted reactor and provides utilities on top of it. + + Args: + reactor: The Twisted reactor to use. + """ + + _reactor: ISynapseThreadlessReactor = attr.ib() + + async def sleep(self, seconds: float) -> None: + d: defer.Deferred[float] = defer.Deferred() + with context.PreserveLoggingContext(): + self._reactor.callLater(seconds, d.callback, seconds) + await d + + def time(self) -> float: + """Returns the current system time in seconds since epoch.""" + return self._reactor.seconds() + + def time_msec(self) -> int: + """Returns the current system time in milliseconds since epoch.""" + return int(self.time() * 1000) + + def looping_call( + self, + f: Callable[P, object], + msec: float, + *args: P.args, + **kwargs: P.kwargs, + ) -> LoopingCall: + """Call a function repeatedly. + + Waits `msec` initially before calling `f` for the first time. + + If the function given to `looping_call` returns an awaitable/deferred, the next + call isn't scheduled until after the returned awaitable has finished. We get + this functionality thanks to this function being a thin wrapper around + `twisted.internet.task.LoopingCall`. + + Note that the function will be called with no logcontext, so if it is anything + other than trivial, you probably want to wrap it in run_as_background_process. + + Args: + f: The function to call repeatedly. + msec: How long to wait between calls in milliseconds. + *args: Positional arguments to pass to function. + **kwargs: Key arguments to pass to function. + """ + return self._looping_call_common(f, msec, False, *args, **kwargs) + + def looping_call_now( + self, + f: Callable[P, object], + msec: float, + *args: P.args, + **kwargs: P.kwargs, + ) -> LoopingCall: + """Call a function immediately, and then repeatedly thereafter. + + As with `looping_call`: subsequent calls are not scheduled until after the + the Awaitable returned by a previous call has finished. + + Also as with `looping_call`: the function is called with no logcontext and + you probably want to wrap it in `run_as_background_process`. + + Args: + f: The function to call repeatedly. + msec: How long to wait between calls in milliseconds. + *args: Positional arguments to pass to function. + **kwargs: Key arguments to pass to function. + """ + return self._looping_call_common(f, msec, True, *args, **kwargs) + + def _looping_call_common( + self, + f: Callable[P, object], + msec: float, + now: bool, + *args: P.args, + **kwargs: P.kwargs, + ) -> LoopingCall: + """Common functionality for `looping_call` and `looping_call_now`""" + call = task.LoopingCall(f, *args, **kwargs) + call.clock = self._reactor + d = call.start(msec / 1000.0, now=now) + d.addErrback(log_failure, "Looping call died", consumeErrors=False) + return call + + def call_later( + self, delay: float, callback: Callable, *args: Any, **kwargs: Any + ) -> IDelayedCall: + """Call something later + + Note that the function will be called with no logcontext, so if it is anything + other than trivial, you probably want to wrap it in run_as_background_process. + + Args: + delay: How long to wait in seconds. + callback: Function to call + *args: Postional arguments to pass to function. + **kwargs: Key arguments to pass to function. + """ + + def wrapped_callback(*args: Any, **kwargs: Any) -> None: + with context.PreserveLoggingContext(): + callback(*args, **kwargs) + + with context.PreserveLoggingContext(): + return self._reactor.callLater(delay, wrapped_callback, *args, **kwargs) + + def cancel_call_later(self, timer: IDelayedCall, ignore_errs: bool = False) -> None: + try: + timer.cancel() + except Exception: + if not ignore_errs: + raise + + def call_when_running( + self, + callback: Callable[P, object], + *args: P.args, + **kwargs: P.kwargs, + ) -> None: + """ + Call a function when the reactor is running. + + If the reactor has not started, the callable will be scheduled to run when it + does start. Otherwise, the callable will be invoked immediately. + + Args: + callback: Function to call + *args: Postional arguments to pass to function. + **kwargs: Key arguments to pass to function. + """ + + def wrapped_callback(*args: Any, **kwargs: Any) -> None: + # Since this callback can be invoked immediately if the reactor is already + # running, we can't always assume that we're running in the sentinel + # logcontext (i.e. we can't assert that we're in the sentinel context like + # we can in other methods). + # + # We will only be running in the sentinel logcontext if the reactor was not + # running when `call_when_running` was invoked and later starts up. + # + # assert context.current_context() is context.SENTINEL_CONTEXT + + # Because this is a callback from the reactor, we will be using the + # `sentinel` log context at this point. We want the function to log with + # some logcontext as we want to know which server the logs came from. + # + # We use `PreserveLoggingContext` to prevent our new `call_when_running` + # logcontext from finishing as soon as we exit this function, in case `f` + # returns an awaitable/deferred which would continue running and may try to + # restore the `loop_call` context when it's done (because it's trying to + # adhere to the Synapse logcontext rules.) + # + # This also ensures that we return to the `sentinel` context when we exit + # this function and yield control back to the reactor to avoid leaking the + # current logcontext to the reactor (which would then get picked up and + # associated with the next thing the reactor does) + with context.PreserveLoggingContext( + context.LoggingContext("call_when_running") + ): + # We use `run_in_background` to reset the logcontext after `f` (or the + # awaitable returned by `f`) completes to avoid leaking the current + # logcontext to the reactor + context.run_in_background(callback, *args, **kwargs) + + # We can ignore the lint here since this class is the one location + # callWhenRunning should be called. + self._reactor.callWhenRunning(wrapped_callback, *args, **kwargs) # type: ignore[prefer-synapse-clock-call-when-running] diff --git a/synapse/util/json.py b/synapse/util/json.py new file mode 100644 index 0000000000..e6db55f8e4 --- /dev/null +++ b/synapse/util/json.py @@ -0,0 +1,57 @@ +# +# This file is licensed under the Affero General Public License (AGPL) version 3. +# +# Copyright (C) 2025 New Vector, Ltd +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# See the GNU Affero General Public License for more details: +# . +# +# + +import json +from typing import ( + Any, + Dict, +) + +from immutabledict import immutabledict + + +def _reject_invalid_json(val: Any) -> None: + """Do not allow Infinity, -Infinity, or NaN values in JSON.""" + raise ValueError("Invalid JSON value: '%s'" % val) + + +def _handle_immutabledict(obj: Any) -> Dict[Any, Any]: + """Helper for json_encoder. Makes immutabledicts serializable by returning + the underlying dict + """ + if type(obj) is immutabledict: + # fishing the protected dict out of the object is a bit nasty, + # but we don't really want the overhead of copying the dict. + try: + # Safety: we catch the AttributeError immediately below. + return obj._dict + except AttributeError: + # If all else fails, resort to making a copy of the immutabledict + return dict(obj) + raise TypeError( + "Object of type %s is not JSON serializable" % obj.__class__.__name__ + ) + + +# A custom JSON encoder which: +# * handles immutabledicts +# * produces valid JSON (no NaNs etc) +# * reduces redundant whitespace +json_encoder = json.JSONEncoder( + allow_nan=False, separators=(",", ":"), default=_handle_immutabledict +) + +# Create a custom decoder to reject Python extensions to JSON. +json_decoder = json.JSONDecoder(parse_constant=_reject_invalid_json) diff --git a/synapse/util/macaroons.py b/synapse/util/macaroons.py index 6fa15543ec..d683a57ab1 100644 --- a/synapse/util/macaroons.py +++ b/synapse/util/macaroons.py @@ -28,7 +28,8 @@ import attr import pymacaroons from pymacaroons.exceptions import MacaroonVerificationFailedException -from synapse.util import Clock, stringutils +from synapse.util import stringutils +from synapse.util.clock import Clock MacaroonType = Literal["access", "delete_pusher", "session"] diff --git a/synapse/util/metrics.py b/synapse/util/metrics.py index 608a4d4848..09ccdb8ca3 100644 --- a/synapse/util/metrics.py +++ b/synapse/util/metrics.py @@ -42,7 +42,7 @@ from synapse.logging.context import ( current_context, ) from synapse.metrics import SERVER_NAME_LABEL, InFlightGauge -from synapse.util import Clock +from synapse.util.clock import Clock logger = logging.getLogger(__name__) diff --git a/synapse/util/ratelimitutils.py b/synapse/util/ratelimitutils.py index 88edc07161..695eb462bf 100644 --- a/synapse/util/ratelimitutils.py +++ b/synapse/util/ratelimitutils.py @@ -53,7 +53,7 @@ from synapse.logging.context import ( ) from synapse.logging.opentracing import start_active_span from synapse.metrics import SERVER_NAME_LABEL, Histogram, LaterGauge -from synapse.util import Clock +from synapse.util.clock import Clock if typing.TYPE_CHECKING: from contextlib import _GeneratorContextManager diff --git a/synapse/util/retryutils.py b/synapse/util/retryutils.py index 149df405b3..42a0cc7aa8 100644 --- a/synapse/util/retryutils.py +++ b/synapse/util/retryutils.py @@ -27,7 +27,7 @@ from synapse.api.errors import CodeMessageException from synapse.metrics.background_process_metrics import run_as_background_process from synapse.storage import DataStore from synapse.types import StrCollection -from synapse.util import Clock +from synapse.util.clock import Clock if TYPE_CHECKING: from synapse.notifier import Notifier diff --git a/synapse/visibility.py b/synapse/visibility.py index d460d8f4c2..662f2636d0 100644 --- a/synapse/visibility.py +++ b/synapse/visibility.py @@ -55,7 +55,7 @@ from synapse.types import ( get_domain_from_id, ) from synapse.types.state import StateFilter -from synapse.util import Clock +from synapse.util.clock import Clock logger = logging.getLogger(__name__) filtered_event_logger = logging.getLogger("synapse.visibility.filtered_event_debug") diff --git a/synmark/__main__.py b/synmark/__main__.py index 4944c2f3b0..82717c4fc7 100644 --- a/synmark/__main__.py +++ b/synmark/__main__.py @@ -62,7 +62,10 @@ def make_test( return res d.addBoth(on_done) - reactor.callWhenRunning(lambda: d.callback(True)) + # type-ignore: This is outside of Synapse (just a utility benchmark script) + # so we don't need to worry about which server the logs are coming from + # (`Clock.call_when_running` manages the logcontext for us). + reactor.callWhenRunning(lambda: d.callback(True)) # type: ignore[prefer-synapse-clock-call-when-running] reactor.run() # mypy thinks this is an object for some reason. diff --git a/synmark/suites/logging.py b/synmark/suites/logging.py index 32282ba6cb..03bf5a94a7 100644 --- a/synmark/suites/logging.py +++ b/synmark/suites/logging.py @@ -37,7 +37,7 @@ from synapse.config.logger import _setup_stdlib_logging from synapse.logging import RemoteHandler from synapse.synapse_rust import reset_logging_config from synapse.types import ISynapseReactor -from synapse.util import Clock +from synapse.util.clock import Clock class LineCounter(LineOnlyReceiver): diff --git a/tests/api/test_auth.py b/tests/api/test_auth.py index b8fb21ab0d..2f6a76970c 100644 --- a/tests/api/test_auth.py +++ b/tests/api/test_auth.py @@ -39,7 +39,7 @@ from synapse.appservice import ApplicationService from synapse.server import HomeServer from synapse.storage.databases.main.registration import TokenLookupResult from synapse.types import Requester, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/api/test_filtering.py b/tests/api/test_filtering.py index 8ad9a5a6f7..d74878a4e1 100644 --- a/tests/api/test_filtering.py +++ b/tests/api/test_filtering.py @@ -33,7 +33,7 @@ from synapse.api.filtering import Filter from synapse.api.presence import UserPresenceState from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.frozenutils import freeze from tests import unittest diff --git a/tests/api/test_urls.py b/tests/api/test_urls.py index bb46008ad2..00f54237ab 100644 --- a/tests/api/test_urls.py +++ b/tests/api/test_urls.py @@ -17,7 +17,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.urls import LoginSSORedirectURIBuilder from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/app/test_openid_listener.py b/tests/app/test_openid_listener.py index 63cb5ff46f..6ca514d557 100644 --- a/tests/app/test_openid_listener.py +++ b/tests/app/test_openid_listener.py @@ -29,7 +29,7 @@ from synapse.app.homeserver import SynapseHomeServer from synapse.config.server import parse_listener_def from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.server import make_request from tests.unittest import HomeserverTestCase diff --git a/tests/app/test_phone_stats_home.py b/tests/app/test_phone_stats_home.py index 93af614def..73c3a9fd98 100644 --- a/tests/app/test_phone_stats_home.py +++ b/tests/app/test_phone_stats_home.py @@ -2,7 +2,7 @@ import synapse from synapse.app.phone_stats_home import start_phone_stats_home from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.server import ThreadedMemoryReactorClock from tests.unittest import HomeserverTestCase diff --git a/tests/appservice/test_api.py b/tests/appservice/test_api.py index 5eba6d20c8..085dfd2d1d 100644 --- a/tests/appservice/test_api.py +++ b/tests/appservice/test_api.py @@ -26,7 +26,7 @@ from twisted.internet.testing import MemoryReactor from synapse.appservice import ApplicationService from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/appservice/test_scheduler.py b/tests/appservice/test_scheduler.py index 11319bc52d..9498ea1279 100644 --- a/tests/appservice/test_scheduler.py +++ b/tests/appservice/test_scheduler.py @@ -41,7 +41,7 @@ from synapse.events import EventBase from synapse.logging.context import make_deferred_yieldable from synapse.server import HomeServer from synapse.types import DeviceListUpdates, JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/config/test_room_directory.py b/tests/config/test_room_directory.py index 5f3d8be2a5..4e044245e2 100644 --- a/tests/config/test_room_directory.py +++ b/tests/config/test_room_directory.py @@ -27,7 +27,7 @@ import synapse.rest.client.room from synapse.config._base import RootConfig from synapse.config.room_directory import RoomDirectoryConfig from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/crypto/test_keyring.py b/tests/crypto/test_keyring.py index 80f9bd097e..1dc0de73fd 100644 --- a/tests/crypto/test_keyring.py +++ b/tests/crypto/test_keyring.py @@ -49,7 +49,7 @@ from synapse.logging.context import ( from synapse.server import HomeServer from synapse.storage.keys import FetchKeyResult from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import logcontext_clean, override_config diff --git a/tests/events/test_auto_accept_invites.py b/tests/events/test_auto_accept_invites.py index 8f1dc86984..fa7ea64105 100644 --- a/tests/events/test_auto_accept_invites.py +++ b/tests/events/test_auto_accept_invites.py @@ -41,7 +41,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import StreamToken, UserID, UserInfo, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.handlers.test_sync import generate_sync_config from tests.unittest import ( diff --git a/tests/events/test_presence_router.py b/tests/events/test_presence_router.py index f7d55223b1..696d9dd6e2 100644 --- a/tests/events/test_presence_router.py +++ b/tests/events/test_presence_router.py @@ -34,7 +34,7 @@ from synapse.rest import admin from synapse.rest.client import login, presence, room from synapse.server import HomeServer from synapse.types import JsonDict, StreamToken, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.handlers.test_sync import SyncRequestKey, generate_sync_config from tests.unittest import ( diff --git a/tests/events/test_snapshot.py b/tests/events/test_snapshot.py index 6d24730ed7..4d1dca08ef 100644 --- a/tests/events/test_snapshot.py +++ b/tests/events/test_snapshot.py @@ -26,7 +26,7 @@ from synapse.events.snapshot import EventContext from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils.event_injection import create_event diff --git a/tests/federation/test_federation_catch_up.py b/tests/federation/test_federation_catch_up.py index f99911b102..5edb651767 100644 --- a/tests/federation/test_federation_catch_up.py +++ b/tests/federation/test_federation_catch_up.py @@ -16,7 +16,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.retryutils import NotRetryingDestination from tests.test_utils import event_injection diff --git a/tests/federation/test_federation_client.py b/tests/federation/test_federation_client.py index df688cd21f..0535aed107 100644 --- a/tests/federation/test_federation_client.py +++ b/tests/federation/test_federation_client.py @@ -30,7 +30,7 @@ from synapse.events import EventBase from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.test_utils import FakeResponse, event_injection from tests.unittest import FederatingHomeserverTestCase diff --git a/tests/federation/test_federation_devices.py b/tests/federation/test_federation_devices.py index bf6204a7e3..c935669ce2 100644 --- a/tests/federation/test_federation_devices.py +++ b/tests/federation/test_federation_devices.py @@ -26,7 +26,7 @@ from twisted.internet.testing import MemoryReactor from synapse.handlers.device import DeviceListUpdater from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.retryutils import NotRetryingDestination from tests import unittest diff --git a/tests/federation/test_federation_media.py b/tests/federation/test_federation_media.py index b9ec2794a3..1e849fa605 100644 --- a/tests/federation/test_federation_media.py +++ b/tests/federation/test_federation_media.py @@ -32,7 +32,7 @@ from synapse.media.storage_provider import ( ) from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.media.test_media_storage import small_png diff --git a/tests/federation/test_federation_out_of_band_membership.py b/tests/federation/test_federation_out_of_band_membership.py index acf343930f..fa4e7c63ba 100644 --- a/tests/federation/test_federation_out_of_band_membership.py +++ b/tests/federation/test_federation_out_of_band_membership.py @@ -50,7 +50,7 @@ from synapse.types import JsonDict, MutableStateMap, StateMap from synapse.types.handlers.sliding_sync import ( StateValues, ) -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.utils import test_timeout diff --git a/tests/federation/test_federation_sender.py b/tests/federation/test_federation_sender.py index b8dd61d04f..27b69a9180 100644 --- a/tests/federation/test_federation_sender.py +++ b/tests/federation/test_federation_sender.py @@ -36,7 +36,7 @@ from synapse.rest.client import login from synapse.server import HomeServer from synapse.storage.databases.main.events_worker import EventMetadata from synapse.types import JsonDict, ReadReceipt -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/federation/test_federation_server.py b/tests/federation/test_federation_server.py index 52fd32ba85..262f94367c 100644 --- a/tests/federation/test_federation_server.py +++ b/tests/federation/test_federation_server.py @@ -40,7 +40,7 @@ from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.controllers.state import server_acl_evaluator_from_event from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/federation/transport/test_knocking.py b/tests/federation/transport/test_knocking.py index 14345be0f3..a243938255 100644 --- a/tests/federation/transport/test_knocking.py +++ b/tests/federation/transport/test_knocking.py @@ -31,7 +31,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import RoomAlias -from synapse.util import Clock +from synapse.util.clock import Clock from tests.test_utils import event_injection from tests.unittest import FederatingHomeserverTestCase, HomeserverTestCase diff --git a/tests/handlers/test_admin.py b/tests/handlers/test_admin.py index 906d241f1a..49bd3ba3f4 100644 --- a/tests/handlers/test_admin.py +++ b/tests/handlers/test_admin.py @@ -31,7 +31,7 @@ from synapse.api.room_versions import RoomVersions from synapse.rest.client import knock, login, room from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_appservice.py b/tests/handlers/test_appservice.py index a47b03b143..999d7f5e6c 100644 --- a/tests/handlers/test_appservice.py +++ b/tests/handlers/test_appservice.py @@ -45,7 +45,7 @@ from synapse.types import ( StreamKeyType, UserID, ) -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests import unittest diff --git a/tests/handlers/test_auth.py b/tests/handlers/test_auth.py index 0d9940c63e..acefd707f5 100644 --- a/tests/handlers/test_auth.py +++ b/tests/handlers/test_auth.py @@ -29,7 +29,7 @@ from synapse.api.errors import AuthError, ResourceLimitError from synapse.rest import admin from synapse.rest.client import login from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_cas.py b/tests/handlers/test_cas.py index 9de5e67863..f677f3be2a 100644 --- a/tests/handlers/test_cas.py +++ b/tests/handlers/test_cas.py @@ -25,7 +25,7 @@ from twisted.internet.testing import MemoryReactor from synapse.handlers.cas import CasResponse from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, override_config diff --git a/tests/handlers/test_deactivate_account.py b/tests/handlers/test_deactivate_account.py index b7b8387780..1b749cee1f 100644 --- a/tests/handlers/test_deactivate_account.py +++ b/tests/handlers/test_deactivate_account.py @@ -28,7 +28,7 @@ from synapse.rest.client import account, login, room from synapse.server import HomeServer from synapse.synapse_rust.push import PushRule from synapse.types import UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/handlers/test_device.py b/tests/handlers/test_device.py index 195cdfeaef..5b04da8640 100644 --- a/tests/handlers/test_device.py +++ b/tests/handlers/test_device.py @@ -35,7 +35,7 @@ from synapse.rest.client import devices, login, register from synapse.server import HomeServer from synapse.storage.databases.main.appservice import _make_exclusive_regex from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.task_scheduler import TaskScheduler from tests import unittest diff --git a/tests/handlers/test_directory.py b/tests/handlers/test_directory.py index 4d6243ef74..45b8f2353a 100644 --- a/tests/handlers/test_directory.py +++ b/tests/handlers/test_directory.py @@ -31,7 +31,7 @@ from synapse.events import EventBase from synapse.rest.client import directory, login, room from synapse.server import HomeServer from synapse.types import JsonDict, RoomAlias, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_e2e_keys.py b/tests/handlers/test_e2e_keys.py index fda485d413..4f0b1574b3 100644 --- a/tests/handlers/test_e2e_keys.py +++ b/tests/handlers/test_e2e_keys.py @@ -35,7 +35,7 @@ from synapse.handlers.device import DeviceWriterHandler from synapse.server import HomeServer from synapse.storage.databases.main.appservice import _make_exclusive_regex from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/handlers/test_e2e_room_keys.py b/tests/handlers/test_e2e_room_keys.py index 9b280659ab..910c24c167 100644 --- a/tests/handlers/test_e2e_room_keys.py +++ b/tests/handlers/test_e2e_room_keys.py @@ -27,7 +27,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.errors import SynapseError from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_federation.py b/tests/handlers/test_federation.py index 4de90e6578..a88ed6207c 100644 --- a/tests/handlers/test_federation.py +++ b/tests/handlers/test_federation.py @@ -43,7 +43,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.databases.main.events_worker import EventCacheEntry -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.events import generate_fake_event_id from tests import unittest diff --git a/tests/handlers/test_federation_event.py b/tests/handlers/test_federation_event.py index 02dd60e76d..3b3f12796e 100644 --- a/tests/handlers/test_federation_event.py +++ b/tests/handlers/test_federation_event.py @@ -39,7 +39,7 @@ from synapse.server import HomeServer from synapse.state import StateResolutionStore from synapse.state.v2 import _mainline_sort, _reverse_topological_power_sort from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import event_injection diff --git a/tests/handlers/test_message.py b/tests/handlers/test_message.py index 0a1092eae4..4262e805e7 100644 --- a/tests/handlers/test_message.py +++ b/tests/handlers/test_message.py @@ -31,7 +31,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests import unittest diff --git a/tests/handlers/test_oauth_delegation.py b/tests/handlers/test_oauth_delegation.py index b93e366b01..4640f35a1e 100644 --- a/tests/handlers/test_oauth_delegation.py +++ b/tests/handlers/test_oauth_delegation.py @@ -54,7 +54,7 @@ from synapse.rest import admin from synapse.rest.client import account, devices, keys, login, logout, register from synapse.server import HomeServer from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.server import FakeChannel from tests.test_utils import get_awaitable_result diff --git a/tests/handlers/test_oidc.py b/tests/handlers/test_oidc.py index db37e7d185..5207382f00 100644 --- a/tests/handlers/test_oidc.py +++ b/tests/handlers/test_oidc.py @@ -31,7 +31,7 @@ from synapse.handlers.sso import MappingException from synapse.http.site import SynapseRequest from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.macaroons import get_value_from_macaroon from synapse.util.stringutils import random_string diff --git a/tests/handlers/test_password_providers.py b/tests/handlers/test_password_providers.py index 0a78fe0304..aa41875063 100644 --- a/tests/handlers/test_password_providers.py +++ b/tests/handlers/test_password_providers.py @@ -35,7 +35,7 @@ from synapse.module_api import ModuleApi from synapse.rest.client import account, devices, login, logout, register from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeChannel diff --git a/tests/handlers/test_presence.py b/tests/handlers/test_presence.py index 51b6c60531..de1bc90c67 100644 --- a/tests/handlers/test_presence.py +++ b/tests/handlers/test_presence.py @@ -57,7 +57,7 @@ from synapse.server import HomeServer from synapse.storage.database import LoggingDatabaseConnection from synapse.storage.keys import FetchKeyResult from synapse.types import JsonDict, UserID, get_domain_from_id -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.replication._base import BaseMultiWorkerStreamTestCase diff --git a/tests/handlers/test_profile.py b/tests/handlers/test_profile.py index 93934e9ff7..73426c7b04 100644 --- a/tests/handlers/test_profile.py +++ b/tests/handlers/test_profile.py @@ -30,7 +30,7 @@ from synapse.api.errors import AuthError, SynapseError from synapse.rest import admin from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_receipts.py b/tests/handlers/test_receipts.py index cf04ac6e00..4febccbfcf 100644 --- a/tests/handlers/test_receipts.py +++ b/tests/handlers/test_receipts.py @@ -27,7 +27,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.constants import EduTypes, ReceiptTypes from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_register.py b/tests/handlers/test_register.py index 43ded2fc10..5e2eb8dee7 100644 --- a/tests/handlers/test_register.py +++ b/tests/handlers/test_register.py @@ -43,7 +43,7 @@ from synapse.types import ( UserID, create_requester, ) -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import override_config from tests.utils import mock_getRawHeaders diff --git a/tests/handlers/test_room_member.py b/tests/handlers/test_room_member.py index 3084f180f5..92c7c36602 100644 --- a/tests/handlers/test_room_member.py +++ b/tests/handlers/test_room_member.py @@ -15,7 +15,7 @@ from synapse.federation.federation_base import ( from synapse.federation.federation_client import SendJoinResult from synapse.server import HomeServer from synapse.types import UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase from tests.server import make_request diff --git a/tests/handlers/test_room_policy.py b/tests/handlers/test_room_policy.py index 3ea6f13cce..d1d0c484fa 100644 --- a/tests/handlers/test_room_policy.py +++ b/tests/handlers/test_room_policy.py @@ -23,7 +23,7 @@ from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import JsonDict, UserID from synapse.types.handlers.policy_server import RECOMMENDATION_OK, RECOMMENDATION_SPAM -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import event_injection diff --git a/tests/handlers/test_room_summary.py b/tests/handlers/test_room_summary.py index 27646d7365..00592b9871 100644 --- a/tests/handlers/test_room_summary.py +++ b/tests/handlers/test_room_summary.py @@ -42,7 +42,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/handlers/test_saml.py b/tests/handlers/test_saml.py index 98a4276a3a..f7cbf91113 100644 --- a/tests/handlers/test_saml.py +++ b/tests/handlers/test_saml.py @@ -30,7 +30,7 @@ from synapse.api.errors import RedirectException from synapse.module_api import ModuleApi from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, override_config diff --git a/tests/handlers/test_sliding_sync.py b/tests/handlers/test_sliding_sync.py index 8c390f0c57..1ffd15cadb 100644 --- a/tests/handlers/test_sliding_sync.py +++ b/tests/handlers/test_sliding_sync.py @@ -46,7 +46,7 @@ from synapse.storage.util.id_generators import MultiWriterIdGenerator from synapse.types import JsonDict, StateMap, StreamToken, UserID, create_requester from synapse.types.handlers.sliding_sync import PerConnectionState, SlidingSyncConfig from synapse.types.state import StateFilter -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.replication._base import BaseMultiWorkerStreamTestCase diff --git a/tests/handlers/test_sso.py b/tests/handlers/test_sso.py index 896e4fac9a..b09d0a42f5 100644 --- a/tests/handlers/test_sso.py +++ b/tests/handlers/test_sso.py @@ -27,7 +27,7 @@ from twisted.web.http_headers import Headers from synapse.api.errors import Codes, SynapseError from synapse.http.client import RawHeaders from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import SMALL_PNG, FakeResponse diff --git a/tests/handlers/test_stats.py b/tests/handlers/test_stats.py index cd17cd86e0..abec5c2e39 100644 --- a/tests/handlers/test_stats.py +++ b/tests/handlers/test_stats.py @@ -26,7 +26,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.databases.main import stats -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/handlers/test_sync.py b/tests/handlers/test_sync.py index 9d3e88c126..c61788fe90 100644 --- a/tests/handlers/test_sync.py +++ b/tests/handlers/test_sync.py @@ -50,7 +50,7 @@ from synapse.types import ( UserID, create_requester, ) -from synapse.util import Clock +from synapse.util.clock import Clock import tests.unittest import tests.utils diff --git a/tests/handlers/test_typing.py b/tests/handlers/test_typing.py index 614b12c62a..4d2807151e 100644 --- a/tests/handlers/test_typing.py +++ b/tests/handlers/test_typing.py @@ -36,7 +36,7 @@ from synapse.handlers.typing import FORGET_TIMEOUT, TypingWriterHandler from synapse.http.federation.matrix_federation_agent import MatrixFederationAgent from synapse.server import HomeServer from synapse.types import JsonDict, Requester, StreamKeyType, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import ThreadedMemoryReactorClock diff --git a/tests/handlers/test_user_directory.py b/tests/handlers/test_user_directory.py index 7458fe0885..1ba0be51a2 100644 --- a/tests/handlers/test_user_directory.py +++ b/tests/handlers/test_user_directory.py @@ -32,7 +32,7 @@ from synapse.rest.client import login, register, room, user_directory from synapse.server import HomeServer from synapse.storage.roommember import ProfileInfo from synapse.types import JsonDict, UserID, UserProfile, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.storage.test_user_directory import GetUserDirectoryTables diff --git a/tests/handlers/test_worker_lock.py b/tests/handlers/test_worker_lock.py index 3d3904eac7..61ff51ff92 100644 --- a/tests/handlers/test_worker_lock.py +++ b/tests/handlers/test_worker_lock.py @@ -26,7 +26,7 @@ from twisted.internet import defer from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.replication._base import BaseMultiWorkerStreamTestCase diff --git a/tests/http/test_matrixfederationclient.py b/tests/http/test_matrixfederationclient.py index 224883b635..44752d69cb 100644 --- a/tests/http/test_matrixfederationclient.py +++ b/tests/http/test_matrixfederationclient.py @@ -48,7 +48,7 @@ from synapse.logging.context import ( current_context, ) from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase from tests.server import FakeTransport diff --git a/tests/http/test_simple_client.py b/tests/http/test_simple_client.py index c5ead59988..25c0e1081b 100644 --- a/tests/http/test_simple_client.py +++ b/tests/http/test_simple_client.py @@ -29,7 +29,7 @@ from twisted.internet.testing import MemoryReactor from synapse.http import RequestTimedOutError from synapse.http.client import SimpleHttpClient from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/http/test_site.py b/tests/http/test_site.py index 2eca4587e7..9e6d929c9e 100644 --- a/tests/http/test_site.py +++ b/tests/http/test_site.py @@ -24,7 +24,7 @@ from twisted.internet.testing import MemoryReactor, StringTransport from synapse.app.homeserver import SynapseHomeServer from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/logging/test_opentracing.py b/tests/logging/test_opentracing.py index 5fe57d100e..d102d50138 100644 --- a/tests/logging/test_opentracing.py +++ b/tests/logging/test_opentracing.py @@ -35,7 +35,7 @@ from synapse.logging.opentracing import ( tag_args, trace_with_opname, ) -from synapse.util import Clock +from synapse.util.clock import Clock try: import opentracing @@ -159,7 +159,13 @@ class TracingScopeTestCase(TestCase): def test_overlapping_spans(self) -> None: """Overlapping spans which are not neatly nested should work""" reactor = MemoryReactorClock() - clock = Clock(reactor) + # type-ignore: mypy-zope doesn't seem to recognise that `MemoryReactorClock` + # implements `ISynapseThreadlessReactor` (combination of the normal Twisted + # Reactor/Clock interfaces), via inheritance from + # `twisted.internet.testing.MemoryReactor` and `twisted.internet.testing.Clock` + clock = Clock( + reactor # type: ignore[arg-type] + ) scopes = [] @@ -223,7 +229,13 @@ class TracingScopeTestCase(TestCase): parent. """ reactor = MemoryReactorClock() - clock = Clock(reactor) + # type-ignore: mypy-zope doesn't seem to recognise that `MemoryReactorClock` + # implements `ISynapseThreadlessReactor` (combination of the normal Twisted + # Reactor/Clock interfaces), via inheritance from + # `twisted.internet.testing.MemoryReactor` and `twisted.internet.testing.Clock` + clock = Clock( + reactor # type: ignore[arg-type] + ) scope_map: Dict[str, opentracing.Scope] = {} diff --git a/tests/media/test_media_retention.py b/tests/media/test_media_retention.py index 6e01b9aecb..aec1adb040 100644 --- a/tests/media/test_media_retention.py +++ b/tests/media/test_media_retention.py @@ -30,7 +30,7 @@ from synapse.rest import admin from synapse.rest.client import login, register, room from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import ( random_string, ) diff --git a/tests/media/test_media_storage.py b/tests/media/test_media_storage.py index bf334c0371..28c4ce676a 100644 --- a/tests/media/test_media_storage.py +++ b/tests/media/test_media_storage.py @@ -56,7 +56,7 @@ from synapse.rest import admin from synapse.rest.client import login, media from synapse.server import HomeServer from synapse.types import JsonDict, RoomAlias -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeChannel diff --git a/tests/media/test_oembed.py b/tests/media/test_oembed.py index afae7e048c..dc13c03df3 100644 --- a/tests/media/test_oembed.py +++ b/tests/media/test_oembed.py @@ -29,7 +29,7 @@ from twisted.internet.testing import MemoryReactor from synapse.media.oembed import OEmbedProvider, OEmbedResult from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/media/test_url_previewer.py b/tests/media/test_url_previewer.py index bd7190e3e9..3d706c7e90 100644 --- a/tests/media/test_url_previewer.py +++ b/tests/media/test_url_previewer.py @@ -23,7 +23,7 @@ import os from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/metrics/test_phone_home_stats.py b/tests/metrics/test_phone_home_stats.py index cf18d8635d..4462385dae 100644 --- a/tests/metrics/test_phone_home_stats.py +++ b/tests/metrics/test_phone_home_stats.py @@ -23,7 +23,7 @@ from synapse.app.phone_stats_home import ( from synapse.rest import admin, login, register, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import ThreadedMemoryReactorClock diff --git a/tests/module_api/test_account_data_manager.py b/tests/module_api/test_account_data_manager.py index 6539871c11..0397c6a786 100644 --- a/tests/module_api/test_account_data_manager.py +++ b/tests/module_api/test_account_data_manager.py @@ -23,7 +23,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.errors import SynapseError from synapse.rest import admin from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/module_api/test_api.py b/tests/module_api/test_api.py index 6b761de36d..86f987f292 100644 --- a/tests/module_api/test_api.py +++ b/tests/module_api/test_api.py @@ -36,7 +36,7 @@ from synapse.rest import admin from synapse.rest.client import login, notifications, presence, profile, room from synapse.server import HomeServer from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.events.test_presence_router import send_presence_update, sync_presence from tests.replication._base import BaseMultiWorkerStreamTestCase diff --git a/tests/module_api/test_event_unsigned_addition.py b/tests/module_api/test_event_unsigned_addition.py index 52e3858e6f..b6b43c469f 100644 --- a/tests/module_api/test_event_unsigned_addition.py +++ b/tests/module_api/test_event_unsigned_addition.py @@ -24,7 +24,7 @@ from synapse.events import EventBase from synapse.rest import admin, login, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/module_api/test_spamchecker.py b/tests/module_api/test_spamchecker.py index fa19232ee9..3f4d1d9d5f 100644 --- a/tests/module_api/test_spamchecker.py +++ b/tests/module_api/test_spamchecker.py @@ -20,7 +20,7 @@ from synapse.config.server import DEFAULT_ROOM_VERSION from synapse.rest import admin, login, room, room_upgrade_rest_servlet from synapse.server import HomeServer from synapse.types import Codes, JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.server import FakeChannel from tests.unittest import HomeserverTestCase diff --git a/tests/push/test_bulk_push_rule_evaluator.py b/tests/push/test_bulk_push_rule_evaluator.py index 7342a72dff..560d7234ec 100644 --- a/tests/push/test_bulk_push_rule_evaluator.py +++ b/tests/push/test_bulk_push_rule_evaluator.py @@ -34,7 +34,7 @@ from synapse.rest import admin from synapse.rest.client import login, push_rule, register, room from synapse.server import HomeServer from synapse.types import JsonDict, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, override_config diff --git a/tests/push/test_email.py b/tests/push/test_email.py index 4d9e42ac2c..80a22044dd 100644 --- a/tests/push/test_email.py +++ b/tests/push/test_email.py @@ -35,7 +35,7 @@ from synapse.push.emailpusher import EmailPusher from synapse.rest.client import login, room from synapse.rest.synapse.client.unsubscribe import UnsubscribeResource from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.server import FakeSite, make_request from tests.unittest import HomeserverTestCase diff --git a/tests/push/test_http.py b/tests/push/test_http.py index 370233c730..4c8aae5782 100644 --- a/tests/push/test_http.py +++ b/tests/push/test_http.py @@ -32,7 +32,7 @@ from synapse.rest.admin.experimental_features import ExperimentalFeature from synapse.rest.client import login, push_rule, pusher, receipts, room, versions from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, override_config diff --git a/tests/push/test_push_rule_evaluator.py b/tests/push/test_push_rule_evaluator.py index 3a351acffa..718c9614e5 100644 --- a/tests/push/test_push_rule_evaluator.py +++ b/tests/push/test_push_rule_evaluator.py @@ -36,7 +36,7 @@ from synapse.server import HomeServer from synapse.storage.databases.main.appservice import _make_exclusive_regex from synapse.synapse_rust.push import PushRuleEvaluator from synapse.types import JsonDict, JsonMapping, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.frozenutils import freeze from tests import unittest diff --git a/tests/replication/_base.py b/tests/replication/_base.py index e756021937..36d3213908 100644 --- a/tests/replication/_base.py +++ b/tests/replication/_base.py @@ -38,7 +38,7 @@ from synapse.replication.tcp.protocol import ( ) from synapse.replication.tcp.resource import ReplicationStreamProtocolFactory from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeTransport diff --git a/tests/replication/storage/_base.py b/tests/replication/storage/_base.py index 97e744127c..fb99cb2335 100644 --- a/tests/replication/storage/_base.py +++ b/tests/replication/storage/_base.py @@ -25,7 +25,7 @@ from unittest.mock import Mock from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseStreamTestCase diff --git a/tests/replication/storage/test_events.py b/tests/replication/storage/test_events.py index b3ca204995..fce3269005 100644 --- a/tests/replication/storage/test_events.py +++ b/tests/replication/storage/test_events.py @@ -38,7 +38,7 @@ from synapse.storage.databases.main.event_push_actions import ( from synapse.storage.databases.main.events_worker import EventsWorkerStore from synapse.storage.roommember import RoomsForUser from synapse.types import PersistedEventPosition -from synapse.util import Clock +from synapse.util.clock import Clock from ._base import BaseWorkerStoreTestCase diff --git a/tests/replication/tcp/streams/test_events.py b/tests/replication/tcp/streams/test_events.py index cd6fe53a96..782dad39f5 100644 --- a/tests/replication/tcp/streams/test_events.py +++ b/tests/replication/tcp/streams/test_events.py @@ -38,7 +38,7 @@ from synapse.replication.tcp.streams.events import ( from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseStreamTestCase from tests.test_utils.event_injection import inject_event, inject_member_event diff --git a/tests/replication/tcp/streams/test_thread_subscriptions.py b/tests/replication/tcp/streams/test_thread_subscriptions.py index 7283aa851e..04e46b9d93 100644 --- a/tests/replication/tcp/streams/test_thread_subscriptions.py +++ b/tests/replication/tcp/streams/test_thread_subscriptions.py @@ -20,7 +20,7 @@ from synapse.replication.tcp.streams._base import ( ) from synapse.server import HomeServer from synapse.storage.database import LoggingTransaction -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseStreamTestCase diff --git a/tests/replication/test_auth.py b/tests/replication/test_auth.py index 640ed4e8f3..30f636b3f1 100644 --- a/tests/replication/test_auth.py +++ b/tests/replication/test_auth.py @@ -24,7 +24,7 @@ from twisted.internet.testing import MemoryReactor from synapse.rest.client import register from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase from tests.server import FakeChannel, make_request diff --git a/tests/replication/test_federation_ack.py b/tests/replication/test_federation_ack.py index 440c1d45af..e6b9ea5383 100644 --- a/tests/replication/test_federation_ack.py +++ b/tests/replication/test_federation_ack.py @@ -28,7 +28,7 @@ from synapse.replication.tcp.commands import FederationAckCommand from synapse.replication.tcp.protocol import IReplicationConnection from synapse.replication.tcp.streams.federation import FederationStream from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/replication/test_federation_sender_shard.py b/tests/replication/test_federation_sender_shard.py index 1fed4ec631..92259f2542 100644 --- a/tests/replication/test_federation_sender_shard.py +++ b/tests/replication/test_federation_sender_shard.py @@ -41,7 +41,7 @@ from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.keys import FetchKeyResult from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase from tests.server import get_clock diff --git a/tests/replication/test_multi_media_repo.py b/tests/replication/test_multi_media_repo.py index 228a803c1d..f712ad1fe3 100644 --- a/tests/replication/test_multi_media_repo.py +++ b/tests/replication/test_multi_media_repo.py @@ -30,7 +30,7 @@ from twisted.web.server import Request from synapse.rest import admin from synapse.rest.client import login, media from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.http import ( TestServerTLSConnectionFactory, diff --git a/tests/replication/test_pusher_shard.py b/tests/replication/test_pusher_shard.py index d63054c631..033711b9b8 100644 --- a/tests/replication/test_pusher_shard.py +++ b/tests/replication/test_pusher_shard.py @@ -27,7 +27,7 @@ from twisted.internet.testing import MemoryReactor from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase diff --git a/tests/replication/test_sharded_event_persister.py b/tests/replication/test_sharded_event_persister.py index 797ad003ef..f37394c1f5 100644 --- a/tests/replication/test_sharded_event_persister.py +++ b/tests/replication/test_sharded_event_persister.py @@ -27,7 +27,7 @@ from synapse.rest import admin from synapse.rest.client import login, room, sync from synapse.server import HomeServer from synapse.storage.util.id_generators import MultiWriterIdGenerator -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase from tests.server import make_request diff --git a/tests/replication/test_sharded_receipts.py b/tests/replication/test_sharded_receipts.py index 6b3ecdad78..b986f33542 100644 --- a/tests/replication/test_sharded_receipts.py +++ b/tests/replication/test_sharded_receipts.py @@ -28,7 +28,7 @@ from synapse.rest.client import login, receipts, room, sync from synapse.server import HomeServer from synapse.storage.util.id_generators import MultiWriterIdGenerator from synapse.types import StreamToken -from synapse.util import Clock +from synapse.util.clock import Clock from tests.replication._base import BaseMultiWorkerStreamTestCase from tests.server import make_request diff --git a/tests/rest/admin/test_admin.py b/tests/rest/admin/test_admin.py index b74e8388e9..2a17389feb 100644 --- a/tests/rest/admin/test_admin.py +++ b/tests/rest/admin/test_admin.py @@ -33,7 +33,7 @@ from synapse.rest.admin import VersionServlet from synapse.rest.client import login, media, room from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import SMALL_PNG diff --git a/tests/rest/admin/test_background_updates.py b/tests/rest/admin/test_background_updates.py index dd116e79f1..25112baaa2 100644 --- a/tests/rest/admin/test_background_updates.py +++ b/tests/rest/admin/test_background_updates.py @@ -30,7 +30,7 @@ from synapse.rest.client import login from synapse.server import HomeServer from synapse.storage.background_updates import BackgroundUpdater from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/admin/test_device.py b/tests/rest/admin/test_device.py index c564e0c9a7..4dff59e180 100644 --- a/tests/rest/admin/test_device.py +++ b/tests/rest/admin/test_device.py @@ -29,7 +29,7 @@ from synapse.api.errors import Codes from synapse.handlers.device import DeviceWriterHandler from synapse.rest.client import devices, login from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/admin/test_event_reports.py b/tests/rest/admin/test_event_reports.py index a6f958658f..28be7fcd97 100644 --- a/tests/rest/admin/test_event_reports.py +++ b/tests/rest/admin/test_event_reports.py @@ -27,7 +27,7 @@ from synapse.api.errors import Codes from synapse.rest.client import login, reporting, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/admin/test_federation.py b/tests/rest/admin/test_federation.py index cfea480bf0..d0b57d1faa 100644 --- a/tests/rest/admin/test_federation.py +++ b/tests/rest/admin/test_federation.py @@ -29,7 +29,7 @@ from synapse.api.errors import Codes from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/admin/test_media.py b/tests/rest/admin/test_media.py index f863b5f8e7..3bf9f67e09 100644 --- a/tests/rest/admin/test_media.py +++ b/tests/rest/admin/test_media.py @@ -32,7 +32,7 @@ from synapse.api.errors import Codes from synapse.media.filepath import MediaFilePaths from synapse.rest.client import login, profile, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import SMALL_CMYK_JPEG, SMALL_PNG diff --git a/tests/rest/admin/test_registration_tokens.py b/tests/rest/admin/test_registration_tokens.py index b8e111c804..9afe86b724 100644 --- a/tests/rest/admin/test_registration_tokens.py +++ b/tests/rest/admin/test_registration_tokens.py @@ -28,7 +28,7 @@ import synapse.rest.admin from synapse.api.errors import Codes from synapse.rest.client import login from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/admin/test_room.py b/tests/rest/admin/test_room.py index ee5d0419ab..30b2de26e4 100644 --- a/tests/rest/admin/test_room.py +++ b/tests/rest/admin/test_room.py @@ -45,7 +45,7 @@ from synapse.storage.databases.main.purge_events import ( purge_room_tables_with_room_id_column, ) from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.task_scheduler import TaskScheduler from tests import unittest diff --git a/tests/rest/admin/test_scheduled_tasks.py b/tests/rest/admin/test_scheduled_tasks.py index ea7afc0101..16b80e214b 100644 --- a/tests/rest/admin/test_scheduled_tasks.py +++ b/tests/rest/admin/test_scheduled_tasks.py @@ -22,7 +22,7 @@ from synapse.api.errors import Codes from synapse.rest.client import login from synapse.server import HomeServer from synapse.types import JsonMapping, ScheduledTask, TaskStatus -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/admin/test_server_notice.py b/tests/rest/admin/test_server_notice.py index 1f77e31d48..ebb6867d7c 100644 --- a/tests/rest/admin/test_server_notice.py +++ b/tests/rest/admin/test_server_notice.py @@ -28,7 +28,7 @@ from synapse.rest.client import login, room, sync from synapse.server import HomeServer from synapse.storage.roommember import RoomsForUser from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests import unittest diff --git a/tests/rest/admin/test_statistics.py b/tests/rest/admin/test_statistics.py index 10efc4ef8b..4026c47a23 100644 --- a/tests/rest/admin/test_statistics.py +++ b/tests/rest/admin/test_statistics.py @@ -29,7 +29,7 @@ from synapse.api.errors import Codes from synapse.rest.client import login from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import SMALL_PNG diff --git a/tests/rest/admin/test_user.py b/tests/rest/admin/test_user.py index 4432b6a7a0..ca41cd6c31 100644 --- a/tests/rest/admin/test_user.py +++ b/tests/rest/admin/test_user.py @@ -61,7 +61,7 @@ from synapse.rest.client import ( from synapse.server import HomeServer from synapse.storage.databases.main.client_ips import LAST_SEEN_GRANULARITY from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.replication._base import BaseMultiWorkerStreamTestCase diff --git a/tests/rest/admin/test_username_available.py b/tests/rest/admin/test_username_available.py index 9c3ab3e64c..b2c1d7ac0a 100644 --- a/tests/rest/admin/test_username_available.py +++ b/tests/rest/admin/test_username_available.py @@ -26,7 +26,7 @@ import synapse.rest.admin from synapse.api.errors import Codes, SynapseError from synapse.rest.client import login from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/sliding_sync/test_connection_tracking.py b/tests/rest/client/sliding_sync/test_connection_tracking.py index f8ce1104a8..16d13fcc86 100644 --- a/tests/rest/client/sliding_sync/test_connection_tracking.py +++ b/tests/rest/client/sliding_sync/test_connection_tracking.py @@ -21,7 +21,7 @@ import synapse.rest.admin from synapse.api.constants import EventTypes from synapse.rest.client import login, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_extension_account_data.py b/tests/rest/client/sliding_sync/test_extension_account_data.py index 5949065722..8e08b4a2ac 100644 --- a/tests/rest/client/sliding_sync/test_extension_account_data.py +++ b/tests/rest/client/sliding_sync/test_extension_account_data.py @@ -24,7 +24,7 @@ from synapse.api.constants import AccountDataTypes from synapse.rest.client import login, room, sendtodevice, sync from synapse.server import HomeServer from synapse.types import StreamKeyType -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.server import TimedOutException diff --git a/tests/rest/client/sliding_sync/test_extension_e2ee.py b/tests/rest/client/sliding_sync/test_extension_e2ee.py index baf6a5882e..4a5e407038 100644 --- a/tests/rest/client/sliding_sync/test_extension_e2ee.py +++ b/tests/rest/client/sliding_sync/test_extension_e2ee.py @@ -21,7 +21,7 @@ import synapse.rest.admin from synapse.rest.client import devices, login, room, sync from synapse.server import HomeServer from synapse.types import JsonDict, StreamKeyType -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.server import TimedOutException diff --git a/tests/rest/client/sliding_sync/test_extension_receipts.py b/tests/rest/client/sliding_sync/test_extension_receipts.py index 1bba3038db..8c02217cde 100644 --- a/tests/rest/client/sliding_sync/test_extension_receipts.py +++ b/tests/rest/client/sliding_sync/test_extension_receipts.py @@ -22,7 +22,7 @@ from synapse.api.constants import EduTypes, ReceiptTypes from synapse.rest.client import login, receipts, room, sync from synapse.server import HomeServer from synapse.types import StreamKeyType -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.server import TimedOutException diff --git a/tests/rest/client/sliding_sync/test_extension_thread_subscriptions.py b/tests/rest/client/sliding_sync/test_extension_thread_subscriptions.py index 775c4f96c9..4e151b9aae 100644 --- a/tests/rest/client/sliding_sync/test_extension_thread_subscriptions.py +++ b/tests/rest/client/sliding_sync/test_extension_thread_subscriptions.py @@ -21,7 +21,7 @@ import synapse.rest.admin from synapse.rest.client import login, room, sync, thread_subscriptions from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_extension_to_device.py b/tests/rest/client/sliding_sync/test_extension_to_device.py index 151a5be665..a77b0a2e9f 100644 --- a/tests/rest/client/sliding_sync/test_extension_to_device.py +++ b/tests/rest/client/sliding_sync/test_extension_to_device.py @@ -22,7 +22,7 @@ import synapse.rest.admin from synapse.rest.client import login, sendtodevice, sync from synapse.server import HomeServer from synapse.types import JsonDict, StreamKeyType -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.server import TimedOutException diff --git a/tests/rest/client/sliding_sync/test_extension_typing.py b/tests/rest/client/sliding_sync/test_extension_typing.py index 37c90d6ec2..68b935aaf9 100644 --- a/tests/rest/client/sliding_sync/test_extension_typing.py +++ b/tests/rest/client/sliding_sync/test_extension_typing.py @@ -22,7 +22,7 @@ from synapse.api.constants import EduTypes from synapse.rest.client import login, room, sync from synapse.server import HomeServer from synapse.types import StreamKeyType -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.server import TimedOutException diff --git a/tests/rest/client/sliding_sync/test_extensions.py b/tests/rest/client/sliding_sync/test_extensions.py index 0643596e59..1c167b0414 100644 --- a/tests/rest/client/sliding_sync/test_extensions.py +++ b/tests/rest/client/sliding_sync/test_extensions.py @@ -23,7 +23,7 @@ import synapse.rest.admin from synapse.api.constants import ReceiptTypes from synapse.rest.client import login, receipts, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_lists_filters.py b/tests/rest/client/sliding_sync/test_lists_filters.py index 57d00a2a7a..3b7b2a16d8 100644 --- a/tests/rest/client/sliding_sync/test_lists_filters.py +++ b/tests/rest/client/sliding_sync/test_lists_filters.py @@ -28,7 +28,7 @@ from synapse.events import StrippedStateEvent from synapse.rest.client import login, room, sync, tags from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_room_subscriptions.py b/tests/rest/client/sliding_sync/test_room_subscriptions.py index b78e4f2045..811478f1ba 100644 --- a/tests/rest/client/sliding_sync/test_room_subscriptions.py +++ b/tests/rest/client/sliding_sync/test_room_subscriptions.py @@ -22,7 +22,7 @@ import synapse.rest.admin from synapse.api.constants import EventTypes, HistoryVisibility from synapse.rest.client import login, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_rooms_invites.py b/tests/rest/client/sliding_sync/test_rooms_invites.py index a0f4ccd2cc..5a463303dd 100644 --- a/tests/rest/client/sliding_sync/test_rooms_invites.py +++ b/tests/rest/client/sliding_sync/test_rooms_invites.py @@ -22,7 +22,7 @@ from synapse.api.constants import EventTypes, HistoryVisibility from synapse.rest.client import login, room, sync from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_rooms_meta.py b/tests/rest/client/sliding_sync/test_rooms_meta.py index 4559bc7646..9e3f8aaf94 100644 --- a/tests/rest/client/sliding_sync/test_rooms_meta.py +++ b/tests/rest/client/sliding_sync/test_rooms_meta.py @@ -22,7 +22,7 @@ from synapse.api.constants import EventContentFields, EventTypes, Membership from synapse.api.room_versions import RoomVersions from synapse.rest.client import login, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.test_utils.event_injection import create_event diff --git a/tests/rest/client/sliding_sync/test_rooms_required_state.py b/tests/rest/client/sliding_sync/test_rooms_required_state.py index cfff167c6e..210280bc48 100644 --- a/tests/rest/client/sliding_sync/test_rooms_required_state.py +++ b/tests/rest/client/sliding_sync/test_rooms_required_state.py @@ -23,7 +23,7 @@ from synapse.api.constants import EventContentFields, EventTypes, JoinRules, Mem from synapse.handlers.sliding_sync import StateValues from synapse.rest.client import knock, login, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase from tests.test_utils.event_injection import mark_event_as_partial_state diff --git a/tests/rest/client/sliding_sync/test_rooms_timeline.py b/tests/rest/client/sliding_sync/test_rooms_timeline.py index 3d950eb20b..44a6068c11 100644 --- a/tests/rest/client/sliding_sync/test_rooms_timeline.py +++ b/tests/rest/client/sliding_sync/test_rooms_timeline.py @@ -23,7 +23,7 @@ from synapse.api.constants import EventTypes from synapse.rest.client import login, room, sync from synapse.server import HomeServer from synapse.types import StrSequence -from synapse.util import Clock +from synapse.util.clock import Clock from tests.rest.client.sliding_sync.test_sliding_sync import SlidingSyncBase diff --git a/tests/rest/client/sliding_sync/test_sliding_sync.py b/tests/rest/client/sliding_sync/test_sliding_sync.py index ea4ee16359..8da5863b3a 100644 --- a/tests/rest/client/sliding_sync/test_sliding_sync.py +++ b/tests/rest/client/sliding_sync/test_sliding_sync.py @@ -42,7 +42,7 @@ from synapse.types import ( StreamKeyType, StreamToken, ) -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests import unittest diff --git a/tests/rest/client/test_account.py b/tests/rest/client/test_account.py index 9a3202bd93..773f49dfc9 100644 --- a/tests/rest/client/test_account.py +++ b/tests/rest/client/test_account.py @@ -39,7 +39,7 @@ from synapse.rest.synapse.client.password_reset import PasswordResetSubmitTokenR from synapse.server import HomeServer from synapse.storage._base import db_to_json from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeSite, make_request diff --git a/tests/rest/client/test_auth.py b/tests/rest/client/test_auth.py index 4fe506845c..f5b7f95721 100644 --- a/tests/rest/client/test_auth.py +++ b/tests/rest/client/test_auth.py @@ -35,7 +35,7 @@ from synapse.rest.synapse.client import build_synapse_client_resource_tree from synapse.server import HomeServer from synapse.storage.database import LoggingTransaction from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.handlers.test_oidc import HAS_OIDC diff --git a/tests/rest/client/test_capabilities.py b/tests/rest/client/test_capabilities.py index 8ae1cc935a..0eec313061 100644 --- a/tests/rest/client/test_capabilities.py +++ b/tests/rest/client/test_capabilities.py @@ -25,7 +25,7 @@ import synapse.rest.admin from synapse.api.room_versions import KNOWN_ROOM_VERSIONS from synapse.rest.client import capabilities, login from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/rest/client/test_consent.py b/tests/rest/client/test_consent.py index 1a64b3984f..d127f3abd2 100644 --- a/tests/rest/client/test_consent.py +++ b/tests/rest/client/test_consent.py @@ -28,7 +28,7 @@ from synapse.api.urls import ConsentURIBuilder from synapse.rest.client import login, room from synapse.rest.consent import consent_resource from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeSite, make_request diff --git a/tests/rest/client/test_delayed_events.py b/tests/rest/client/test_delayed_events.py index 4b338d333f..221a4902f2 100644 --- a/tests/rest/client/test_delayed_events.py +++ b/tests/rest/client/test_delayed_events.py @@ -26,7 +26,7 @@ from synapse.rest import admin from synapse.rest.client import delayed_events, login, room, versions from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import HomeserverTestCase diff --git a/tests/rest/client/test_devices.py b/tests/rest/client/test_devices.py index 309e6ec686..de80b7c186 100644 --- a/tests/rest/client/test_devices.py +++ b/tests/rest/client/test_devices.py @@ -29,7 +29,7 @@ from synapse.rest import admin, devices, sync from synapse.rest.client import keys, login, register from synapse.server import HomeServer from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_directory.py b/tests/rest/client/test_directory.py index 6548ac6fa8..f67f495dd2 100644 --- a/tests/rest/client/test_directory.py +++ b/tests/rest/client/test_directory.py @@ -26,7 +26,7 @@ from synapse.rest import admin from synapse.rest.client import directory, login, room from synapse.server import HomeServer from synapse.types import RoomAlias, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests import unittest diff --git a/tests/rest/client/test_ephemeral_message.py b/tests/rest/client/test_ephemeral_message.py index 5b5c220825..6d806c630d 100644 --- a/tests/rest/client/test_ephemeral_message.py +++ b/tests/rest/client/test_ephemeral_message.py @@ -26,7 +26,7 @@ from synapse.rest import admin from synapse.rest.client import room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_events.py b/tests/rest/client/test_events.py index 142509bbf7..65371f4c7e 100644 --- a/tests/rest/client/test_events.py +++ b/tests/rest/client/test_events.py @@ -29,7 +29,7 @@ import synapse.rest.admin from synapse.api.constants import EduTypes from synapse.rest.client import events, login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_filter.py b/tests/rest/client/test_filter.py index 4153fb322d..0897c67ac3 100644 --- a/tests/rest/client/test_filter.py +++ b/tests/rest/client/test_filter.py @@ -25,7 +25,7 @@ from synapse.api.errors import Codes from synapse.rest.client import filter from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_identity.py b/tests/rest/client/test_identity.py index 87af18f473..cc29d0c01d 100644 --- a/tests/rest/client/test_identity.py +++ b/tests/rest/client/test_identity.py @@ -25,7 +25,7 @@ from twisted.internet.testing import MemoryReactor import synapse.rest.admin from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_login.py b/tests/rest/client/test_login.py index 2f70a7a87e..c54e409a6c 100644 --- a/tests/rest/client/test_login.py +++ b/tests/rest/client/test_login.py @@ -52,7 +52,7 @@ from synapse.rest.client.account import WhoamiRestServlet from synapse.rest.synapse.client import build_synapse_client_resource_tree from synapse.server import HomeServer from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.handlers.test_oidc import HAS_OIDC diff --git a/tests/rest/client/test_login_token_request.py b/tests/rest/client/test_login_token_request.py index 202d2cf351..835336f3d9 100644 --- a/tests/rest/client/test_login_token_request.py +++ b/tests/rest/client/test_login_token_request.py @@ -24,7 +24,7 @@ from twisted.internet.testing import MemoryReactor from synapse.rest import admin from synapse.rest.client import login, login_token_request, versions from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/rest/client/test_media.py b/tests/rest/client/test_media.py index ec6760feea..91bf94b672 100644 --- a/tests/rest/client/test_media.py +++ b/tests/rest/client/test_media.py @@ -59,7 +59,7 @@ from synapse.rest import admin from synapse.rest.client import login, media from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import parse_and_validate_mxc_uri from tests import unittest diff --git a/tests/rest/client/test_mutual_rooms.py b/tests/rest/client/test_mutual_rooms.py index 2e37284680..8580d09006 100644 --- a/tests/rest/client/test_mutual_rooms.py +++ b/tests/rest/client/test_mutual_rooms.py @@ -25,7 +25,7 @@ from twisted.internet.testing import MemoryReactor import synapse.rest.admin from synapse.rest.client import login, mutual_rooms, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeChannel diff --git a/tests/rest/client/test_notifications.py b/tests/rest/client/test_notifications.py index ec66567817..e00152389b 100644 --- a/tests/rest/client/test_notifications.py +++ b/tests/rest/client/test_notifications.py @@ -26,7 +26,7 @@ from twisted.internet.testing import MemoryReactor import synapse.rest.admin from synapse.rest.client import login, notifications, receipts, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/rest/client/test_owned_state.py b/tests/rest/client/test_owned_state.py index 386b95d616..f927d74c37 100644 --- a/tests/rest/client/test_owned_state.py +++ b/tests/rest/client/test_owned_state.py @@ -10,7 +10,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/rest/client/test_password_policy.py b/tests/rest/client/test_password_policy.py index 33bab684e3..5e98d8f1fd 100644 --- a/tests/rest/client/test_password_policy.py +++ b/tests/rest/client/test_password_policy.py @@ -28,7 +28,7 @@ from synapse.api.errors import Codes from synapse.rest import admin from synapse.rest.client import account, login, password_policy, register from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_power_levels.py b/tests/rest/client/test_power_levels.py index 39ea9acef6..41610891fc 100644 --- a/tests/rest/client/test_power_levels.py +++ b/tests/rest/client/test_power_levels.py @@ -27,7 +27,7 @@ from synapse.events.utils import CANONICALJSON_MAX_INT, CANONICALJSON_MIN_INT from synapse.rest import admin from synapse.rest.client import login, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/rest/client/test_presence.py b/tests/rest/client/test_presence.py index 7138cc92c2..5256c933e0 100644 --- a/tests/rest/client/test_presence.py +++ b/tests/rest/client/test_presence.py @@ -26,7 +26,7 @@ from synapse.handlers.presence import PresenceHandler from synapse.rest.client import presence from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/rest/client/test_profile.py b/tests/rest/client/test_profile.py index 936e573bcd..18b3d3a089 100644 --- a/tests/rest/client/test_profile.py +++ b/tests/rest/client/test_profile.py @@ -36,7 +36,7 @@ from synapse.rest.client import login, profile, room from synapse.server import HomeServer from synapse.storage.databases.main.profile import MAX_PROFILE_SIZE from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.utils import USE_POSTGRES_FOR_TESTS diff --git a/tests/rest/client/test_read_marker.py b/tests/rest/client/test_read_marker.py index a27eb9453b..c8bb0da5e6 100644 --- a/tests/rest/client/test_read_marker.py +++ b/tests/rest/client/test_read_marker.py @@ -25,7 +25,7 @@ from synapse.api.constants import EventTypes from synapse.rest import admin from synapse.rest.client import login, read_marker, register, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_receipts.py b/tests/rest/client/test_receipts.py index ae4818c412..0c1b631b8e 100644 --- a/tests/rest/client/test_receipts.py +++ b/tests/rest/client/test_receipts.py @@ -28,7 +28,7 @@ from synapse.api.constants import EduTypes, EventTypes, HistoryVisibility, Recei from synapse.rest.client import login, receipts, room, sync from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_redactions.py b/tests/rest/client/test_redactions.py index d435a9e393..e3ca108d03 100644 --- a/tests/rest/client/test_redactions.py +++ b/tests/rest/client/test_redactions.py @@ -32,7 +32,7 @@ from synapse.server import HomeServer from synapse.storage._base import db_to_json from synapse.storage.database import LoggingTransaction from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, override_config diff --git a/tests/rest/client/test_register.py b/tests/rest/client/test_register.py index 0ffc64dd1f..c7c81aa81c 100644 --- a/tests/rest/client/test_register.py +++ b/tests/rest/client/test_register.py @@ -39,7 +39,7 @@ from synapse.rest.client import account, account_validity, login, logout, regist from synapse.server import HomeServer from synapse.storage._base import db_to_json from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import ThreadedMemoryReactorClock diff --git a/tests/rest/client/test_relations.py b/tests/rest/client/test_relations.py index fd1e87296c..21fb86367a 100644 --- a/tests/rest/client/test_relations.py +++ b/tests/rest/client/test_relations.py @@ -30,7 +30,7 @@ from synapse.rest import admin from synapse.rest.client import login, register, relations, room, sync from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeChannel diff --git a/tests/rest/client/test_rendezvous.py b/tests/rest/client/test_rendezvous.py index 01401f73da..160f852705 100644 --- a/tests/rest/client/test_rendezvous.py +++ b/tests/rest/client/test_rendezvous.py @@ -28,7 +28,7 @@ from twisted.web.resource import Resource from synapse.rest.client import rendezvous from synapse.rest.synapse.client.rendezvous import MSC4108RendezvousSessionResource from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/rest/client/test_reporting.py b/tests/rest/client/test_reporting.py index 5e5af34b42..0fd02f65a6 100644 --- a/tests/rest/client/test_reporting.py +++ b/tests/rest/client/test_reporting.py @@ -26,7 +26,7 @@ import synapse.rest.admin from synapse.rest.client import login, reporting, room from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/rest/client/test_retention.py b/tests/rest/client/test_retention.py index 24b007f779..7a816a66e0 100644 --- a/tests/rest/client/test_retention.py +++ b/tests/rest/client/test_retention.py @@ -27,7 +27,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import JsonDict, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.visibility import filter_events_for_client from tests import unittest diff --git a/tests/rest/client/test_rooms.py b/tests/rest/client/test_rooms.py index d3b5e26132..feae5f77cd 100644 --- a/tests/rest/client/test_rooms.py +++ b/tests/rest/client/test_rooms.py @@ -60,7 +60,7 @@ from synapse.rest.client import ( ) from synapse.server import HomeServer from synapse.types import JsonDict, RoomAlias, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests import unittest diff --git a/tests/rest/client/test_shadow_banned.py b/tests/rest/client/test_shadow_banned.py index b990a8600b..bb240b943e 100644 --- a/tests/rest/client/test_shadow_banned.py +++ b/tests/rest/client/test_shadow_banned.py @@ -34,7 +34,7 @@ from synapse.rest.client import ( ) from synapse.server import HomeServer from synapse.types import UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_sync.py b/tests/rest/client/test_sync.py index 7f3cf5affb..e949bb69e6 100644 --- a/tests/rest/client/test_sync.py +++ b/tests/rest/client/test_sync.py @@ -36,7 +36,7 @@ from synapse.api.constants import ( from synapse.rest.client import devices, knock, login, read_marker, receipts, room, sync from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.federation.transport.test_knocking import ( diff --git a/tests/rest/client/test_third_party_rules.py b/tests/rest/client/test_third_party_rules.py index f14ca8237a..4161faa11f 100644 --- a/tests/rest/client/test_third_party_rules.py +++ b/tests/rest/client/test_third_party_rules.py @@ -36,7 +36,7 @@ from synapse.rest import admin from synapse.rest.client import account, login, profile, room from synapse.server import HomeServer from synapse.types import JsonDict, Requester, StateMap -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.frozenutils import unfreeze from tests import unittest diff --git a/tests/rest/client/test_thread_subscriptions.py b/tests/rest/client/test_thread_subscriptions.py index 3fbf3c5bfa..5aae07ef50 100644 --- a/tests/rest/client/test_thread_subscriptions.py +++ b/tests/rest/client/test_thread_subscriptions.py @@ -20,7 +20,7 @@ from synapse.rest import admin from synapse.rest.client import login, profile, room, thread_subscriptions from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_transactions.py b/tests/rest/client/test_transactions.py index 5f42acb391..967f783680 100644 --- a/tests/rest/client/test_transactions.py +++ b/tests/rest/client/test_transactions.py @@ -28,7 +28,7 @@ from twisted.internet import defer, reactor as _reactor from synapse.logging.context import SENTINEL_CONTEXT, LoggingContext, current_context from synapse.rest.client.transactions import CLEANUP_PERIOD_MS, HttpTransactionCache from synapse.types import ISynapseReactor, JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.utils import MockClock diff --git a/tests/rest/client/test_typing.py b/tests/rest/client/test_typing.py index ce2504156c..19817d0321 100644 --- a/tests/rest/client/test_typing.py +++ b/tests/rest/client/test_typing.py @@ -27,7 +27,7 @@ from synapse.api.constants import EduTypes from synapse.rest.client import room from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/rest/client/test_upgrade_room.py b/tests/rest/client/test_upgrade_room.py index 66fddc5475..da114e505d 100644 --- a/tests/rest/client/test_upgrade_room.py +++ b/tests/rest/client/test_upgrade_room.py @@ -28,7 +28,7 @@ from synapse.config.server import DEFAULT_ROOM_VERSION from synapse.rest import admin from synapse.rest.client import login, room, room_upgrade_rest_servlet from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import FakeChannel diff --git a/tests/rest/key/v2/test_remote_key_resource.py b/tests/rest/key/v2/test_remote_key_resource.py index 3717d70b6b..cf8241438c 100644 --- a/tests/rest/key/v2/test_remote_key_resource.py +++ b/tests/rest/key/v2/test_remote_key_resource.py @@ -36,7 +36,7 @@ from synapse.rest.key.v2 import KeyResource from synapse.server import HomeServer from synapse.storage.keys import FetchKeyResult from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.httpresourcetree import create_resource_tree from synapse.util.stringutils import random_string diff --git a/tests/rest/media/test_domain_blocking.py b/tests/rest/media/test_domain_blocking.py index 3feade4a4b..9eb0222102 100644 --- a/tests/rest/media/test_domain_blocking.py +++ b/tests/rest/media/test_domain_blocking.py @@ -25,7 +25,7 @@ from twisted.web.resource import Resource from synapse.media._base import FileInfo from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.test_utils import SMALL_PNG diff --git a/tests/rest/media/test_url_preview.py b/tests/rest/media/test_url_preview.py index e096780ce2..7c8d2fc998 100644 --- a/tests/rest/media/test_url_preview.py +++ b/tests/rest/media/test_url_preview.py @@ -36,7 +36,7 @@ from synapse.config.oembed import OEmbedEndpointConfig from synapse.media.url_previewer import IMAGE_CACHE_EXPIRY_MS from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import parse_and_validate_mxc_uri from tests import unittest diff --git a/tests/rest/synapse/mas/test_devices.py b/tests/rest/synapse/mas/test_devices.py index 458878c13c..6b7596f1c6 100644 --- a/tests/rest/synapse/mas/test_devices.py +++ b/tests/rest/synapse/mas/test_devices.py @@ -15,7 +15,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import skip_unless from tests.utils import HAS_AUTHLIB diff --git a/tests/rest/synapse/mas/test_users.py b/tests/rest/synapse/mas/test_users.py index b236aceaf2..4e8cf90700 100644 --- a/tests/rest/synapse/mas/test_users.py +++ b/tests/rest/synapse/mas/test_users.py @@ -18,7 +18,7 @@ from twisted.internet.testing import MemoryReactor from synapse.appservice import ApplicationService from synapse.server import HomeServer from synapse.types import JsonDict, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import skip_unless from tests.utils import HAS_AUTHLIB diff --git a/tests/server.py b/tests/server.py index 7432db1ac8..f66ce070c6 100644 --- a/tests/server.py +++ b/tests/server.py @@ -103,7 +103,7 @@ from synapse.storage.database import LoggingDatabaseConnection, make_pool from synapse.storage.engines import BaseDatabaseEngine, create_engine from synapse.storage.prepare_database import prepare_database from synapse.types import ISynapseReactor, JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.utils import ( LEAVE_DB, diff --git a/tests/server_notices/__init__.py b/tests/server_notices/__init__.py index 1d23a126de..eca52930db 100644 --- a/tests/server_notices/__init__.py +++ b/tests/server_notices/__init__.py @@ -19,7 +19,7 @@ import synapse.rest.admin from synapse.rest.client import login, room, sync from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/server_notices/test_consent.py b/tests/server_notices/test_consent.py index db4a6370e8..45ed5b39d6 100644 --- a/tests/server_notices/test_consent.py +++ b/tests/server_notices/test_consent.py @@ -25,7 +25,7 @@ from twisted.internet.testing import MemoryReactor import synapse.rest.admin from synapse.rest.client import login, room, sync from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/server_notices/test_resource_limits_server_notices.py b/tests/server_notices/test_resource_limits_server_notices.py index 0da12f14cd..dd38528a7d 100644 --- a/tests/server_notices/test_resource_limits_server_notices.py +++ b/tests/server_notices/test_resource_limits_server_notices.py @@ -32,7 +32,7 @@ from synapse.server_notices.resource_limits_server_notices import ( ) from synapse.server_notices.server_notices_sender import ServerNoticesSender from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/state/test_v21.py b/tests/state/test_v21.py index 5e46b69fef..ff1715d4f7 100644 --- a/tests/state/test_v21.py +++ b/tests/state/test_v21.py @@ -38,7 +38,7 @@ from synapse.state.v2 import ( resolve_events_with_store, ) from synapse.types import StateMap -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.state.test_v2 import TestStateResolutionStore diff --git a/tests/storage/databases/main/test_deviceinbox.py b/tests/storage/databases/main/test_deviceinbox.py index d3ddeaa57e..dbf362a3cc 100644 --- a/tests/storage/databases/main/test_deviceinbox.py +++ b/tests/storage/databases/main/test_deviceinbox.py @@ -30,7 +30,7 @@ from synapse.server import HomeServer from synapse.storage.databases.main.deviceinbox import ( DEVICE_FEDERATION_INBOX_CLEANUP_DELAY_MS, ) -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/databases/main/test_end_to_end_keys.py b/tests/storage/databases/main/test_end_to_end_keys.py index 3992fc3264..d0dd8f866b 100644 --- a/tests/storage/databases/main/test_end_to_end_keys.py +++ b/tests/storage/databases/main/test_end_to_end_keys.py @@ -26,7 +26,7 @@ from synapse.server import HomeServer from synapse.storage._base import db_to_json from synapse.storage.database import LoggingTransaction from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/databases/main/test_events_worker.py b/tests/storage/databases/main/test_events_worker.py index f23609aee3..81a3447dbb 100644 --- a/tests/storage/databases/main/test_events_worker.py +++ b/tests/storage/databases/main/test_events_worker.py @@ -38,8 +38,8 @@ from synapse.storage.databases.main.events_worker import ( EventsWorkerStore, ) from synapse.storage.types import Connection -from synapse.util import Clock from synapse.util.async_helpers import yieldable_gather_results +from synapse.util.clock import Clock from tests import unittest from tests.test_utils.event_injection import create_event, inject_event diff --git a/tests/storage/databases/main/test_lock.py b/tests/storage/databases/main/test_lock.py index e18e0f2792..4296fcde13 100644 --- a/tests/storage/databases/main/test_lock.py +++ b/tests/storage/databases/main/test_lock.py @@ -27,7 +27,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.storage.databases.main.lock import _LOCK_TIMEOUT_MS, _RENEWAL_INTERVAL_MS -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/databases/main/test_receipts.py b/tests/storage/databases/main/test_receipts.py index 4141f868d6..d084f5c2ba 100644 --- a/tests/storage/databases/main/test_receipts.py +++ b/tests/storage/databases/main/test_receipts.py @@ -27,7 +27,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.database import LoggingTransaction -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/databases/main/test_room.py b/tests/storage/databases/main/test_room.py index dda4294e63..4ed775ad76 100644 --- a/tests/storage/databases/main/test_room.py +++ b/tests/storage/databases/main/test_room.py @@ -28,7 +28,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.databases.main.room import _BackgroundUpdates -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test__base.py b/tests/storage/test__base.py index 7d260b7915..5e773a5545 100644 --- a/tests/storage/test__base.py +++ b/tests/storage/test__base.py @@ -25,7 +25,7 @@ from typing import Generator, List, Tuple, cast from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_account_data.py b/tests/storage/test_account_data.py index 794cefd04d..13c4be988e 100644 --- a/tests/storage/test_account_data.py +++ b/tests/storage/test_account_data.py @@ -26,7 +26,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.constants import AccountDataTypes from synapse.api.errors import Codes, SynapseError from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_appservice.py b/tests/storage/test_appservice.py index 759fad6af1..b4df92c7a1 100644 --- a/tests/storage/test_appservice.py +++ b/tests/storage/test_appservice.py @@ -39,7 +39,7 @@ from synapse.storage.databases.main.appservice import ( ApplicationServiceTransactionStore, ) from synapse.types import DeviceListUpdates -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_background_update.py b/tests/storage/test_background_update.py index 89a3b54a25..cf63b50c2f 100644 --- a/tests/storage/test_background_update.py +++ b/tests/storage/test_background_update.py @@ -37,7 +37,7 @@ from synapse.storage.background_updates import ( from synapse.storage.database import LoggingTransaction from synapse.storage.engines import PostgresEngine, Sqlite3Engine from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/storage/test_cleanup_extrems.py b/tests/storage/test_cleanup_extrems.py index 94fb8e01a1..054e4a4d0b 100644 --- a/tests/storage/test_cleanup_extrems.py +++ b/tests/storage/test_cleanup_extrems.py @@ -31,7 +31,7 @@ from synapse.server import HomeServer from synapse.storage import prepare_database from synapse.storage.types import Cursor from synapse.types import UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_client_ips.py b/tests/storage/test_client_ips.py index de95272b52..1cd97a9dd7 100644 --- a/tests/storage/test_client_ips.py +++ b/tests/storage/test_client_ips.py @@ -35,7 +35,7 @@ from synapse.storage.databases.main.client_ips import ( DeviceLastConnectionInfo, ) from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import make_request diff --git a/tests/storage/test_database.py b/tests/storage/test_database.py index 5e5937ff17..fd6963bb82 100644 --- a/tests/storage/test_database.py +++ b/tests/storage/test_database.py @@ -33,7 +33,7 @@ from synapse.storage.database import ( LoggingTransaction, make_tuple_comparison_clause, ) -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_devices.py b/tests/storage/test_devices.py index e8ea813668..bd6fcd8eeb 100644 --- a/tests/storage/test_devices.py +++ b/tests/storage/test_devices.py @@ -27,7 +27,7 @@ import synapse.api.errors from synapse.api.constants import EduTypes from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_directory.py b/tests/storage/test_directory.py index 26bf6cf391..4fb81e38cd 100644 --- a/tests/storage/test_directory.py +++ b/tests/storage/test_directory.py @@ -23,7 +23,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.types import RoomAlias, RoomID -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_e2e_room_keys.py b/tests/storage/test_e2e_room_keys.py index f390d11e41..2397d7b80e 100644 --- a/tests/storage/test_e2e_room_keys.py +++ b/tests/storage/test_e2e_room_keys.py @@ -23,7 +23,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.storage.databases.main.e2e_room_keys import RoomKey -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_end_to_end_keys.py b/tests/storage/test_end_to_end_keys.py index e46999022a..24fdb0bf6d 100644 --- a/tests/storage/test_end_to_end_keys.py +++ b/tests/storage/test_end_to_end_keys.py @@ -22,7 +22,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_event_chain.py b/tests/storage/test_event_chain.py index b2480a139d..fe9bb7bcca 100644 --- a/tests/storage/test_event_chain.py +++ b/tests/storage/test_event_chain.py @@ -37,7 +37,7 @@ from synapse.storage.database import LoggingTransaction from synapse.storage.databases.main.events import _LinkMap from synapse.storage.types import Cursor from synapse.types import create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_event_federation.py b/tests/storage/test_event_federation.py index 2f79068f6b..ee9cf3687f 100644 --- a/tests/storage/test_event_federation.py +++ b/tests/storage/test_event_federation.py @@ -53,7 +53,8 @@ from synapse.storage.database import LoggingTransaction from synapse.storage.types import Cursor from synapse.synapse_rust.events import EventInternalMetadata from synapse.types import JsonDict -from synapse.util import Clock, json_encoder +from synapse.util.clock import Clock +from synapse.util.json import json_encoder import tests.unittest import tests.utils diff --git a/tests/storage/test_event_push_actions.py b/tests/storage/test_event_push_actions.py index 640490a6e5..30ba1ad94a 100644 --- a/tests/storage/test_event_push_actions.py +++ b/tests/storage/test_event_push_actions.py @@ -29,7 +29,7 @@ from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.storage.databases.main.event_push_actions import NotifCounts from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_events.py b/tests/storage/test_events.py index 6d2e4e4bbe..93e9eab039 100644 --- a/tests/storage/test_events.py +++ b/tests/storage/test_events.py @@ -32,7 +32,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import StateMap -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_events_bg_updates.py b/tests/storage/test_events_bg_updates.py index 7bbb5849a0..a1375aa4ac 100644 --- a/tests/storage/test_events_bg_updates.py +++ b/tests/storage/test_events_bg_updates.py @@ -20,7 +20,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.constants import MAX_DEPTH from synapse.api.room_versions import RoomVersion, RoomVersions from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_id_generators.py b/tests/storage/test_id_generators.py index 9e949af482..4c1311a00e 100644 --- a/tests/storage/test_id_generators.py +++ b/tests/storage/test_id_generators.py @@ -35,7 +35,7 @@ from synapse.storage.util.sequence import ( PostgresSequenceGenerator, SequenceGenerator, ) -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase from tests.utils import USE_POSTGRES_FOR_TESTS diff --git a/tests/storage/test_monthly_active_users.py b/tests/storage/test_monthly_active_users.py index 78ef2e67a2..e684c6c161 100644 --- a/tests/storage/test_monthly_active_users.py +++ b/tests/storage/test_monthly_active_users.py @@ -24,7 +24,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.constants import UserTypes from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import default_config, override_config diff --git a/tests/storage/test_profile.py b/tests/storage/test_profile.py index 0f14e00e51..dbaf298697 100644 --- a/tests/storage/test_profile.py +++ b/tests/storage/test_profile.py @@ -25,7 +25,7 @@ from synapse.server import HomeServer from synapse.storage.database import LoggingTransaction from synapse.storage.engines import PostgresEngine from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_purge.py b/tests/storage/test_purge.py index 38d0cd6eb2..2894530d52 100644 --- a/tests/storage/test_purge.py +++ b/tests/storage/test_purge.py @@ -25,7 +25,7 @@ from synapse.rest.client import room from synapse.server import HomeServer from synapse.types.state import StateFilter from synapse.types.storage import _BackgroundUpdates -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_receipts.py b/tests/storage/test_receipts.py index 8f7f736175..10ded391f4 100644 --- a/tests/storage/test_receipts.py +++ b/tests/storage/test_receipts.py @@ -26,7 +26,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.constants import ReceiptTypes from synapse.server import HomeServer from synapse.types import UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests.test_utils.event_injection import create_event from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_redaction.py b/tests/storage/test_redaction.py index a9c0d7d9a9..7565376a59 100644 --- a/tests/storage/test_redaction.py +++ b/tests/storage/test_redaction.py @@ -31,7 +31,7 @@ from synapse.events.builder import EventBuilder from synapse.server import HomeServer from synapse.synapse_rust.events import EventInternalMetadata from synapse.types import JsonDict, RoomID, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.utils import create_room diff --git a/tests/storage/test_registration.py b/tests/storage/test_registration.py index 992ccc779b..7ee81fabb6 100644 --- a/tests/storage/test_registration.py +++ b/tests/storage/test_registration.py @@ -24,7 +24,7 @@ from synapse.api.constants import UserTypes from synapse.api.errors import ThreepidValidationError from synapse.server import HomeServer from synapse.types import JsonDict, UserID, UserInfo -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, override_config diff --git a/tests/storage/test_relations.py b/tests/storage/test_relations.py index 0f3e3fe7eb..96cee365f2 100644 --- a/tests/storage/test_relations.py +++ b/tests/storage/test_relations.py @@ -23,7 +23,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.constants import MAIN_TIMELINE from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_rollback_worker.py b/tests/storage/test_rollback_worker.py index af69b93cf8..f61eb2e319 100644 --- a/tests/storage/test_rollback_worker.py +++ b/tests/storage/test_rollback_worker.py @@ -29,7 +29,7 @@ from synapse.storage.database import LoggingDatabaseConnection from synapse.storage.prepare_database import PrepareDatabaseException, prepare_database from synapse.storage.schema import SCHEMA_VERSION from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_room.py b/tests/storage/test_room.py index a8a75d2973..f8c5260fa2 100644 --- a/tests/storage/test_room.py +++ b/tests/storage/test_room.py @@ -24,7 +24,7 @@ from twisted.internet.testing import MemoryReactor from synapse.api.room_versions import RoomVersions from synapse.server import HomeServer from synapse.types import RoomAlias, RoomID, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_room_search.py b/tests/storage/test_room_search.py index f7eaa83ec6..e530e59fa6 100644 --- a/tests/storage/test_room_search.py +++ b/tests/storage/test_room_search.py @@ -33,7 +33,7 @@ from synapse.storage.databases.main import DataStore from synapse.storage.databases.main.search import Phrase, SearchToken, _tokenize_query from synapse.storage.engines import PostgresEngine from synapse.storage.engines.sqlite import Sqlite3Engine -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase, skip_unless from tests.utils import USE_POSTGRES_FOR_TESTS diff --git a/tests/storage/test_roommember.py b/tests/storage/test_roommember.py index fd489022a8..b8933d957b 100644 --- a/tests/storage/test_roommember.py +++ b/tests/storage/test_roommember.py @@ -33,7 +33,7 @@ from synapse.server import HomeServer from synapse.storage.databases.main.roommember import extract_heroes_from_room_summary from synapse.storage.roommember import MemberSummary from synapse.types import UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.server import TestHomeServer diff --git a/tests/storage/test_sliding_sync_tables.py b/tests/storage/test_sliding_sync_tables.py index 1a7a0b4c5c..f0df166bab 100644 --- a/tests/storage/test_sliding_sync_tables.py +++ b/tests/storage/test_sliding_sync_tables.py @@ -39,7 +39,7 @@ from synapse.storage.databases.main.events_bg_updates import ( ) from synapse.types import create_requester from synapse.types.storage import _BackgroundUpdates -from synapse.util import Clock +from synapse.util.clock import Clock from tests.test_utils.event_injection import create_event from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_state.py b/tests/storage/test_state.py index cbf68b3032..bf6da71549 100644 --- a/tests/storage/test_state.py +++ b/tests/storage/test_state.py @@ -32,7 +32,7 @@ from synapse.events import EventBase from synapse.server import HomeServer from synapse.types import JsonDict, RoomID, StateMap, UserID from synapse.types.state import StateFilter -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_state_deletion.py b/tests/storage/test_state_deletion.py index 58cd118567..d4079c372e 100644 --- a/tests/storage/test_state_deletion.py +++ b/tests/storage/test_state_deletion.py @@ -20,7 +20,7 @@ from twisted.internet.testing import MemoryReactor from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from tests.test_utils.event_injection import create_event from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_stream.py b/tests/storage/test_stream.py index ba2af1e044..0777c254c0 100644 --- a/tests/storage/test_stream.py +++ b/tests/storage/test_stream.py @@ -49,7 +49,7 @@ from synapse.types import ( UserID, create_requester, ) -from synapse.util import Clock +from synapse.util.clock import Clock from tests.test_utils.event_injection import create_event from tests.unittest import FederatingHomeserverTestCase, HomeserverTestCase diff --git a/tests/storage/test_thread_subscriptions.py b/tests/storage/test_thread_subscriptions.py index 2ce369247f..3f78308e45 100644 --- a/tests/storage/test_thread_subscriptions.py +++ b/tests/storage/test_thread_subscriptions.py @@ -24,7 +24,7 @@ from synapse.storage.databases.main.thread_subscriptions import ( ) from synapse.storage.engines.sqlite import Sqlite3Engine from synapse.types import EventOrderings -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_transactions.py b/tests/storage/test_transactions.py index 7b2ac9fce1..a58c33aff6 100644 --- a/tests/storage/test_transactions.py +++ b/tests/storage/test_transactions.py @@ -22,7 +22,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.storage.databases.main.transactions import DestinationRetryTimings -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/storage/test_txn_limit.py b/tests/storage/test_txn_limit.py index 4722da5005..6bf4ce48f1 100644 --- a/tests/storage/test_txn_limit.py +++ b/tests/storage/test_txn_limit.py @@ -23,7 +23,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.storage.types import Cursor -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/storage/test_user_directory.py b/tests/storage/test_user_directory.py index 255de298f3..26e045135e 100644 --- a/tests/storage/test_user_directory.py +++ b/tests/storage/test_user_directory.py @@ -37,7 +37,7 @@ from synapse.storage.databases.main.user_directory import ( ) from synapse.storage.roommember import ProfileInfo from synapse.types import UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests.server import ThreadedMemoryReactorClock from tests.test_utils.event_injection import inject_member_event diff --git a/tests/storage/test_user_filters.py b/tests/storage/test_user_filters.py index 8d928aa55c..954a420cc0 100644 --- a/tests/storage/test_user_filters.py +++ b/tests/storage/test_user_filters.py @@ -25,7 +25,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.storage.database import LoggingTransaction from synapse.storage.engines import PostgresEngine -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest diff --git a/tests/test_mau.py b/tests/test_mau.py index 1000870aa9..fa98242bf7 100644 --- a/tests/test_mau.py +++ b/tests/test_mau.py @@ -30,7 +30,7 @@ from synapse.appservice import ApplicationService from synapse.rest.client import register, sync from synapse.server import HomeServer from synapse.types import JsonDict, UserID -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest from tests.unittest import override_config diff --git a/tests/test_phone_home.py b/tests/test_phone_home.py index 0b230ed0f5..ab21a5dde4 100644 --- a/tests/test_phone_home.py +++ b/tests/test_phone_home.py @@ -29,7 +29,7 @@ from synapse.rest import admin from synapse.rest.client import login, sync from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests.unittest import HomeserverTestCase diff --git a/tests/test_server.py b/tests/test_server.py index 0aa3584518..69efceafe8 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -36,8 +36,8 @@ from synapse.http.server import ( from synapse.http.site import SynapseRequest, SynapseSite from synapse.logging.context import make_deferred_yieldable from synapse.types import JsonDict -from synapse.util import Clock from synapse.util.cancellation import cancellable +from synapse.util.clock import Clock from tests import unittest from tests.http.server._base import test_disconnect diff --git a/tests/test_state.py b/tests/test_state.py index adb72b0730..16446c16bc 100644 --- a/tests/test_state.py +++ b/tests/test_state.py @@ -43,7 +43,7 @@ from synapse.events.snapshot import EventContext from synapse.state import StateHandler, StateResolutionHandler, _make_state_cache_entry from synapse.types import MutableStateMap, StateMap from synapse.types.state import StateFilter -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.macaroons import MacaroonGenerator from tests import unittest diff --git a/tests/test_terms_auth.py b/tests/test_terms_auth.py index 8065ae4b8a..bd5e6520ac 100644 --- a/tests/test_terms_auth.py +++ b/tests/test_terms_auth.py @@ -20,13 +20,12 @@ from unittest.mock import Mock -from twisted.internet.interfaces import IReactorTime -from twisted.internet.testing import MemoryReactor, MemoryReactorClock +from twisted.internet.testing import MemoryReactor from synapse.rest.client.register import register_servlets from synapse.server import HomeServer from synapse.types import JsonDict -from synapse.util import Clock +from synapse.util.clock import Clock from tests import unittest @@ -49,13 +48,7 @@ class TermsTestCase(unittest.HomeserverTestCase): ) return config - def prepare( - self, reactor: MemoryReactor, clock: Clock, homeserver: HomeServer - ) -> None: - # type-ignore: mypy-zope doesn't seem to recognise that MemoryReactorClock - # implements IReactorTime, via inheritance from twisted.internet.testing.Clock - self.clock: IReactorTime = MemoryReactorClock() # type: ignore[assignment] - self.hs_clock = Clock(self.clock) + def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None: self.url = "/_matrix/client/r0/register" self.registration_handler = Mock() self.auth_handler = Mock() diff --git a/tests/test_utils/oidc.py b/tests/test_utils/oidc.py index 5bf5e5cb0c..f2de8bded5 100644 --- a/tests/test_utils/oidc.py +++ b/tests/test_utils/oidc.py @@ -33,7 +33,7 @@ from twisted.web.http_headers import Headers from twisted.web.iweb import IResponse from synapse.server import HomeServer -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.stringutils import random_string from tests.test_utils import FakeResponse diff --git a/tests/test_visibility.py b/tests/test_visibility.py index 285e28e0f9..9a8cad6454 100644 --- a/tests/test_visibility.py +++ b/tests/test_visibility.py @@ -31,7 +31,7 @@ from synapse.rest import admin from synapse.rest.client import login, room from synapse.server import HomeServer from synapse.types import create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.visibility import filter_events_for_client, filter_events_for_server from tests import unittest diff --git a/tests/unittest.py b/tests/unittest.py index c9f8c48665..7d46f84496 100644 --- a/tests/unittest.py +++ b/tests/unittest.py @@ -81,7 +81,7 @@ from synapse.rest import RegisterServletsFunc from synapse.server import HomeServer from synapse.storage.keys import FetchKeyResult from synapse.types import JsonDict, Requester, UserID, create_requester -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.httpresourcetree import create_resource_tree from tests.server import ( diff --git a/tests/util/test_expiring_cache.py b/tests/util/test_expiring_cache.py index 75bf50e644..bfcc6cd12f 100644 --- a/tests/util/test_expiring_cache.py +++ b/tests/util/test_expiring_cache.py @@ -21,8 +21,8 @@ from typing import List, cast -from synapse.util import Clock from synapse.util.caches.expiringcache import ExpiringCache +from synapse.util.clock import Clock from tests.utils import MockClock diff --git a/tests/util/test_logcontext.py b/tests/util/test_logcontext.py index af36e685d7..43912d05da 100644 --- a/tests/util/test_logcontext.py +++ b/tests/util/test_logcontext.py @@ -34,7 +34,7 @@ from synapse.logging.context import ( run_in_background, ) from synapse.types import ISynapseReactor -from synapse.util import Clock +from synapse.util.clock import Clock from .. import unittest diff --git a/tests/util/test_task_scheduler.py b/tests/util/test_task_scheduler.py index 2171f91b4d..e97f0ed611 100644 --- a/tests/util/test_task_scheduler.py +++ b/tests/util/test_task_scheduler.py @@ -25,7 +25,7 @@ from twisted.internet.testing import MemoryReactor from synapse.server import HomeServer from synapse.types import JsonMapping, ScheduledTask, TaskStatus -from synapse.util import Clock +from synapse.util.clock import Clock from synapse.util.task_scheduler import TaskScheduler from tests.replication._base import BaseMultiWorkerStreamTestCase