Fix async_generator's and missing awaits

This commit is contained in:
Lonami Exo 2018-06-10 22:00:55 +02:00
parent 8be6adeab4
commit f86f52d960
4 changed files with 22 additions and 10 deletions

View File

@ -179,8 +179,9 @@ class ChatMethods(UserMethods):
""" """
total = [0] total = [0]
kwargs['_total'] = total kwargs['_total'] = total
participants = UserList(x async for x in participants = UserList()
self.iter_participants(*args, **kwargs)) async for x in self.iter_participants(*args, **kwargs):
participants.append(x)
participants.total = total[0] participants.total = total[0]
return participants return participants

View File

@ -9,6 +9,7 @@ from ..tl import types, functions, custom
class DialogMethods(UserMethods): class DialogMethods(UserMethods):
# region Public methods # region Public methods
@async_generator @async_generator
@ -103,10 +104,13 @@ class DialogMethods(UserMethods):
""" """
total = [0] total = [0]
kwargs['_total'] = total kwargs['_total'] = total
dialogs = UserList(x async for x in self.iter_dialogs(*args, **kwargs)) dialogs = UserList()
async for x in self.iter_dialogs(*args, **kwargs):
dialogs.append(x)
dialogs.total = total[0] dialogs.total = total[0]
return dialogs return dialogs
@async_generator
async def iter_drafts(self): # TODO: Ability to provide a `filter` async def iter_drafts(self): # TODO: Ability to provide a `filter`
""" """
Iterator over all open draft messages. Iterator over all open draft messages.
@ -124,6 +128,9 @@ class DialogMethods(UserMethods):
""" """
Same as :meth:`iter_drafts`, but returns a list instead. Same as :meth:`iter_drafts`, but returns a list instead.
""" """
return list(x async for x in self.iter_drafts()) result = []
async for x in self.iter_drafts():
result.append(x)
return result
# endregion # endregion

View File

@ -244,7 +244,9 @@ class MessageMethods(UploadMethods, MessageParseMethods):
else: else:
kwargs['limit'] = 1 kwargs['limit'] = 1
msgs = UserList(x async for x in self.iter_messages(*args, **kwargs)) msgs = UserList()
async for x in self.iter_messages(*args, **kwargs):
msgs.append(x)
msgs.total = total[0] msgs.total = total[0]
if 'ids' in kwargs and not utils.is_list_like(kwargs['ids']): if 'ids' in kwargs and not utils.is_list_like(kwargs['ids']):
return msgs[0] return msgs[0]

View File

@ -269,24 +269,26 @@ class Message:
return bool(self.original_message.reply_to_msg_id) return bool(self.original_message.reply_to_msg_id)
@property @property
def buttons(self): async def buttons(self):
""" """
Returns a matrix (list of lists) containing all buttons of the message Returns a matrix (list of lists) containing all buttons of the message
as `telethon.tl.custom.messagebutton.MessageButton` instances. as `telethon.tl.custom.messagebutton.MessageButton` instances.
""" """
if self._buttons is None and self.original_message.reply_markup: if self._buttons is None and self.original_message.reply_markup:
sender = await self.input_sender
chat = await self.input_chat
if isinstance(self.original_message.reply_markup, ( if isinstance(self.original_message.reply_markup, (
types.ReplyInlineMarkup, types.ReplyKeyboardMarkup)): types.ReplyInlineMarkup, types.ReplyKeyboardMarkup)):
self._buttons = [[ self._buttons = [[
MessageButton(self._client, button, self.input_sender, MessageButton(self._client, button, sender, chat,
self.input_chat, self.original_message.id) self.original_message.id)
for button in row.buttons for button in row.buttons
] for row in self.original_message.reply_markup.rows] ] for row in self.original_message.reply_markup.rows]
self._buttons_flat = [x for row in self._buttons for x in row] self._buttons_flat = [x for row in self._buttons for x in row]
return self._buttons return self._buttons
@property @property
def button_count(self): async def button_count(self):
""" """
Returns the total button count. Returns the total button count.
""" """
@ -398,7 +400,7 @@ class Message:
if not self.original_message.reply_to_msg_id: if not self.original_message.reply_to_msg_id:
return None return None
self._reply_message = await self._client.get_messages( self._reply_message = await self._client.get_messages(
self.input_chat if self.is_channel else None, await self.input_chat if self.is_channel else None,
ids=self.original_message.reply_to_msg_id ids=self.original_message.reply_to_msg_id
) )