From 0467f83314f504a51a2ae42d074fbbfa99dd4736 Mon Sep 17 00:00:00 2001 From: Marco Burstein Date: Sat, 9 Dec 2017 12:35:16 -0800 Subject: [PATCH] mypy: Add annotations for xkcd Bot. --- tools/run-mypy | 2 ++ zulip_bots/zulip_bots/bots/xkcd/test_xkcd.py | 10 +++++----- zulip_bots/zulip_bots/bots/xkcd/xkcd.py | 11 ++++++----- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/tools/run-mypy b/tools/run-mypy index 6fbab1d..c924ed9 100755 --- a/tools/run-mypy +++ b/tools/run-mypy @@ -60,6 +60,8 @@ force_include = [ "zulip_bots/zulip_bots/bots/encrypt/test_encrypt.py", "zulip_bots/zulip_bots/bots/chess/chess.py", "zulip_bots/zulip_bots/bots/chess/test_chess.py", + "zulip_bots/zulip_bots/bots/xkcd/xkcd.py", + "zulip_bots/zulip_bots/bots/xkcd/test_xkcd.py", ] parser = argparse.ArgumentParser(description="Run mypy on files tracked by git.") diff --git a/zulip_bots/zulip_bots/bots/xkcd/test_xkcd.py b/zulip_bots/zulip_bots/bots/xkcd/test_xkcd.py index fec7393..b83b8a2 100755 --- a/zulip_bots/zulip_bots/bots/xkcd/test_xkcd.py +++ b/zulip_bots/zulip_bots/bots/xkcd/test_xkcd.py @@ -7,7 +7,7 @@ from zulip_bots.test_lib import StubBotTestCase class TestXkcdBot(StubBotTestCase): bot_name = "xkcd" - def test_latest_command(self): + def test_latest_command(self) -> None: bot_response = ("#1866: **Russell's Teapot**\n" "[Unfortunately, NASA regulations state that Bertrand Russell-related " "payloads can only be launched within launch vehicles which do not launch " @@ -15,7 +15,7 @@ class TestXkcdBot(StubBotTestCase): with self.mock_http_conversation('test_latest'): self.verify_reply('latest', bot_response) - def test_random_command(self): + def test_random_command(self) -> None: bot_response = ("#1800: **Chess Notation**\n" "[I've decided to score all my conversations using chess win-loss " "notation. (??)](https://imgs.xkcd.com/comics/chess_notation.png)") @@ -27,14 +27,14 @@ class TestXkcdBot(StubBotTestCase): randint.return_value = mock_rand_value.return_value self.verify_reply('random', bot_response) - def test_numeric_comic_id_command_1(self): + def test_numeric_comic_id_command_1(self) -> None: bot_response = ("#1: **Barrel - Part 1**\n[Don't we all.]" "(https://imgs.xkcd.com/comics/barrel_cropped_(1).jpg)") with self.mock_http_conversation('test_specific_id'): self.verify_reply('1', bot_response) @mock.patch('logging.exception') - def test_invalid_comic_ids(self, mock_logging_exception): + def test_invalid_comic_ids(self, mock_logging_exception: mock.Mock) -> None: invalid_id_txt = "Sorry, there is likely no xkcd comic strip with id: #" for comic_id, fixture in (('0', 'test_not_existing_id_2'), @@ -42,7 +42,7 @@ class TestXkcdBot(StubBotTestCase): with self.mock_http_conversation(fixture): self.verify_reply(comic_id, invalid_id_txt + comic_id) - def test_help_responses(self): + def test_help_responses(self) -> None: help_txt = "xkcd bot supports these commands:" err_txt = "xkcd bot only supports these commands, not `{}`:" commands = ''' diff --git a/zulip_bots/zulip_bots/bots/xkcd/xkcd.py b/zulip_bots/zulip_bots/bots/xkcd/xkcd.py index 7bccf7b..ec5f198 100644 --- a/zulip_bots/zulip_bots/bots/xkcd/xkcd.py +++ b/zulip_bots/zulip_bots/bots/xkcd/xkcd.py @@ -2,6 +2,7 @@ import random import logging import requests +from zulip_bots.lib import ExternalBotHandler XKCD_TEMPLATE_URL = 'https://xkcd.com/%s/info.0.json' LATEST_XKCD_URL = 'https://xkcd.com/info.0.json' @@ -19,7 +20,7 @@ class XkcdHandler(object): 'description': 'Fetches comic strips from https://xkcd.com.', } - def usage(self): + def usage(self) -> str: return ''' This plugin allows users to fetch a comic strip provided by https://xkcd.com. Users should preface the command with "@mention-bot". @@ -32,7 +33,7 @@ class XkcdHandler(object): ``, e.g `@mention-bot 1234`. ''' - def handle_message(self, message, bot_handler): + def handle_message(self, message: dict, bot_handler: ExternalBotHandler) -> None: xkcd_bot_response = get_xkcd_bot_response(message) bot_handler.send_reply(message, xkcd_bot_response) @@ -47,7 +48,7 @@ class XkcdNotFoundError(Exception): class XkcdServerError(Exception): pass -def get_xkcd_bot_response(message): +def get_xkcd_bot_response(message: dict) -> str: original_content = message['content'].strip() command = original_content.strip() @@ -82,7 +83,7 @@ def get_xkcd_bot_response(message): fetched['alt'], fetched['img'])) -def fetch_xkcd_query(mode, comic_id=None): +def fetch_xkcd_query(mode: int, comic_id: str = None) -> dict: try: if mode == XkcdBotCommand.LATEST: # Fetch the latest comic strip. url = LATEST_XKCD_URL @@ -111,7 +112,7 @@ def fetch_xkcd_query(mode, comic_id=None): xkcd_json = fetched.json() except requests.exceptions.ConnectionError as e: - logging.warning(e) + logging.exception("Connection Error") raise return xkcd_json