Pagination support!!!
This commit is contained in:
parent
3f677fceee
commit
a64c64e828
5 changed files with 298 additions and 12 deletions
21
crudkit/api/_cursor.py
Normal file
21
crudkit/api/_cursor.py
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue