22import json
33from datetime import datetime
44from enum import Enum
5- from uuid import UUID
65
76
87class CursorDirection (Enum ):
98 DIRECTION_NEXT = "next"
109 DIRECTION_PREV = "prev"
1110
1211
13- def encode_cursor (created_at : datetime , id : UUID , dir : CursorDirection ) -> str :
12+ def encode_cursor (created_at : datetime , id : int , dir : CursorDirection ) -> str :
1413 """
1514 Encode a cursor from timestamp and ID.
16- Format: base64(json({"t": "ISO_TIMESTAMP", "id": "UUID "}))
15+ Format: base64(json({"t": "ISO_TIMESTAMP", "id": "INT "}))
1716 """
18- cursor_data = {"t" : created_at .isoformat (), "id" : str ( id ) , "dir" : dir .value }
17+ cursor_data = {"t" : created_at .isoformat (), "id" : id , "dir" : dir .value }
1918 json_str = json .dumps (cursor_data )
2019 return base64 .urlsafe_b64encode (json_str .encode ()).decode ()
2120
2221
23- def decode_cursor (cursor : str ) -> tuple [datetime , UUID , CursorDirection ]:
22+ def decode_cursor (cursor : str ) -> tuple [datetime , int , CursorDirection ]:
2423 """
2524 Decode a cursor back to timestamp and ID.
2625 Returns: (created_at, id)
@@ -30,7 +29,7 @@ def decode_cursor(cursor: str) -> tuple[datetime, UUID, CursorDirection]:
3029 cursor_data = json .loads (json_str )
3130 created_at = datetime .fromisoformat (cursor_data ["t" ])
3231 dir = CursorDirection (cursor_data ["dir" ])
33- id = UUID (cursor_data ["id" ])
32+ id = int (cursor_data ["id" ])
3433 return created_at , id , dir
3534 except Exception as e :
3635 raise ValueError (f"Invalid cursor format: { e } " )
0 commit comments