mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-26 19:19:53 +00:00
Phase 2.1/2.4: Add include_public param to GET /api/assets and GET /api/tags
Phase 2.3: Update PUT /api/assets/{id} with mime_type and preview_id fields, remove separate preview endpoint
Phase 2.2: Add JSON URL upload schema (returns 501 - deferred)
Phase 1.3: Add GET /api/assets/tags/refine endpoint for tag histogram
Phase 1.1/1.2: Add stub endpoints for remote-metadata and download (501)
Phase 4: Add comprehensive tests for all schema changes
Amp-Thread-ID: https://ampcode.com/threads/T-019befd9-1a77-70eb-808d-c83aa0c26515
Co-authored-by: Amp <amp@ampcode.com>
103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field, field_serializer
|
|
|
|
|
|
class AssetSummary(BaseModel):
|
|
id: str
|
|
name: str
|
|
asset_hash: str | None = None
|
|
size: int | None = None
|
|
mime_type: str | None = None
|
|
tags: list[str] = Field(default_factory=list)
|
|
preview_url: str | None = None
|
|
created_at: datetime | None = None
|
|
updated_at: datetime | None = None
|
|
last_access_time: datetime | None = None
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
@field_serializer("created_at", "updated_at", "last_access_time")
|
|
def _ser_dt(self, v: datetime | None, _info):
|
|
return v.isoformat() if v else None
|
|
|
|
|
|
class AssetsList(BaseModel):
|
|
assets: list[AssetSummary]
|
|
total: int
|
|
has_more: bool
|
|
|
|
|
|
class AssetUpdated(BaseModel):
|
|
id: str
|
|
name: str
|
|
asset_hash: str | None = None
|
|
tags: list[str] = Field(default_factory=list)
|
|
user_metadata: dict[str, Any] = Field(default_factory=dict)
|
|
updated_at: datetime | None = None
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
@field_serializer("updated_at")
|
|
def _ser_updated(self, v: datetime | None, _info):
|
|
return v.isoformat() if v else None
|
|
|
|
|
|
class AssetDetail(BaseModel):
|
|
id: str
|
|
name: str
|
|
asset_hash: str | None = None
|
|
size: int | None = None
|
|
mime_type: str | None = None
|
|
tags: list[str] = Field(default_factory=list)
|
|
user_metadata: dict[str, Any] = Field(default_factory=dict)
|
|
preview_id: str | None = None
|
|
created_at: datetime | None = None
|
|
last_access_time: datetime | None = None
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
@field_serializer("created_at", "last_access_time")
|
|
def _ser_dt(self, v: datetime | None, _info):
|
|
return v.isoformat() if v else None
|
|
|
|
|
|
class AssetCreated(AssetDetail):
|
|
created_new: bool
|
|
|
|
|
|
class TagUsage(BaseModel):
|
|
name: str
|
|
count: int
|
|
type: str
|
|
|
|
|
|
class TagsList(BaseModel):
|
|
tags: list[TagUsage] = Field(default_factory=list)
|
|
total: int
|
|
has_more: bool
|
|
|
|
|
|
class TagsAdd(BaseModel):
|
|
model_config = ConfigDict(str_strip_whitespace=True)
|
|
added: list[str] = Field(default_factory=list)
|
|
already_present: list[str] = Field(default_factory=list)
|
|
total_tags: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class TagsRemove(BaseModel):
|
|
model_config = ConfigDict(str_strip_whitespace=True)
|
|
removed: list[str] = Field(default_factory=list)
|
|
not_present: list[str] = Field(default_factory=list)
|
|
total_tags: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class TagHistogramEntry(BaseModel):
|
|
name: str
|
|
count: int
|
|
|
|
|
|
class TagHistogramResponse(BaseModel):
|
|
tags: list[TagHistogramEntry] = Field(default_factory=list)
|