diff --git a/app/assets/api/routes.py b/app/assets/api/routes.py index 544a614f2..389ca1462 100644 --- a/app/assets/api/routes.py +++ b/app/assets/api/routes.py @@ -39,7 +39,7 @@ from app.assets.services import ( update_asset_metadata, upload_from_temp_path, ) -from app.assets.services.cursor import InvalidCursorError +from utils.cursor import InvalidCursorError from app.assets.services.tagging import list_tag_histogram ROUTES = web.RouteTableDef() diff --git a/app/assets/services/asset_management.py b/app/assets/services/asset_management.py index 1072c95fa..5df630156 100644 --- a/app/assets/services/asset_management.py +++ b/app/assets/services/asset_management.py @@ -4,7 +4,7 @@ import os from datetime import timezone from typing import Sequence -from app.assets.services.cursor import ( +from utils.cursor import ( CursorPayload, InvalidCursorError, decode_cursor, diff --git a/tests-unit/assets_test/services/test_cursor.py b/tests-unit/assets_test/services/test_cursor.py index 47970e168..18863cd22 100644 --- a/tests-unit/assets_test/services/test_cursor.py +++ b/tests-unit/assets_test/services/test_cursor.py @@ -1,4 +1,4 @@ -"""Tests for app.assets.services.cursor. +"""Tests for utils.cursor. Cursors are opaque tokens internal to this server — these tests cover round-tripping, validation, and length caps, not any particular wire @@ -11,7 +11,7 @@ from datetime import datetime, timedelta, timezone import pytest -from app.assets.services.cursor import ( +from utils.cursor import ( MAX_CURSOR_ID_LENGTH, MAX_CURSOR_VALUE_LENGTH, MAX_ENCODED_CURSOR_LENGTH, diff --git a/app/assets/services/cursor.py b/utils/cursor.py similarity index 99% rename from app/assets/services/cursor.py rename to utils/cursor.py index 6c7791528..d140f8fef 100644 --- a/app/assets/services/cursor.py +++ b/utils/cursor.py @@ -1,4 +1,4 @@ -"""Opaque keyset-pagination cursor for /api/assets. +"""Opaque keyset-pagination cursor shared by /api/assets and /api/jobs. Payload JSON uses short keys to keep the encoded length small: