Change default iter/get messages limit

And fix-up previous commit.
This commit is contained in:
Lonami Exo 2018-05-24 10:40:44 +02:00
parent a076688fdc
commit 03f0044ef8

View File

@ -1013,7 +1013,7 @@ class TelegramClient(TelegramBareClient):
else: else:
return self(messages.DeleteMessagesRequest(message_ids, revoke=revoke)) return self(messages.DeleteMessagesRequest(message_ids, revoke=revoke))
def iter_messages(self, entity, limit=20, offset_date=None, def iter_messages(self, entity, limit=None, offset_date=None,
offset_id=0, max_id=0, min_id=0, add_offset=0, offset_id=0, max_id=0, min_id=0, add_offset=0,
search=None, filter=None, from_user=None, search=None, filter=None, from_user=None,
batch_size=100, wait_time=None, _total=None): batch_size=100, wait_time=None, _total=None):
@ -1100,8 +1100,9 @@ class TelegramClient(TelegramBareClient):
# We can emulate their behaviour locally by setting offset = max_id # We can emulate their behaviour locally by setting offset = max_id
# and simply stopping once we hit a message with ID <= min_id. # and simply stopping once we hit a message with ID <= min_id.
offset_id = max(offset_id, max_id) offset_id = max(offset_id, max_id)
if offset_id - min_id <= 1: # Both exclusive, so 1 difference = empty if offset_id and min_id:
return if offset_id - min_id <= 1:
return
entity = self.get_input_entity(entity) entity = self.get_input_entity(entity)
limit = float('inf') if limit is None else int(limit) limit = float('inf') if limit is None else int(limit)
@ -1211,9 +1212,23 @@ class TelegramClient(TelegramBareClient):
""" """
Same as :meth:`iter_messages`, but returns a list instead Same as :meth:`iter_messages`, but returns a list instead
with an additional ``.total`` attribute on the list. with an additional ``.total`` attribute on the list.
If the `limit` is not set, it will be 1 by default unless both
`min_id` **and** `max_id` are set (as *named* arguments), in
which case the entire range will be returned.
This is so because any integer limit would be rather arbitrary and
it's common to only want to fetch one message, but if a range is
specified it makes sense that it should return the entirety of it.
""" """
total = [0] total = [0]
kwargs['_total'] = total kwargs['_total'] = total
if len(args) == 1 and 'limit' not in kwargs:
if 'min_id' in kwargs and 'max_id' in kwargs:
kwargs['limit'] = None
else:
kwargs['limit'] = 1
msgs = UserList(self.iter_messages(*args, **kwargs)) msgs = UserList(self.iter_messages(*args, **kwargs))
msgs.total = total[0] msgs.total = total[0]
return msgs return msgs