mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-28 13:00:02 +00:00
feat: Support variables query API
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
84
dbgpt/util/tests/test_pagination_utils.py
Normal file
84
dbgpt/util/tests/test_pagination_utils.py
Normal file
@@ -0,0 +1,84 @@
|
||||
from dbgpt.util.pagination_utils import PaginationResult
|
||||
|
||||
|
||||
def test_build_from_all_normal_case():
|
||||
items = list(range(100))
|
||||
result = PaginationResult.build_from_all(items, page=2, page_size=20)
|
||||
|
||||
assert len(result.items) == 20
|
||||
assert result.items == list(range(20, 40))
|
||||
assert result.total_count == 100
|
||||
assert result.total_pages == 5
|
||||
assert result.page == 2
|
||||
assert result.page_size == 20
|
||||
|
||||
|
||||
def test_build_from_all_empty_list():
|
||||
items = []
|
||||
result = PaginationResult.build_from_all(items, page=1, page_size=5)
|
||||
|
||||
assert result.items == []
|
||||
assert result.total_count == 0
|
||||
assert result.total_pages == 0
|
||||
assert result.page == 0
|
||||
assert result.page_size == 5
|
||||
|
||||
|
||||
def test_build_from_all_last_page():
|
||||
items = list(range(95))
|
||||
result = PaginationResult.build_from_all(items, page=5, page_size=20)
|
||||
|
||||
assert len(result.items) == 15
|
||||
assert result.items == list(range(80, 95))
|
||||
assert result.total_count == 95
|
||||
assert result.total_pages == 5
|
||||
assert result.page == 5
|
||||
assert result.page_size == 20
|
||||
|
||||
|
||||
def test_build_from_all_page_out_of_range():
|
||||
items = list(range(50))
|
||||
result = PaginationResult.build_from_all(items, page=10, page_size=10)
|
||||
|
||||
assert len(result.items) == 10
|
||||
assert result.items == list(range(40, 50))
|
||||
assert result.total_count == 50
|
||||
assert result.total_pages == 5
|
||||
assert result.page == 5
|
||||
assert result.page_size == 10
|
||||
|
||||
|
||||
def test_build_from_all_page_zero():
|
||||
items = list(range(50))
|
||||
result = PaginationResult.build_from_all(items, page=0, page_size=10)
|
||||
|
||||
assert len(result.items) == 10
|
||||
assert result.items == list(range(0, 10))
|
||||
assert result.total_count == 50
|
||||
assert result.total_pages == 5
|
||||
assert result.page == 1
|
||||
assert result.page_size == 10
|
||||
|
||||
|
||||
def test_build_from_all_negative_page():
|
||||
items = list(range(50))
|
||||
result = PaginationResult.build_from_all(items, page=-1, page_size=10)
|
||||
|
||||
assert len(result.items) == 10
|
||||
assert result.items == list(range(0, 10))
|
||||
assert result.total_count == 50
|
||||
assert result.total_pages == 5
|
||||
assert result.page == 1
|
||||
assert result.page_size == 10
|
||||
|
||||
|
||||
def test_build_from_all_page_size_larger_than_total():
|
||||
items = list(range(50))
|
||||
result = PaginationResult.build_from_all(items, page=1, page_size=100)
|
||||
|
||||
assert len(result.items) == 50
|
||||
assert result.items == list(range(50))
|
||||
assert result.total_count == 50
|
||||
assert result.total_pages == 1
|
||||
assert result.page == 1
|
||||
assert result.page_size == 100
|
Reference in New Issue
Block a user