mypy: Enable explicit-override error.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
parent
43654b9cf2
commit
6cb1d5f775
31 changed files with 86 additions and 3 deletions
|
@ -41,6 +41,7 @@ enable_error_code = [
|
|||
"truthy-iterable",
|
||||
"ignore-without-code",
|
||||
"unused-awaitable",
|
||||
"explicit-override",
|
||||
]
|
||||
|
||||
# Other options.
|
||||
|
|
|
@ -9,6 +9,7 @@ from typing import Any, Awaitable, Callable, Iterator, List
|
|||
from unittest import TestCase, mock
|
||||
|
||||
import nio
|
||||
from typing_extensions import override
|
||||
|
||||
from .matrix_bridge import MatrixToZulip, ZulipToMatrix, read_configuration
|
||||
|
||||
|
@ -183,6 +184,7 @@ class MatrixBridgeMatrixToZulipTests(TestCase):
|
|||
room = mock.MagicMock()
|
||||
room.user_name = lambda _: "John Smith"
|
||||
|
||||
@override
|
||||
def setUp(self) -> None:
|
||||
self.matrix_to_zulip = mock.MagicMock()
|
||||
self.matrix_to_zulip.get_message_content_from_event = (
|
||||
|
@ -229,6 +231,7 @@ class MatrixBridgeZulipToMatrixTests(TestCase):
|
|||
subject=valid_zulip_config["topic"],
|
||||
)
|
||||
|
||||
@override
|
||||
def setUp(self) -> None:
|
||||
self.zulip_to_matrix = mock.MagicMock()
|
||||
self.zulip_to_matrix.zulip_config = self.valid_zulip_config
|
||||
|
|
|
@ -17,6 +17,7 @@ from html.parser import HTMLParser
|
|||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
import feedparser
|
||||
from typing_extensions import override
|
||||
|
||||
import zulip
|
||||
|
||||
|
@ -138,6 +139,7 @@ class MLStripper(HTMLParser):
|
|||
self.reset()
|
||||
self.fed: List[str] = []
|
||||
|
||||
@override
|
||||
def handle_data(self, data: str) -> None:
|
||||
self.fed.append(data)
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@ from ctypes import (
|
|||
c_void_p,
|
||||
)
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
libc = CDLL("libc.so.6")
|
||||
com_err = CDLL("libcom_err.so.2")
|
||||
libzephyr = CDLL("libzephyr.so.4")
|
||||
|
@ -198,6 +200,7 @@ class ZephyrError(Exception):
|
|||
def __init__(self, code: int) -> None:
|
||||
self.code = code
|
||||
|
||||
@override
|
||||
def __str__(self) -> str:
|
||||
return error_message(self.code).decode()
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ setup(
|
|||
"requests[security]>=0.12.1",
|
||||
"distro",
|
||||
"click",
|
||||
"typing_extensions>=3.7",
|
||||
"typing_extensions>=4.5.0",
|
||||
],
|
||||
packages=find_packages(exclude=["tests"]),
|
||||
)
|
||||
|
|
|
@ -27,7 +27,7 @@ from typing import (
|
|||
|
||||
import distro
|
||||
import requests
|
||||
from typing_extensions import Literal
|
||||
from typing_extensions import Literal, override
|
||||
|
||||
__version__ = "0.8.2"
|
||||
|
||||
|
@ -125,6 +125,7 @@ class CountingBackoff:
|
|||
|
||||
|
||||
class RandomExponentialBackoff(CountingBackoff):
|
||||
@override
|
||||
def fail(self) -> None:
|
||||
super().fail()
|
||||
# Exponential growth with ratio sqrt(2); compute random delay
|
||||
|
@ -1802,6 +1803,7 @@ if LEGACY_CLIENT_INTERFACE_FROM_SERVER_DOCS_VERSION == "3":
|
|||
# This block is support for testing Zulip 3.x, which documents old
|
||||
# interfaces for the following functions:
|
||||
class LegacyInterfaceClient(Client):
|
||||
@override
|
||||
def update_user_group_members(self, group_data: Dict[str, Any]) -> Dict[str, Any]: # type: ignore[override] # Intentional override; see comments above.
|
||||
modern_group_data = group_data.copy()
|
||||
group_id = group_data["group_id"]
|
||||
|
|
|
@ -57,7 +57,7 @@ setup(
|
|||
"html2text",
|
||||
"lxml",
|
||||
"BeautifulSoup4",
|
||||
"typing_extensions",
|
||||
"typing_extensions>=4.5.0",
|
||||
'importlib-metadata >= 3.6; python_version < "3.10"',
|
||||
],
|
||||
packages=find_packages(),
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.baremetrics.baremetrics import BaremetricsHandler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
||||
|
@ -7,6 +9,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
|||
class TestBaremetricsBot(BotTestCase, DefaultTests):
|
||||
bot_name = "baremetrics"
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info({"api_key": "TEST"}), patch("requests.get"):
|
||||
self.verify_reply("", "No Command Specified")
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
||||
|
@ -107,6 +109,7 @@ To make your next move, respond to Chess Bot with
|
|||
h g f e d c b a
|
||||
```"""
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info({"stockfish_location": "/foo/bar"}):
|
||||
response = self.get_response(dict(content=""))
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from typing import Dict, List
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.connect_four.controller import ConnectFourModel
|
||||
from zulip_bots.game_handler import BadMoveException
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
@ -8,6 +10,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests
|
|||
class TestConnectFourBot(BotTestCase, DefaultTests):
|
||||
bot_name = "connect_four"
|
||||
|
||||
@override
|
||||
def make_request_message(
|
||||
self, content: str, user: str = "foo@example.com", user_name: str = "foo"
|
||||
) -> Dict[str, str]:
|
||||
|
|
|
@ -3,6 +3,8 @@ from contextlib import contextmanager
|
|||
from typing import ByteString, Iterator
|
||||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_file_utils import read_bot_fixture_data
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
@ -71,6 +73,7 @@ class TestDialogFlowBot(BotTestCase, DefaultTests):
|
|||
def test_alternate_response(self) -> None:
|
||||
self._test("test_alternate_result", "hello", "alternate result")
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info({"key": "abcdefg", "bot_info": "bot info foo bar"}):
|
||||
pass
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
||||
|
@ -30,6 +32,7 @@ class TestFollowUpBot(BotTestCase, DefaultTests):
|
|||
self.assertEqual(response["content"], "from foo@example.com: feed the cat")
|
||||
self.assertEqual(response["to"], "issue")
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
bot_response = (
|
||||
"Please specify the message you want to send to followup stream after @mention-bot"
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
from typing import Any, Dict, Optional
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
||||
class TestFrontBot(BotTestCase, DefaultTests):
|
||||
bot_name = "front"
|
||||
|
||||
@override
|
||||
def make_request_message(self, content: str) -> Dict[str, Any]:
|
||||
message = super().make_request_message(content)
|
||||
message["subject"] = "cnv_kqatm2"
|
||||
|
@ -18,6 +21,7 @@ class TestFrontBot(BotTestCase, DefaultTests):
|
|||
with self.assertRaises(KeyError):
|
||||
bot, bot_handler = self._get_handlers()
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info({"api_key": "TEST"}):
|
||||
self.verify_reply("", "Unknown command. Use `help` for instructions.")
|
||||
|
@ -87,11 +91,13 @@ class TestFrontBot(BotTestCase, DefaultTests):
|
|||
class TestFrontBotWrongTopic(BotTestCase, DefaultTests):
|
||||
bot_name = "front"
|
||||
|
||||
@override
|
||||
def make_request_message(self, content: str) -> Dict[str, Any]:
|
||||
message = super().make_request_message(content)
|
||||
message["subject"] = "kqatm2"
|
||||
return message
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
pass
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from typing import Any, Dict, List
|
||||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.game_handler import GameInstance
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
@ -8,6 +10,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests
|
|||
class TestGameHandlerBot(BotTestCase, DefaultTests):
|
||||
bot_name = "game_handler_bot"
|
||||
|
||||
@override
|
||||
def make_request_message(
|
||||
self,
|
||||
content: str,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from requests.exceptions import ConnectionError
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_file_utils import get_bot_message_handler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
@ -10,6 +11,7 @@ class TestGiphyBot(BotTestCase, DefaultTests):
|
|||
bot_name = "giphy"
|
||||
|
||||
# Test for bot response to empty message
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
bot_response = (
|
||||
"[Click to enlarge]"
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_file_utils import get_bot_message_handler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
||||
|
@ -8,6 +10,7 @@ class TestGithubDetailBot(BotTestCase, DefaultTests):
|
|||
empty_config = {"owner": "", "repo": ""}
|
||||
|
||||
# Overrides default test_bot_usage().
|
||||
@override
|
||||
def test_bot_usage(self) -> None:
|
||||
bot = get_bot_message_handler(self.bot_name)
|
||||
bot_handler = StubBotHandler()
|
||||
|
@ -18,6 +21,7 @@ class TestGithubDetailBot(BotTestCase, DefaultTests):
|
|||
self.assertIn("displays details on github issues", bot.usage())
|
||||
|
||||
# Override default function in BotTestCase
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info(self.mock_config):
|
||||
self.verify_reply("", "Failed to find any issue or PR.")
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
||||
|
@ -112,6 +114,7 @@ class TestIDoneThisBot(BotTestCase, DefaultTests):
|
|||
" * ID: 72c8241d2218464433268c5abd6625ac104e3d8f",
|
||||
)
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info(
|
||||
{"api_key": "12345678", "bot_info": "team"}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.link_shortener.link_shortener import LinkShortenerHandler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
||||
|
@ -11,6 +13,7 @@ class TestLinkShortenerBot(BotTestCase, DefaultTests):
|
|||
with self.mock_config_info({"key": "qwertyuiop"}):
|
||||
self.verify_reply(message, response)
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with patch("requests.get"):
|
||||
self._test(
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.mention.mention import MentionHandler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
||||
|
@ -7,6 +9,7 @@ from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
|||
class TestMentionBot(BotTestCase, DefaultTests):
|
||||
bot_name = "mention"
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info({"access_token": "12345"}), patch("requests.get"):
|
||||
self.verify_reply("", "Empty Mention Query")
|
||||
|
|
|
@ -3,6 +3,7 @@ from typing import Any, Dict, Iterator
|
|||
from unittest.mock import patch
|
||||
|
||||
from simple_salesforce.exceptions import SalesforceAuthenticationFailed
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_file_utils import read_bot_fixture_data
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
@ -111,6 +112,7 @@ class TestSalesforceBot(BotTestCase, DefaultTests):
|
|||
), mock_salesforce_commands_types():
|
||||
bot, bot_handler = self._get_handlers()
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
self._test("test_one_result", "", help_text)
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ import copy
|
|||
import random
|
||||
from typing import Any, List, Tuple
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.game_handler import BadMoveException, GameAdapter
|
||||
|
||||
# -------------------------------------
|
||||
|
@ -267,6 +269,7 @@ class ticTacToeHandler(GameAdapter):
|
|||
"description": "Lets you play Tic-tac-toe against a computer.",
|
||||
}
|
||||
|
||||
@override
|
||||
def usage(self) -> str:
|
||||
return """
|
||||
You can play tic-tac-toe now! Make sure your
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.trello.trello import TrelloHandler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
||||
|
@ -9,10 +11,12 @@ mock_config = {"api_key": "TEST", "access_token": "TEST", "user_name": "TEST"}
|
|||
class TestTrelloBot(BotTestCase, DefaultTests):
|
||||
bot_name: str = "trello"
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info(mock_config), patch("requests.get"):
|
||||
self.verify_reply("", "Empty Query")
|
||||
|
||||
@override
|
||||
def test_bot_usage(self) -> None:
|
||||
with self.mock_config_info(mock_config), patch("requests.get"):
|
||||
self.verify_reply(
|
||||
|
|
|
@ -3,6 +3,8 @@ import json
|
|||
from typing import Any, Dict, Optional, Tuple
|
||||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.trivia_quiz.trivia_quiz import (
|
||||
fix_quotes,
|
||||
get_quiz_from_id,
|
||||
|
@ -41,6 +43,7 @@ class TestTriviaQuizBot(BotTestCase, DefaultTests):
|
|||
else:
|
||||
self.verify_reply(message, response)
|
||||
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
self._test("", 'type "new" for a new question')
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from typing import Optional
|
||||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
||||
|
@ -26,6 +28,7 @@ class TestWeatherBot(BotTestCase, DefaultTests):
|
|||
self.verify_reply(message, response)
|
||||
|
||||
# Override default function in BotTestCase
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with patch("requests.get"):
|
||||
self._test("", self.help_content)
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
from typing import Any, Dict, Optional
|
||||
from unittest.mock import patch
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_file_utils import get_bot_message_handler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
||||
|
@ -28,6 +30,7 @@ class TestWitaiBot(BotTestCase, DefaultTests):
|
|||
self.verify_reply("What is your favorite food?", "pizza")
|
||||
|
||||
# This overrides the default one in `BotTestCase`.
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with patch("zulip_bots.bots.witai.witai.get_handle", return_value=mock_handle):
|
||||
with self.mock_config_info(self.MOCK_CONFIG_INFO):
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from typing import Optional
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.bots.yoda.yoda import ServiceUnavailableError
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests
|
||||
|
||||
|
@ -30,6 +32,7 @@ class TestYodaBot(BotTestCase, DefaultTests):
|
|||
self.verify_reply(message, response)
|
||||
|
||||
# Override default function in BotTestCase
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
self._test("", self.help_text)
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ from typing import Dict
|
|||
from unittest.mock import patch
|
||||
|
||||
from requests.exceptions import ConnectionError, HTTPError
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.test_file_utils import get_bot_message_handler
|
||||
from zulip_bots.test_lib import BotTestCase, DefaultTests, StubBotHandler
|
||||
|
@ -27,6 +28,7 @@ class TestYoutubeBot(BotTestCase, DefaultTests):
|
|||
)
|
||||
|
||||
# Override default function in BotTestCase
|
||||
@override
|
||||
def test_bot_responds_to_empty_message(self) -> None:
|
||||
with self.mock_config_info(self.normal_config), self.mock_http_conversation("test_keyok"):
|
||||
self.verify_reply("", self.help_content)
|
||||
|
|
|
@ -5,6 +5,8 @@ import re
|
|||
from copy import deepcopy
|
||||
from typing import Any, Dict, List, Tuple
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.lib import BotHandler
|
||||
|
||||
|
||||
|
@ -12,6 +14,7 @@ class BadMoveException(Exception):
|
|||
def __init__(self, message: str) -> None:
|
||||
self.message = message
|
||||
|
||||
@override
|
||||
def __str__(self) -> str:
|
||||
return self.message
|
||||
|
||||
|
@ -20,6 +23,7 @@ class SamePlayerMove(Exception):
|
|||
def __init__(self, message: str) -> None:
|
||||
self.message = message
|
||||
|
||||
@override
|
||||
def __str__(self) -> str:
|
||||
return self.message
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ setup(
|
|||
"zulip",
|
||||
"zulip_bots",
|
||||
"flask>=0.12.2",
|
||||
"typing_extensions>=4.5.0",
|
||||
],
|
||||
packages=find_packages(exclude=["tests"]),
|
||||
)
|
||||
|
|
|
@ -3,10 +3,13 @@ import json
|
|||
from typing import Any, Dict, List, Optional
|
||||
from unittest import TestCase, mock
|
||||
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_botserver import server
|
||||
|
||||
|
||||
class BotServerTestCase(TestCase):
|
||||
@override
|
||||
def setUp(self) -> None:
|
||||
server.app.testing = True
|
||||
self.app = server.app.test_client()
|
||||
|
|
|
@ -9,6 +9,7 @@ from typing import Any, Dict
|
|||
from unittest import mock
|
||||
|
||||
import importlib_metadata as metadata
|
||||
from typing_extensions import override
|
||||
|
||||
from zulip_bots.lib import BotHandler
|
||||
from zulip_botserver import server
|
||||
|
@ -26,6 +27,7 @@ class BotServerTests(BotServerTestCase):
|
|||
def handler_class(self) -> Any:
|
||||
return BotServerTests.MockMessageHandler()
|
||||
|
||||
@override
|
||||
def setUp(self) -> None:
|
||||
# Since initializing Client invokes `get_server_settings` that fails in the test
|
||||
# environment, we need to mock it to pretend that there exists a backend.
|
||||
|
|
Loading…
Add table
Reference in a new issue