|
14 | 14 | "V4PagePaginationArrayResultInfo",
|
15 | 15 | "SyncV4PagePaginationArray",
|
16 | 16 | "AsyncV4PagePaginationArray",
|
| 17 | + "CursorPaginationResultInfo", |
| 18 | + "SyncCursorPagination", |
| 19 | + "AsyncCursorPagination", |
17 | 20 | ]
|
18 | 21 |
|
19 | 22 | _T = TypeVar("_T")
|
@@ -137,3 +140,55 @@ def next_page_info(self) -> Optional[PageInfo]:
|
137 | 140 | return None
|
138 | 141 |
|
139 | 142 | return PageInfo(params={"page": current_page + 1})
|
| 143 | + |
| 144 | + |
| 145 | +class CursorPaginationResultInfo(BaseModel): |
| 146 | + count: Optional[int] = None |
| 147 | + |
| 148 | + cursor: Optional[str] = None |
| 149 | + |
| 150 | + per_page: Optional[int] = None |
| 151 | + |
| 152 | + |
| 153 | +class SyncCursorPagination(BaseSyncPage[_T], BasePage[_T], Generic[_T]): |
| 154 | + result: Optional[object] = None |
| 155 | + result_info: Optional[CursorPaginationResultInfo] = None |
| 156 | + |
| 157 | + @override |
| 158 | + def _get_page_items(self) -> List[_T]: |
| 159 | + data = self.data |
| 160 | + if not data: |
| 161 | + return [] |
| 162 | + return data |
| 163 | + |
| 164 | + @override |
| 165 | + def next_page_info(self) -> Optional[PageInfo]: |
| 166 | + cursor = None |
| 167 | + if self.result_info is not None: |
| 168 | + cursor = self.result_info.cursor |
| 169 | + if not cursor: |
| 170 | + return None |
| 171 | + |
| 172 | + return PageInfo(params={"cursor": cursor}) |
| 173 | + |
| 174 | + |
| 175 | +class AsyncCursorPagination(BaseAsyncPage[_T], BasePage[_T], Generic[_T]): |
| 176 | + result: Optional[object] = None |
| 177 | + result_info: Optional[CursorPaginationResultInfo] = None |
| 178 | + |
| 179 | + @override |
| 180 | + def _get_page_items(self) -> List[_T]: |
| 181 | + data = self.data |
| 182 | + if not data: |
| 183 | + return [] |
| 184 | + return data |
| 185 | + |
| 186 | + @override |
| 187 | + def next_page_info(self) -> Optional[PageInfo]: |
| 188 | + cursor = None |
| 189 | + if self.result_info is not None: |
| 190 | + cursor = self.result_info.cursor |
| 191 | + if not cursor: |
| 192 | + return None |
| 193 | + |
| 194 | + return PageInfo(params={"cursor": cursor}) |
0 commit comments