diff --git a/aiogram/__init__.py b/aiogram/__init__.py index e12ba3d9..169eed5f 100644 --- a/aiogram/__init__.py +++ b/aiogram/__init__.py @@ -38,5 +38,5 @@ __all__ = [ 'utils' ] -__version__ = '2.6' +__version__ = '2.6.1' __api_version__ = '4.6' diff --git a/aiogram/types/__init__.py b/aiogram/types/__init__.py index e4e27e1a..35461bb9 100644 --- a/aiogram/types/__init__.py +++ b/aiogram/types/__init__.py @@ -45,7 +45,7 @@ from .passport_element_error import PassportElementError, PassportElementErrorDa PassportElementErrorSelfie from .passport_file import PassportFile from .photo_size import PhotoSize -from .poll import PollOption, Poll, PollAnswer +from .poll import PollOption, Poll, PollAnswer, PollType from .pre_checkout_query import PreCheckoutQuery from .reply_keyboard import KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove, KeyboardButtonPollType from .response_parameters import ResponseParameters @@ -150,6 +150,7 @@ __all__ = ( 'Poll', 'PollAnswer', 'PollOption', + 'PollType', 'PreCheckoutQuery', 'ReplyKeyboardMarkup', 'ReplyKeyboardRemove', diff --git a/aiogram/types/base.py b/aiogram/types/base.py index 2fd9129d..e64d3398 100644 --- a/aiogram/types/base.py +++ b/aiogram/types/base.py @@ -120,7 +120,7 @@ class TelegramObject(ContextInstanceMixin, metaclass=MetaTelegramObject): return getattr(self, ALIASES_ATTR_NAME, {}) @property - def values(self) -> typing.Tuple[str]: + def values(self) -> typing.Dict[str, typing.Any]: """ Get values @@ -161,9 +161,10 @@ class TelegramObject(ContextInstanceMixin, metaclass=MetaTelegramObject): :return: """ - self.clean() result = {} for name, value in self.values.items(): + if value is None: + continue if name in self.props: value = self.props[name].export(self) if isinstance(value, TelegramObject): @@ -191,7 +192,7 @@ class TelegramObject(ContextInstanceMixin, metaclass=MetaTelegramObject): return json.dumps(self.to_python()) @classmethod - def create(cls: Type[T], *args: typing.Any, **kwargs: typing.Any) -> T: + def create(cls: typing.Type[T], *args: typing.Any, **kwargs: typing.Any) -> T: raise NotImplemented def __str__(self) -> str: @@ -225,15 +226,15 @@ class TelegramObject(ContextInstanceMixin, metaclass=MetaTelegramObject): return self.props[key].set_value(self, value, self.conf.get('parent', None)) raise KeyError(key) - def __contains__(self, item: typing.Dict[str, typing.Any]) -> bool: + def __contains__(self, item: str) -> bool: """ Check key contains in that object :param item: :return: """ - self.clean() - return item in self.values + # self.clean() + return bool(self.values.get(item, None)) def __iter__(self) -> typing.Iterator[str]: """ @@ -263,7 +264,7 @@ class TelegramObject(ContextInstanceMixin, metaclass=MetaTelegramObject): yield value def __hash__(self) -> int: - def _hash(obj)-> int: + def _hash(obj) -> int: buf: int = 0 if isinstance(obj, list): for item in obj: diff --git a/aiogram/types/input_media.py b/aiogram/types/input_media.py index 95ca75ae..952e7a55 100644 --- a/aiogram/types/input_media.py +++ b/aiogram/types/input_media.py @@ -349,7 +349,7 @@ class MediaGroup(base.TelegramObject): :return: """ - self.clean() + # self.clean() result = [] for obj in self.media: if isinstance(obj, base.TelegramObject): diff --git a/aiogram/types/poll.py b/aiogram/types/poll.py index e5a485d4..86b41d7e 100644 --- a/aiogram/types/poll.py +++ b/aiogram/types/poll.py @@ -1,7 +1,7 @@ import typing -from . import base -from . import fields +from ..utils import helper +from . import base, fields from .user import User @@ -11,6 +11,7 @@ class PollOption(base.TelegramObject): https://core.telegram.org/bots/api#polloption """ + text: base.String = fields.Field() voter_count: base.Integer = fields.Field() @@ -21,6 +22,7 @@ class PollAnswer(base.TelegramObject): https://core.telegram.org/bots/api#pollanswer """ + poll_id: base.String = fields.Field() user: User = fields.Field(base=User) option_ids: typing.List[base.Integer] = fields.ListField() @@ -32,6 +34,7 @@ class Poll(base.TelegramObject): https://core.telegram.org/bots/api#poll """ + id: base.String = fields.Field() question: base.String = fields.Field() options: typing.List[PollOption] = fields.ListField(base=PollOption) @@ -41,3 +44,10 @@ class Poll(base.TelegramObject): type: base.String = fields.Field() allows_multiple_answers: base.Boolean = fields.Field() correct_option_id: base.Integer = fields.Field() + + +class PollType(helper.Helper): + mode = helper.HelperMode.snake_case + + REGULAR = helper.Item() + QUIZ = helper.Item() diff --git a/aiogram/types/reply_keyboard.py b/aiogram/types/reply_keyboard.py index 59804f08..ced20417 100644 --- a/aiogram/types/reply_keyboard.py +++ b/aiogram/types/reply_keyboard.py @@ -12,7 +12,7 @@ class KeyboardButtonPollType(base.TelegramObject): """ type: base.String = fields.Field() - def __init__(self, type: base.String): + def __init__(self, type: typing.Optional[base.String] = None): super(KeyboardButtonPollType, self).__init__(type=type) @@ -110,10 +110,12 @@ class KeyboardButton(base.TelegramObject): def __init__(self, text: base.String, request_contact: base.Boolean = None, - request_location: base.Boolean = None): + request_location: base.Boolean = None, + request_poll: KeyboardButtonPollType = None): super(KeyboardButton, self).__init__(text=text, request_contact=request_contact, - request_location=request_location) + request_location=request_location, + request_poll=request_poll) class ReplyKeyboardRemove(base.TelegramObject):