Files
shopdb-flask/shopdb/utils/pagination.py
cproudlock 1196de6e88 Initial commit: Shop Database Flask Application
Flask backend with Vue 3 frontend for shop floor machine management.
Includes database schema export for MySQL shopdb_flask database.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:07:34 -05:00

44 lines
1.0 KiB
Python

"""Pagination utilities."""
from flask import request, current_app
from typing import Tuple
def get_pagination_params(req=None) -> Tuple[int, int]:
"""
Extract pagination parameters from request.
Returns:
Tuple of (page, per_page)
"""
if req is None:
req = request
default_size = current_app.config.get('DEFAULT_PAGE_SIZE', 20)
max_size = current_app.config.get('MAX_PAGE_SIZE', 100)
try:
page = max(1, int(req.args.get('page', 1)))
except (TypeError, ValueError):
page = 1
try:
per_page = int(req.args.get('per_page', default_size))
per_page = max(1, min(per_page, max_size))
except (TypeError, ValueError):
per_page = default_size
return page, per_page
def paginate_query(query, page: int, per_page: int):
"""
Apply pagination to a SQLAlchemy query.
Returns:
Tuple of (items, total)
"""
total = query.count()
items = query.offset((page - 1) * per_page).limit(per_page).all()
return items, total