from typing import TypedDict, Tuple from flask_sqlalchemy import BaseQuery from sqlalchemy import desc class PaginationResponse(TypedDict): items: list max_pages: int def order_by_column_name(query: BaseQuery, model_field: str, order_by_col_name: str) -> BaseQuery: if order_by_col_name is not None: if order_by_col_name == 'asc': query = query.order_by(model_field) elif order_by_col_name == 'desc': query = query.order_by(desc(model_field)) return query def paginate_models(page: str, query: BaseQuery) -> PaginationResponse or Tuple[dict, int]: per_page = 10 default_page = 1 if page is not None: try: page = int(page) except ValueError: return {"error": f"Invalid page! Page must be integer!"}, 400 query = query.paginate(page=page, per_page=per_page, error_out=False) else: query = query.paginate(page=default_page, per_page=per_page, error_out=False) return { 'items': query.items, 'max_pages': query.pages }