def paginate(query: peewee.SelectQuery, page: int = 0, per_page: int = 100) -> tuple[peewee.SelectQuery, int]: """Paginate the results of a query. Returns results and number of pages. """ total_results = query.count() pages = math.ceil(total_results / per_page) if pages and page >= pages: raise utils.RequestError(3201) page = query.offset(page * per_page).limit(per_page) return page, pages