/
Pepegator
/
task-api
Обзор
Документация
Войти
/
Pepegator
/
task-api
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab3-client
pythonProject2/pagination.py
47 строк
2 KB
Pol136
add pagination and fields
30 дек 2025, 12:09
30 дек 2025, 12:09
ee91189
Код
Авторство
О чём код?
from typing import TypeVar, Generic, List from pydantic import BaseModel, Field T = TypeVar('T') class PaginationParams: def __init__(self, skip: int = 0, limit: int = 10): self.skip = max(0, skip) self.limit = max(1, min(limit, 100)) @property def page(self) -> int: return (self.skip // self.limit) + 1 if self.skip > 0 else 1 class PaginatedResponse(BaseModel, Generic[T]): items: List[T] = Field(..., description="Список элементов") total: int = Field(..., description="Общее количество элементов") skip: int = Field(..., description="Количество пропущенных элементов") limit: int = Field(..., description="Количество элементов на странице") page: int = Field(..., description="Номер текущей страницы") pages: int = Field(..., description="Общее количество страниц") class Config: json_schema_extra = { "example": { "items": [], "total": 100, "skip": 0, "limit": 10, "page": 1, "pages": 10 } } @classmethod def create(cls, items: List[T], total: int, skip: int, limit: int): pages = (total + limit - 1) // limit if total > 0 else 0 page = (skip // limit) + 1 if skip > 0 else 1 return cls( items=items, total=total, skip=skip, limit=limit, page=page, pages=pages )