Files
2026-09-13 22:26:33 +08:00

40 lines
1.0 KiB
Python

"""分页通用工具:统一页码校验、偏移量和列表响应结构。"""
from __future__ import annotations
from collections.abc import Sequence
from math import ceil
from typing import Any
def normalize_pagination(
page: int = 1,
page_size: int = 10,
*,
max_page_size: int = 10,
) -> tuple[int, int, int]:
"""规范化分页参数,返回 ``(page, page_size, offset)``。"""
page = max(1, int(page))
page_size = min(max_page_size, max(1, int(page_size)))
return page, page_size, (page - 1) * page_size
def pagination_result(
items: Sequence[Any],
total: int,
*,
page: int,
page_size: int,
) -> dict[str, Any]:
"""构造统一分页响应,包含总页数供前端直接计算翻页状态。"""
total = max(0, int(total))
return {
"items": list(items),
"total": total,
"page": page,
"page_size": page_size,
"total_pages": ceil(total / page_size) if total else 0,
}
__all__ = ["normalize_pagination", "pagination_result"]