Pagination support!!!

This commit is contained in:
Yaro Kasear 2025-09-16 09:57:40 -05:00
parent 3f677fceee
commit a64c64e828
5 changed files with 298 additions and 12 deletions

21
crudkit/api/_cursor.py Normal file
View file

@ -0,0 +1,21 @@
import base64, json
from typing import Any
def encode_cursor(values: list[Any] | None, desc_flags: list[bool], backward: bool) -> str | None:
if not values:
return None
payload = {"v": values, "d": desc_flags, "b": backward}
return base64.urlsafe_b64encode(json.dumps(payload).encode()).decode()
def decode_cursor(token: str | None) -> tuple[list[Any] | None, bool] | tuple[None, bool]:
if not token:
return None, False
try:
obj = json.loads(base64.urlsafe_b64decode(token.encode()).decode())
vals = obj.get("v")
backward = bool(obj.get("b", False))
if isinstance(vals, list):
return vals, backward
except Exception:
pass
return None, False