From 8db8f70113fc692d0a8c71c12ed5a720c3d08891 Mon Sep 17 00:00:00 2001 From: Roman Inflianskas Date: Fri, 23 Nov 2018 15:08:18 +0300 Subject: [PATCH] Add index_of_first_element_on_page, index_of_last_element_on_page --- aiogram/utils/parts.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/aiogram/utils/parts.py b/aiogram/utils/parts.py index e03f7bcc..5cdc38bd 100644 --- a/aiogram/utils/parts.py +++ b/aiogram/utils/parts.py @@ -43,6 +43,28 @@ def safe_split_text(text: str, length: int = MAX_MESSAGE_LENGTH) -> typing.List[ return parts +def index_of_first_element_on_page(page: int = 0, limit: int = 10) -> int: + """ + Index of first element on page + + :param page: int number of page (default: 0) + :param limit: int items per page (default: 10) + :return: int index of first element on page + """ + return page * limit + + +def index_of_last_element_on_page(page: int = 0, limit: int = 10) -> int: + """ + Index of last element on page + + :param page: int number of page (default: 0) + :param limit: int items per page (default: 10) + :return: int index of last element on page + """ + return index_of_last_element_on_page(page=page, limit=limit) + limit + + def paginate(data: typing.Iterable, page: int = 0, limit: int = 10) -> typing.Iterable: """ Slice data over pages @@ -56,4 +78,5 @@ def paginate(data: typing.Iterable, page: int = 0, limit: int = 10) -> typing.It :return: sliced object :rtype: :obj:`typing.Iterable` """ - return data[page * limit:page * limit + limit] + return data[index_of_first_element_on_page(page=page, limit=limit): + index_of_last_element_on_page(page=page, limit=limit)]