mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-30 19:07:25 +08:00
chore(assets): drop cross-repo prose from cursor comments
Strip prose references to sibling Go implementations and external ticket IDs from cursor.py, the cursor tests, the keyset integration tests, asset_management's sort-field comment, and the legacy prompt_id alias comment. Pure docstring/comment scrub — no behavior or wire-format changes. x-runtime: [cloud] field annotations in openapi.yaml are unchanged; those are the spec's structural cross-runtime convention, not internal references.
This commit is contained in:
parent
9a7f580b37
commit
ab47c85f95
@ -173,7 +173,7 @@ def _build_asset_response(result: schemas.AssetDetailResult | schemas.UploadResu
|
||||
user_metadata=result.ref.user_metadata or {},
|
||||
metadata=result.ref.system_metadata,
|
||||
job_id=result.ref.job_id,
|
||||
prompt_id=result.ref.job_id, # deprecated: mirrors job_id for cloud compat
|
||||
prompt_id=result.ref.job_id, # deprecated alias of job_id, kept for compatibility
|
||||
created_at=result.ref.created_at,
|
||||
updated_at=result.ref.updated_at,
|
||||
last_access_time=result.ref.last_access_time,
|
||||
|
||||
@ -253,9 +253,8 @@ def get_asset_by_hash(asset_hash: str) -> AssetData | None:
|
||||
return extract_asset_data(asset)
|
||||
|
||||
|
||||
# Sort fields that support cursor pagination. Mirrors cloud's allowlist
|
||||
# (created_at, updated_at, name, size). `last_access_time` is OSS-only and
|
||||
# falls back to offset/limit — no cloud contract to match.
|
||||
# Sort fields that support cursor pagination. `last_access_time` is not
|
||||
# in this list — it falls back to offset/limit.
|
||||
_CURSOR_SORT_FIELDS = ("created_at", "updated_at", "name", "size")
|
||||
|
||||
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
"""Opaque keyset-pagination cursor for /api/assets.
|
||||
|
||||
Wire format aligns with the cloud Go implementation in
|
||||
`common/pagination/cursor.go` so the frontend sees one contract across
|
||||
runtimes. Payload JSON uses short keys to keep the encoded length small:
|
||||
Payload JSON uses short keys to keep the encoded length small:
|
||||
|
||||
{"s": <sort_field>, "v": <value>, "id": <id>, "o": <order>}
|
||||
|
||||
@ -10,14 +8,12 @@ The `o` key binds the cursor to the sort direction it was minted under,
|
||||
so replaying a `desc` cursor against an `asc` request fails with
|
||||
``INVALID_CURSOR`` rather than silently walking the wrong direction.
|
||||
`o` is mandatory on every payload — a cursor without it is rejected as
|
||||
malformed. Cloud will land the same field in its mirror PR; until then,
|
||||
Python and cloud cursors differ by exactly the `o` key, and a cloud-
|
||||
minted cursor cannot be decoded by this endpoint.
|
||||
malformed.
|
||||
|
||||
Encoding is base64url with no padding. JSON serialization escapes `<`,
|
||||
`>`, `&`, U+2028, and U+2029 to match Go's default `json.Marshal`
|
||||
behavior so asset names containing those characters produce
|
||||
byte-identical cursors across runtimes.
|
||||
byte-identical cursors across compatible Go implementations.
|
||||
|
||||
Time values are serialized as Unix microseconds (UTC) — microsecond
|
||||
precision matches PostgreSQL's `timestamp` type, so a cursor minted from
|
||||
@ -44,12 +40,9 @@ class InvalidCursorError(ValueError):
|
||||
# decode path from oversized allocations and downstream SQL predicates from
|
||||
# unbounded strings.
|
||||
#
|
||||
# MAX_CURSOR_VALUE_LENGTH is 512 (vs cloud's 256) to fit OSS's
|
||||
# `AssetReference.name` column max (String(512)) — otherwise a long-named
|
||||
# asset would mint a cursor the same server then refuses on the next request.
|
||||
# Cloud's data model has shorter names so its lower cap is fine there;
|
||||
# cross-runtime byte-identity is unaffected because no real cloud cursor ever
|
||||
# carries a value > 256.
|
||||
# MAX_CURSOR_VALUE_LENGTH is 512 to fit the `AssetReference.name` column max
|
||||
# (`String(512)`) — otherwise a long-named asset would mint a cursor the same
|
||||
# server then refuses on the next request.
|
||||
MAX_ENCODED_CURSOR_LENGTH = 1024
|
||||
MAX_CURSOR_VALUE_LENGTH = 512
|
||||
MAX_CURSOR_ID_LENGTH = 128
|
||||
@ -63,8 +56,6 @@ class CursorPayload:
|
||||
order: str
|
||||
|
||||
|
||||
# Order direction tokens. Mirrored on the cloud follow-up so cursors carrying
|
||||
# `o` are interchangeable between runtimes once both sides ship the field.
|
||||
_VALID_ORDERS = ("asc", "desc")
|
||||
|
||||
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
"""Tests for app.assets.services.cursor.
|
||||
|
||||
The wire format must stay byte-identical with the cloud Go implementation
|
||||
(common/pagination/cursor.go in Comfy-Org/cloud) so the frontend sees one
|
||||
contract across runtimes. The byte-identity fixture below mirrors the Go
|
||||
test cases — any drift here means cloud and OSS minted different cursors
|
||||
for the same triple, which would break FE pagination across backends.
|
||||
The byte-identity fixtures below pin the wire format so a parallel Go
|
||||
implementation can mint exchange-compatible cursors for the same triple
|
||||
(asset name, value, id). Drift here would break frontend pagination
|
||||
against any compatible backend.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
@ -187,9 +186,9 @@ class TestEncoderDecoderSymmetry:
|
||||
"""
|
||||
|
||||
def test_long_name_within_cap_round_trips(self):
|
||||
"""OSS assets allow names up to 512 chars (`String(512)`); cursor must
|
||||
handle that. Cloud's lower cap is acceptable on its side because the
|
||||
cloud schema doesn't permit names that long."""
|
||||
"""Assets allow names up to 512 chars (`String(512)`); the cursor
|
||||
encoder must round-trip a value at that cap so a freshly minted
|
||||
cursor never fails decode on the next request."""
|
||||
long_name = "n" * MAX_CURSOR_VALUE_LENGTH
|
||||
encoded = encode_cursor("name", long_name, "asset-x")
|
||||
payload = decode_cursor(encoded, ALLOWED)
|
||||
@ -269,10 +268,10 @@ class TestGoCompatJsonEscaping:
|
||||
class TestByteIdentityFixtures:
|
||||
"""Pin the wire format so it doesn't drift silently.
|
||||
|
||||
NOTE — these fixtures will need updates on the cloud side once cloud
|
||||
mirrors the `o` (order binding) field. Until then, Python cursors and
|
||||
cloud cursors differ by exactly that key. The structural format (`s`,
|
||||
`v`, `id` plus base64url + Go-compat escaping) remains aligned.
|
||||
These fixtures hold the exact base64url-encoded bytes a given payload
|
||||
produces. Any change to the encoding (key order, escaping, ordering of
|
||||
structural fields) will fail these tests loudly rather than diverge
|
||||
silently from external consumers.
|
||||
"""
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
"""Integration tests for cursor-based pagination on GET /api/assets.
|
||||
|
||||
Wire contract is shared with cloud's Go implementation (BE-893). These tests
|
||||
exercise the handler/service/query path end-to-end; cursor-encoding-level
|
||||
tests live in tests-unit/assets_test/services/test_cursor.py.
|
||||
These tests exercise the handler/service/query path end-to-end;
|
||||
cursor-encoding-level tests live in
|
||||
tests-unit/assets_test/services/test_cursor.py.
|
||||
"""
|
||||
import time
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user