From b4a1aacd12af8b7a7de3f17946e216507d137d7d Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 6 Aug 2019 23:37:49 +0300 Subject: [PATCH] Minor code cleanup and fix tests --- mautrix_telegram/__main__.py | 13 ++-- mautrix_telegram/portal/send_lock.py | 7 +- tests/commands/test_handler.py | 99 ++++++++++++++-------------- 3 files changed, 60 insertions(+), 59 deletions(-) diff --git a/mautrix_telegram/__main__.py b/mautrix_telegram/__main__.py index e8956038..3ab61092 100644 --- a/mautrix_telegram/__main__.py +++ b/mautrix_telegram/__main__.py @@ -62,10 +62,7 @@ class TelegramBridge(Bridge): engine=self.db, table_base=Base, session=False, table_prefix="telethon_", manage_tables=False) - def prepare_bridge(self) -> None: - self.bot = init_bot(self.config) - context = Context(self.az, self.config, self.loop, self.session_container, self.bot) - + def _prepare_website(self, context: Context) -> None: if self.config["appservice.public.enabled"]: public_website = PublicBridgeWebsite(self.loop) self.az.app.add_subapp(self.config["appservice.public.prefix"], public_website.app) @@ -77,8 +74,6 @@ class TelegramBridge(Bridge): provisioning_api.app) context.provisioning_api = provisioning_api - self.matrix = context.mx = MatrixHandler(context) - if self.config["metrics.enabled"]: if prometheus: prometheus.start_http_server(self.config["metrics.listen_port"]) @@ -86,6 +81,12 @@ class TelegramBridge(Bridge): self.log.warn("Metrics are enabled in the config, " "but prometheus_client is not installed.") + def prepare_bridge(self) -> None: + self.bot = init_bot(self.config) + context = Context(self.az, self.config, self.loop, self.session_container, self.bot) + self._prepare_website(context) + self.matrix = context.mx = MatrixHandler(context) + init_abstract_user(context) init_formatter(context) init_portal(context) diff --git a/mautrix_telegram/portal/send_lock.py b/mautrix_telegram/portal/send_lock.py index 11a2d3ce..c760f44b 100644 --- a/mautrix_telegram/portal/send_lock.py +++ b/mautrix_telegram/portal/send_lock.py @@ -40,8 +40,5 @@ class PortalSendLock: try: return self._send_locks[user_id] except KeyError: - if required: - self._send_locks[user_id] = Lock() - return self._send_locks[user_id] - else: - return self._noop_lock + return (self._send_locks.setdefault(user_id, Lock()) + if required else self._noop_lock) diff --git a/tests/commands/test_handler.py b/tests/commands/test_handler.py index 1e006db6..0a796378 100644 --- a/tests/commands/test_handler.py +++ b/tests/commands/test_handler.py @@ -5,12 +5,14 @@ import pytest from _pytest.fixtures import FixtureRequest from pytest_mock import MockFixture +from mautrix.types import EventID, RoomID, UserID +import mautrix.bridge.commands.handler + import mautrix_telegram.commands.handler from mautrix_telegram.commands.handler import (CommandEvent, CommandHandler, CommandProcessor, - HelpSection) + HelpSection, HelpCacheKey) from mautrix_telegram.config import Config from mautrix_telegram.context import Context -from mautrix_telegram.types import MatrixEventID, MatrixRoomID, MatrixUserID import mautrix_telegram.user as u from tests.utils.helpers import AsyncMock, list_true_once_each @@ -45,9 +47,9 @@ class TestCommandEvent: evt = CommandEvent( processor=command_processor, - room=MatrixRoomID("#mock_room:example.org"), - event=MatrixEventID("$H45H:example.org"), - sender=u.User(MatrixUserID("@sender:example.org")), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), + sender=u.User(UserID("@sender:example.org")), command="help", args=[], is_management=True, @@ -61,7 +63,7 @@ class TestCommandEvent: # html, no markdown evt.reply(message, allow_html=True, render_markdown=False) mock_az.intent.send_notice.assert_called_with( - MatrixRoomID("#mock_room:example.org"), + RoomID("#mock_room:example.org"), "**This** was
allfun*!", html="**This** was
allfun*!\n", ) @@ -69,7 +71,7 @@ class TestCommandEvent: # html, markdown (default) evt.reply(message, allow_html=True, render_markdown=True) mock_az.intent.send_notice.assert_called_with( - MatrixRoomID("#mock_room:example.org"), + RoomID("#mock_room:example.org"), "**This** was
allfun*!", html=( "

This was
" @@ -80,7 +82,7 @@ class TestCommandEvent: # no html, no markdown evt.reply(message, allow_html=False, render_markdown=False) mock_az.intent.send_notice.assert_called_with( - MatrixRoomID("#mock_room:example.org"), + RoomID("#mock_room:example.org"), "**This** was
allfun*!", html=None, ) @@ -88,7 +90,7 @@ class TestCommandEvent: # no html, markdown evt.reply(message, allow_html=False, render_markdown=True) mock_az.intent.send_notice.assert_called_with( - MatrixRoomID("#mock_room:example.org"), + RoomID("#mock_room:example.org"), "**This** was
allfun*!", html="

This <i>was</i><br/>" "<strong>all</strong>fun*!

\n" @@ -100,9 +102,9 @@ class TestCommandEvent: evt = CommandEvent( processor=command_processor, - room=MatrixRoomID("#mock_room:example.org"), - event=MatrixEventID("$H45H:example.org"), - sender=u.User(MatrixUserID("@sender:example.org")), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), + sender=u.User(UserID("@sender:example.org")), command="help", args=[], is_management=False, @@ -115,7 +117,7 @@ class TestCommandEvent: render_markdown=False) mock_az.intent.send_notice.assert_called_with( - MatrixRoomID("#mock_room:example.org"), + RoomID("#mock_room:example.org"), "tg ....tg+sp...tg tg", html=None, ) @@ -126,9 +128,9 @@ class TestCommandEvent: evt = CommandEvent( processor=command_processor, - room=MatrixRoomID("#mock_room:example.org"), - event=MatrixEventID("$H45H:example.org"), - sender=u.User(MatrixUserID("@sender:example.org")), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), + sender=u.User(UserID("@sender:example.org")), command="help", args=[], is_management=True, @@ -144,7 +146,7 @@ class TestCommandEvent: ) mock_az.intent.send_notice.assert_called_with( - MatrixRoomID("#mock_room:example.org"), + RoomID("#mock_room:example.org"), "....tg+sp...tg tg", html="

....tg+sp...tg tg

\n", ) @@ -195,15 +197,15 @@ class TestCommandHandler: help_section=HelpSection("Mock Section", 42, ""), ) - sender = u.User(MatrixUserID("@sender:example.org")) + sender = u.User(UserID("@sender:example.org")) sender.puppet_whitelisted = False sender.matrix_puppet_whitelisted = False sender.is_admin = False event = CommandEvent( processor=command_processor, - room=MatrixRoomID("#mock_room:example.org"), - event=MatrixEventID("$H45H:example.org"), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), sender=sender, command=command, args=[], @@ -212,7 +214,8 @@ class TestCommandHandler: ) assert await command_handler.get_permission_error(event) - assert not command_handler.has_permission(False, False, False, False, False) + assert not command_handler.has_permission( + HelpCacheKey(False, False, False, False, False, False)) @pytest.mark.parametrize( ( @@ -255,7 +258,7 @@ class TestCommandHandler: help_section=HelpSection("Mock Section", 42, ""), ) - sender = u.User(MatrixUserID("@sender:example.org")) + sender = u.User(UserID("@sender:example.org")) sender.puppet_whitelisted = puppet_whitelisted sender.matrix_puppet_whitelisted = matrix_puppet_whitelisted sender.is_admin = is_admin @@ -263,8 +266,8 @@ class TestCommandHandler: event = CommandEvent( processor=command_processor, - room=MatrixRoomID("#mock_room:example.org"), - event=MatrixEventID("$H45H:example.org"), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), sender=sender, command=command, args=[], @@ -274,12 +277,12 @@ class TestCommandHandler: assert not await command_handler.get_permission_error(event) assert command_handler.has_permission( - is_management=is_management, - puppet_whitelisted=puppet_whitelisted, - matrix_puppet_whitelisted=matrix_puppet_whitelisted, - is_admin=is_admin, - is_logged_in=is_logged_in, - ) + HelpCacheKey(is_management=is_management, + puppet_whitelisted=puppet_whitelisted, + matrix_puppet_whitelisted=matrix_puppet_whitelisted, + is_admin=is_admin, + is_logged_in=is_logged_in, + is_portal=boolean)) class TestCommandProcessor: @@ -292,41 +295,41 @@ class TestCommandProcessor: mocker: MockFixture) -> None: mocker.patch('mautrix_telegram.user.config', self.config) mocker.patch( - 'mautrix_telegram.commands.handler.command_handlers', + 'mautrix.bridge.commands.handler.command_handlers', {"help": AsyncMock(), "unknown-command": AsyncMock()} ) - sender = u.User(MatrixUserID("@sender:example.org")) + sender = u.User(UserID("@sender:example.org")) result = await command_processor.handle( - room=MatrixRoomID("#mock_room:example.org"), - event_id=MatrixEventID("$H45H:example.org"), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), sender=sender, command="hElp", args=[], is_management=boolean2[0], - is_portal=boolean2[1], - ) + is_portal=boolean2[1]) assert result is None - command_handlers = mautrix_telegram.commands.handler.command_handlers + command_handlers = mautrix.bridge.commands.handler.command_handlers command_handlers["help"].mock.assert_called_once() # type: ignore @pytest.mark.asyncio async def test_handle_unknown_command(self, command_processor: CommandProcessor, - boolean2: Tuple[bool, bool], mocker: MockFixture) -> None: + boolean2: Tuple[bool, bool], + mocker: MockFixture) -> None: mocker.patch('mautrix_telegram.user.config', self.config) mocker.patch( - 'mautrix_telegram.commands.handler.command_handlers', + 'mautrix.bridge.commands.handler.command_handlers', {"help": AsyncMock(), "unknown-command": AsyncMock()} ) - sender = u.User(MatrixUserID("@sender:example.org")) + sender = u.User(UserID("@sender:example.org")) sender.command_status = {} result = await command_processor.handle( - room=MatrixRoomID("#mock_room:example.org"), - event_id=MatrixEventID("$H45H:example.org"), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), sender=sender, command="foo", args=[], @@ -335,7 +338,7 @@ class TestCommandProcessor: ) assert result is None - command_handlers = mautrix_telegram.commands.handler.command_handlers + command_handlers = mautrix.bridge.commands.handler.command_handlers command_handlers["help"].mock.assert_not_called() # type: ignore command_handlers["unknown-command"].mock.assert_called_once() # type: ignore @@ -345,16 +348,16 @@ class TestCommandProcessor: mocker: MockFixture) -> None: mocker.patch('mautrix_telegram.user.config', self.config) mocker.patch( - 'mautrix_telegram.commands.handler.command_handlers', + 'mautrix.bridge.commands.handler.command_handlers', {"help": AsyncMock(), "unknown-command": AsyncMock()} ) - sender = u.User(MatrixUserID("@sender:example.org")) + sender = u.User(UserID("@sender:example.org")) sender.command_status = {"foo": AsyncMock(), "next": AsyncMock()} result = await command_processor.handle( - room=MatrixRoomID("#mock_room:example.org"), - event_id=MatrixEventID("$H45H:example.org"), + room_id=RoomID("#mock_room:example.org"), + event_id=EventID("$H45H:example.org"), sender=sender, # u.User command="foo", args=[], @@ -363,7 +366,7 @@ class TestCommandProcessor: ) assert result is None - command_handlers = mautrix_telegram.commands.handler.command_handlers + command_handlers = mautrix.bridge.commands.handler.command_handlers command_handlers["help"].mock.assert_not_called() # type: ignore command_handlers["unknown-command"].mock.assert_not_called() # type: ignore sender.command_status["foo"].mock.assert_not_called() # type: ignore