mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-02-06 19:42:34 +08:00
- Add typed result dataclasses: IngestResult, AddTagsResult, RemoveTagsResult, SetTagsResult, TagUsage - Add UserMetadata type alias for user_metadata parameters - Type helper functions with Session parameters - Use TypedDicts at query layer to avoid circular imports - Update manager.py and tests to use attribute access Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
99 lines
1.9 KiB
Python
99 lines
1.9 KiB
Python
from dataclasses import dataclass
|
|
from datetime import datetime
|
|
from typing import Any, NamedTuple
|
|
|
|
from app.assets.database.models import Asset, AssetInfo
|
|
|
|
UserMetadata = dict[str, Any] | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AssetData:
|
|
hash: str
|
|
size_bytes: int | None
|
|
mime_type: str | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AssetInfoData:
|
|
id: str
|
|
name: str
|
|
user_metadata: UserMetadata
|
|
preview_id: str | None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
last_access_time: datetime | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AssetDetailResult:
|
|
info: AssetInfoData
|
|
asset: AssetData | None
|
|
tags: list[str]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RegisterAssetResult:
|
|
info: AssetInfoData
|
|
asset: AssetData
|
|
tags: list[str]
|
|
created: bool
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class IngestResult:
|
|
asset_created: bool
|
|
asset_updated: bool
|
|
state_created: bool
|
|
state_updated: bool
|
|
asset_info_id: str | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class AddTagsResult:
|
|
added: list[str]
|
|
already_present: list[str]
|
|
total_tags: list[str]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class RemoveTagsResult:
|
|
removed: list[str]
|
|
not_present: list[str]
|
|
total_tags: list[str]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class SetTagsResult:
|
|
added: list[str]
|
|
removed: list[str]
|
|
total: list[str]
|
|
|
|
|
|
class TagUsage(NamedTuple):
|
|
name: str
|
|
tag_type: str
|
|
count: int
|
|
|
|
|
|
def extract_info_data(info: AssetInfo) -> AssetInfoData:
|
|
return AssetInfoData(
|
|
id=info.id,
|
|
name=info.name,
|
|
user_metadata=info.user_metadata,
|
|
preview_id=info.preview_id,
|
|
created_at=info.created_at,
|
|
updated_at=info.updated_at,
|
|
last_access_time=info.last_access_time,
|
|
)
|
|
|
|
|
|
def extract_asset_data(asset: Asset | None) -> AssetData | None:
|
|
if asset is None:
|
|
return None
|
|
return AssetData(
|
|
hash=asset.hash,
|
|
size_bytes=asset.size_bytes,
|
|
mime_type=asset.mime_type,
|
|
)
|