From 9be4c7563bcda6ae556dbacf69af4d6d3953b405 Mon Sep 17 00:00:00 2001 From: Bibo-Joshi Date: Thu, 15 Oct 2020 18:50:47 +0200 Subject: [PATCH] Improve Type Hinting for Class Variables (#2136) --- telegram/chat.py | 10 ++++----- telegram/chataction.py | 21 +++++++++--------- telegram/chatmember.py | 14 ++++++------ telegram/dice.py | 10 ++++----- telegram/ext/basepersistence.py | 4 ++-- telegram/ext/conversationhandler.py | 8 +++---- telegram/ext/dispatcher.py | 2 +- telegram/files/sticker.py | 10 ++++----- telegram/message.py | 6 ++--- telegram/messageentity.py | 34 ++++++++++++++--------------- telegram/parsemode.py | 7 +++--- telegram/poll.py | 6 ++--- 12 files changed, 67 insertions(+), 65 deletions(-) diff --git a/telegram/chat.py b/telegram/chat.py index 5ffd8dd5b..cdec2284d 100644 --- a/telegram/chat.py +++ b/telegram/chat.py @@ -23,7 +23,7 @@ from telegram import TelegramObject, ChatPhoto, constants from .chatpermissions import ChatPermissions from telegram.utils.types import JSONDict -from typing import Any, Optional, List, TYPE_CHECKING +from typing import Any, Optional, List, TYPE_CHECKING, ClassVar if TYPE_CHECKING: from telegram import Bot, Message, ChatMember @@ -92,13 +92,13 @@ class Chat(TelegramObject): """ - PRIVATE: str = constants.CHAT_PRIVATE + PRIVATE: ClassVar[str] = constants.CHAT_PRIVATE """:const:`telegram.constants.CHAT_PRIVATE`""" - GROUP: str = constants.CHAT_GROUP + GROUP: ClassVar[str] = constants.CHAT_GROUP """:const:`telegram.constants.CHAT_GROUP`""" - SUPERGROUP: str = constants.CHAT_SUPERGROUP + SUPERGROUP: ClassVar[str] = constants.CHAT_SUPERGROUP """:const:`telegram.constants.CHAT_SUPERGROUP`""" - CHANNEL: str = constants.CHAT_CHANNEL + CHANNEL: ClassVar[str] = constants.CHAT_CHANNEL """:const:`telegram.constants.CHAT_CHANNEL`""" def __init__( diff --git a/telegram/chataction.py b/telegram/chataction.py index 3d797a47a..e7d4e5d81 100644 --- a/telegram/chataction.py +++ b/telegram/chataction.py @@ -18,29 +18,30 @@ # You should have received a copy of the GNU Lesser Public License # along with this program. If not, see [http://www.gnu.org/licenses/]. """This module contains an object that represents a Telegram ChatAction.""" +from typing import ClassVar from telegram import constants class ChatAction: """Helper class to provide constants for different chat actions.""" - FIND_LOCATION: str = constants.CHATACTION_FIND_LOCATION + FIND_LOCATION: ClassVar[str] = constants.CHATACTION_FIND_LOCATION """:const:`telegram.constants.CHATACTION_FIND_LOCATION`""" - RECORD_AUDIO: str = constants.CHATACTION_RECORD_AUDIO + RECORD_AUDIO: ClassVar[str] = constants.CHATACTION_RECORD_AUDIO """:const:`telegram.constants.CHATACTION_RECORD_AUDIO`""" - RECORD_VIDEO: str = constants.CHATACTION_RECORD_VIDEO + RECORD_VIDEO: ClassVar[str] = constants.CHATACTION_RECORD_VIDEO """:const:`telegram.constants.CHATACTION_RECORD_VIDEO`""" - RECORD_VIDEO_NOTE: str = constants.CHATACTION_RECORD_VIDEO_NOTE + RECORD_VIDEO_NOTE: ClassVar[str] = constants.CHATACTION_RECORD_VIDEO_NOTE """:const:`telegram.constants.CHATACTION_RECORD_VIDEO_NOTE`""" - TYPING: str = constants.CHATACTION_TYPING + TYPING: ClassVar[str] = constants.CHATACTION_TYPING """:const:`telegram.constants.CHATACTION_TYPING`""" - UPLOAD_AUDIO: str = constants.CHATACTION_UPLOAD_AUDIO + UPLOAD_AUDIO: ClassVar[str] = constants.CHATACTION_UPLOAD_AUDIO """:const:`telegram.constants.CHATACTION_UPLOAD_AUDIO`""" - UPLOAD_DOCUMENT: str = constants.CHATACTION_UPLOAD_DOCUMENT + UPLOAD_DOCUMENT: ClassVar[str] = constants.CHATACTION_UPLOAD_DOCUMENT """:const:`telegram.constants.CHATACTION_UPLOAD_DOCUMENT`""" - UPLOAD_PHOTO: str = constants.CHATACTION_UPLOAD_PHOTO + UPLOAD_PHOTO: ClassVar[str] = constants.CHATACTION_UPLOAD_PHOTO """:const:`telegram.constants.CHATACTION_UPLOAD_PHOTO`""" - UPLOAD_VIDEO: str = constants.CHATACTION_UPLOAD_VIDEO + UPLOAD_VIDEO: ClassVar[str] = constants.CHATACTION_UPLOAD_VIDEO """:const:`telegram.constants.CHATACTION_UPLOAD_VIDEO`""" - UPLOAD_VIDEO_NOTE: str = constants.CHATACTION_UPLOAD_VIDEO_NOTE + UPLOAD_VIDEO_NOTE: ClassVar[str] = constants.CHATACTION_UPLOAD_VIDEO_NOTE """:const:`telegram.constants.CHATACTION_UPLOAD_VIDEO_NOTE`""" diff --git a/telegram/chatmember.py b/telegram/chatmember.py index 95d0f2028..59f9c069c 100644 --- a/telegram/chatmember.py +++ b/telegram/chatmember.py @@ -23,7 +23,7 @@ from telegram import User, TelegramObject, constants from telegram.utils.helpers import to_timestamp, from_timestamp from telegram.utils.types import JSONDict -from typing import Any, Optional, TYPE_CHECKING +from typing import Any, Optional, TYPE_CHECKING, ClassVar if TYPE_CHECKING: from telegram import Bot @@ -111,17 +111,17 @@ class ChatMember(TelegramObject): may add web page previews to his messages. """ - ADMINISTRATOR: str = constants.CHATMEMBER_ADMINISTRATOR + ADMINISTRATOR: ClassVar[str] = constants.CHATMEMBER_ADMINISTRATOR """:const:`telegram.constants.CHATMEMBER_ADMINISTRATOR`""" - CREATOR: str = constants.CHATMEMBER_CREATOR + CREATOR: ClassVar[str] = constants.CHATMEMBER_CREATOR """:const:`telegram.constants.CHATMEMBER_CREATOR`""" - KICKED: str = constants.CHATMEMBER_KICKED + KICKED: ClassVar[str] = constants.CHATMEMBER_KICKED """:const:`telegram.constants.CHATMEMBER_KICKED`""" - LEFT: str = constants.CHATMEMBER_LEFT + LEFT: ClassVar[str] = constants.CHATMEMBER_LEFT """:const:`telegram.constants.CHATMEMBER_LEFT`""" - MEMBER: str = constants.CHATMEMBER_MEMBER + MEMBER: ClassVar[str] = constants.CHATMEMBER_MEMBER """:const:`telegram.constants.CHATMEMBER_MEMBER`""" - RESTRICTED: str = constants.CHATMEMBER_RESTRICTED + RESTRICTED: ClassVar[str] = constants.CHATMEMBER_RESTRICTED """:const:`telegram.constants.CHATMEMBER_RESTRICTED`""" def __init__( diff --git a/telegram/dice.py b/telegram/dice.py index 47a3e6a42..7186d951c 100644 --- a/telegram/dice.py +++ b/telegram/dice.py @@ -19,7 +19,7 @@ # along with this program. If not, see [http://www.gnu.org/licenses/]. """This module contains an object that represents a Telegram Dice.""" from telegram import TelegramObject, constants -from typing import Any, List +from typing import Any, List, ClassVar class Dice(TelegramObject): @@ -55,11 +55,11 @@ class Dice(TelegramObject): self._id_attrs = (self.value, self.emoji) - DICE: str = constants.DICE_DICE + DICE: ClassVar[str] = constants.DICE_DICE """:const:`telegram.constants.DICE_DICE`""" - DARTS: str = constants.DICE_DARTS + DARTS: ClassVar[str] = constants.DICE_DARTS """:const:`telegram.constants.DICE_DARTS`""" - BASKETBALL: str = constants.DICE_BASKETBALL + BASKETBALL: ClassVar[str] = constants.DICE_BASKETBALL """:const:`telegram.constants.DICE_BASKETBALL`""" - ALL_EMOJI: List[str] = constants.DICE_ALL_EMOJI + ALL_EMOJI: ClassVar[List[str]] = constants.DICE_ALL_EMOJI """:const:`telegram.constants.DICE_ALL_EMOJI`""" diff --git a/telegram/ext/basepersistence.py b/telegram/ext/basepersistence.py index e7be4d7e6..dea635d37 100644 --- a/telegram/ext/basepersistence.py +++ b/telegram/ext/basepersistence.py @@ -24,7 +24,7 @@ from copy import copy from telegram import Bot -from typing import DefaultDict, Dict, Any, Tuple, Optional, cast +from typing import DefaultDict, Dict, Any, Tuple, Optional, cast, ClassVar from telegram.utils.types import ConversationDict @@ -302,5 +302,5 @@ class BasePersistence(ABC): """ pass - REPLACED_BOT = 'bot_instance_replaced_by_ptb_persistence' + REPLACED_BOT: ClassVar[str] = 'bot_instance_replaced_by_ptb_persistence' """:obj:`str`: Placeholder for :class:`telegram.Bot` instances replaced in saved data.""" diff --git a/telegram/ext/conversationhandler.py b/telegram/ext/conversationhandler.py index bee391ccd..b5964a426 100644 --- a/telegram/ext/conversationhandler.py +++ b/telegram/ext/conversationhandler.py @@ -35,7 +35,7 @@ from telegram.ext import ( from telegram.utils.promise import Promise from telegram.utils.types import ConversationDict, HandlerArg -from typing import Dict, Any, List, Optional, Tuple, TYPE_CHECKING, cast, NoReturn +from typing import Dict, Any, List, Optional, Tuple, TYPE_CHECKING, cast, NoReturn, ClassVar if TYPE_CHECKING: from telegram.ext import Dispatcher, Job @@ -169,11 +169,11 @@ class ConversationHandler(Handler): """ - END = -1 + END: ClassVar[int] = -1 """:obj:`int`: Used as a constant to return when a conversation is ended.""" - TIMEOUT = -2 + TIMEOUT: ClassVar[int] = -2 """:obj:`int`: Used as a constant to handle state when a conversation is timed out.""" - WAITING = -3 + WAITING: ClassVar[int] = -3 """:obj:`int`: Used as a constant to handle state when a conversation is still waiting on the previous ``@run_sync`` decorated running handler to finish.""" diff --git a/telegram/ext/dispatcher.py b/telegram/ext/dispatcher.py index a4c1b48a1..c7658e411 100644 --- a/telegram/ext/dispatcher.py +++ b/telegram/ext/dispatcher.py @@ -44,7 +44,7 @@ if TYPE_CHECKING: from telegram import Bot from telegram.ext import JobQueue -DEFAULT_GROUP = 0 +DEFAULT_GROUP: int = 0 def run_async( diff --git a/telegram/files/sticker.py b/telegram/files/sticker.py index 4d3eb3fae..bc97b5dab 100644 --- a/telegram/files/sticker.py +++ b/telegram/files/sticker.py @@ -20,7 +20,7 @@ from telegram import PhotoSize, TelegramObject, constants from telegram.utils.types import JSONDict -from typing import Any, Optional, List, TYPE_CHECKING +from typing import Any, Optional, List, TYPE_CHECKING, ClassVar if TYPE_CHECKING: from telegram import Bot, File @@ -233,13 +233,13 @@ class MaskPosition(TelegramObject): """ - FOREHEAD: str = constants.STICKER_FOREHEAD + FOREHEAD: ClassVar[str] = constants.STICKER_FOREHEAD """:const:`telegram.constants.STICKER_FOREHEAD`""" - EYES: str = constants.STICKER_EYES + EYES: ClassVar[str] = constants.STICKER_EYES """:const:`telegram.constants.STICKER_EYES`""" - MOUTH: str = constants.STICKER_MOUTH + MOUTH: ClassVar[str] = constants.STICKER_MOUTH """:const:`telegram.constants.STICKER_MOUTH`""" - CHIN: str = constants.STICKER_CHIN + CHIN: ClassVar[str] = constants.STICKER_CHIN """:const:`telegram.constants.STICKER_CHIN`""" def __init__(self, point: str, x_shift: float, y_shift: float, scale: float, **kwargs: Any): diff --git a/telegram/message.py b/telegram/message.py index a45a2a439..8fb04c77b 100644 --- a/telegram/message.py +++ b/telegram/message.py @@ -50,7 +50,7 @@ from telegram import ParseMode from telegram.utils.helpers import escape_markdown, to_timestamp, from_timestamp from telegram.utils.types import JSONDict -from typing import Any, List, Dict, Optional, Union, TYPE_CHECKING +from typing import Any, List, Dict, Optional, Union, TYPE_CHECKING, ClassVar if TYPE_CHECKING: from telegram import Bot, InputMedia, GameHighScore @@ -259,7 +259,7 @@ class Message(TelegramObject): _effective_attachment = _UNDEFINED - ATTACHMENT_TYPES = [ + ATTACHMENT_TYPES: ClassVar[List[str]] = [ 'audio', 'game', 'animation', @@ -275,7 +275,7 @@ class Message(TelegramObject): 'invoice', 'successful_payment', ] - MESSAGE_TYPES = [ + MESSAGE_TYPES: ClassVar[List[str]] = [ 'text', 'new_chat_members', 'left_chat_member', diff --git a/telegram/messageentity.py b/telegram/messageentity.py index ffdc39b35..92dc53fff 100644 --- a/telegram/messageentity.py +++ b/telegram/messageentity.py @@ -20,7 +20,7 @@ from telegram import User, TelegramObject, constants from telegram.utils.types import JSONDict -from typing import Any, Optional, List, TYPE_CHECKING +from typing import Any, Optional, List, TYPE_CHECKING, ClassVar if TYPE_CHECKING: from telegram import Bot @@ -90,36 +90,36 @@ class MessageEntity(TelegramObject): return cls(**data) - MENTION: str = constants.MESSAGEENTITY_MENTION + MENTION: ClassVar[str] = constants.MESSAGEENTITY_MENTION """:const:`telegram.constants.MESSAGEENTITY_MENTION`""" - HASHTAG: str = constants.MESSAGEENTITY_HASHTAG + HASHTAG: ClassVar[str] = constants.MESSAGEENTITY_HASHTAG """:const:`telegram.constants.MESSAGEENTITY_HASHTAG`""" - CASHTAG: str = constants.MESSAGEENTITY_CASHTAG + CASHTAG: ClassVar[str] = constants.MESSAGEENTITY_CASHTAG """:const:`telegram.constants.MESSAGEENTITY_CASHTAG`""" - PHONE_NUMBER: str = constants.MESSAGEENTITY_PHONE_NUMBER + PHONE_NUMBER: ClassVar[str] = constants.MESSAGEENTITY_PHONE_NUMBER """:const:`telegram.constants.MESSAGEENTITY_PHONE_NUMBER`""" - BOT_COMMAND: str = constants.MESSAGEENTITY_BOT_COMMAND + BOT_COMMAND: ClassVar[str] = constants.MESSAGEENTITY_BOT_COMMAND """:const:`telegram.constants.MESSAGEENTITY_BOT_COMMAND`""" - URL: str = constants.MESSAGEENTITY_URL + URL: ClassVar[str] = constants.MESSAGEENTITY_URL """:const:`telegram.constants.MESSAGEENTITY_URL`""" - EMAIL: str = constants.MESSAGEENTITY_EMAIL + EMAIL: ClassVar[str] = constants.MESSAGEENTITY_EMAIL """:const:`telegram.constants.MESSAGEENTITY_EMAIL`""" - BOLD: str = constants.MESSAGEENTITY_BOLD + BOLD: ClassVar[str] = constants.MESSAGEENTITY_BOLD """:const:`telegram.constants.MESSAGEENTITY_BOLD`""" - ITALIC: str = constants.MESSAGEENTITY_ITALIC + ITALIC: ClassVar[str] = constants.MESSAGEENTITY_ITALIC """:const:`telegram.constants.MESSAGEENTITY_ITALIC`""" - CODE: str = constants.MESSAGEENTITY_CODE + CODE: ClassVar[str] = constants.MESSAGEENTITY_CODE """:const:`telegram.constants.MESSAGEENTITY_CODE`""" - PRE: str = constants.MESSAGEENTITY_PRE + PRE: ClassVar[str] = constants.MESSAGEENTITY_PRE """:const:`telegram.constants.MESSAGEENTITY_PRE`""" - TEXT_LINK: str = constants.MESSAGEENTITY_TEXT_LINK + TEXT_LINK: ClassVar[str] = constants.MESSAGEENTITY_TEXT_LINK """:const:`telegram.constants.MESSAGEENTITY_TEXT_LINK`""" - TEXT_MENTION: str = constants.MESSAGEENTITY_TEXT_MENTION + TEXT_MENTION: ClassVar[str] = constants.MESSAGEENTITY_TEXT_MENTION """:const:`telegram.constants.MESSAGEENTITY_TEXT_MENTION`""" - UNDERLINE: str = constants.MESSAGEENTITY_UNDERLINE + UNDERLINE: ClassVar[str] = constants.MESSAGEENTITY_UNDERLINE """:const:`telegram.constants.MESSAGEENTITY_UNDERLINE`""" - STRIKETHROUGH: str = constants.MESSAGEENTITY_STRIKETHROUGH + STRIKETHROUGH: ClassVar[str] = constants.MESSAGEENTITY_STRIKETHROUGH """:const:`telegram.constants.MESSAGEENTITY_STRIKETHROUGH`""" - ALL_TYPES: List[str] = constants.MESSAGEENTITY_ALL_TYPES + ALL_TYPES: ClassVar[List[str]] = constants.MESSAGEENTITY_ALL_TYPES """:const:`telegram.constants.MESSAGEENTITY_ALL_TYPES`\n List of all the types""" diff --git a/telegram/parsemode.py b/telegram/parsemode.py index e86796e69..fa463cfde 100644 --- a/telegram/parsemode.py +++ b/telegram/parsemode.py @@ -18,6 +18,7 @@ # You should have received a copy of the GNU Lesser Public License # along with this program. If not, see [http://www.gnu.org/licenses/]. """This module contains an object that represents a Telegram Message Parse Modes.""" +from typing import ClassVar from telegram import constants @@ -25,14 +26,14 @@ from telegram import constants class ParseMode: """This object represents a Telegram Message Parse Modes.""" - MARKDOWN: str = constants.PARSEMODE_MARKDOWN + MARKDOWN: ClassVar[str] = constants.PARSEMODE_MARKDOWN """:const:`telegram.constants.PARSEMODE_MARKDOWN`\n Note: :attr:`MARKDOWN` is a legacy mode, retained by Telegram for backward compatibility. You should use :attr:`MARKDOWN_V2` instead. """ - MARKDOWN_V2: str = constants.PARSEMODE_MARKDOWN_V2 + MARKDOWN_V2: ClassVar[str] = constants.PARSEMODE_MARKDOWN_V2 """:const:`telegram.constants.PARSEMODE_MARKDOWN_V2`""" - HTML: str = constants.PARSEMODE_HTML + HTML: ClassVar[str] = constants.PARSEMODE_HTML """:const:`telegram.constants.PARSEMODE_HTML`""" diff --git a/telegram/poll.py b/telegram/poll.py index 9216a22ac..4c394e74a 100644 --- a/telegram/poll.py +++ b/telegram/poll.py @@ -25,7 +25,7 @@ import datetime from telegram import TelegramObject, User, MessageEntity, constants from telegram.utils.helpers import to_timestamp, from_timestamp from telegram.utils.types import JSONDict -from typing import Any, Dict, Optional, List, TYPE_CHECKING +from typing import Any, Dict, Optional, List, TYPE_CHECKING, ClassVar if TYPE_CHECKING: from telegram import Bot @@ -259,7 +259,7 @@ class Poll(TelegramObject): if entity.type in types } - REGULAR: str = constants.POLL_REGULAR + REGULAR: ClassVar[str] = constants.POLL_REGULAR """:const:`telegram.constants.POLL_REGULAR`""" - QUIZ: str = constants.POLL_QUIZ + QUIZ: ClassVar[str] = constants.POLL_QUIZ """:const:`telegram.constants.POLL_QUIZ`"""