feat(core): Support higher-order operators (#1984)

Co-authored-by: 谨欣 <echo.cmy@antgroup.com>
This commit is contained in:
Fangyin Cheng
2024-09-09 10:15:37 +08:00
committed by GitHub
parent f6d5fc4595
commit 65c875db20
62 changed files with 6281 additions and 386 deletions

View File

@@ -15,3 +15,29 @@ class PaginationResult(BaseModel, Generic[T]):
total_pages: int = Field(..., description="total number of pages")
page: int = Field(..., description="Current page number")
page_size: int = Field(..., description="Number of items per page")
@classmethod
def build_from_all(
cls, all_items: List[T], page: int, page_size: int
) -> "PaginationResult[T]":
"""Build a pagination result from all items"""
if page < 1:
page = 1
if page_size < 1:
page_size = 1
total_count = len(all_items)
total_pages = (
(total_count + page_size - 1) // page_size if total_count > 0 else 0
)
page = max(1, min(page, total_pages)) if total_pages > 0 else 0
start_index = (page - 1) * page_size if page > 0 else 0
end_index = min(start_index + page_size, total_count)
items = all_items[start_index:end_index]
return cls(
items=items,
total_count=total_count,
total_pages=total_pages,
page=page,
page_size=page_size,
)