from uuid import UUID from pydantic import BaseModel, field_validator class TagResponse(BaseModel): id: UUID name: str | None class UsersLikesResponse(BaseModel): likes_count: int | None liked_by_user: bool | None class CreateComponentResponse(BaseModel): id: UUID class TagsIdResponse(BaseModel): tags_id: TagResponse | None class ListComponentResponse(BaseModel): id: UUID | None = None name: str | None = None description: str | None = None liked_by_count: int | None = None liked_by_user: bool | None = None is_component: bool | None = None metadata: dict | None = {} user_created: dict | None = {} tags: list[TagResponse] | None = None downloads_count: int | None = None last_tested_version: str | None = None private: bool | None = None # tags comes as a TagsIdResponse but we want to return a list of TagResponse @field_validator("tags", mode="before") @classmethod def tags_to_list(cls, v): # Check if all values are have id and name # if so, return v else transform to TagResponse if not v: return v if all("id" in tag and "name" in tag for tag in v): return v return [TagResponse(**tag.get("tags_id")) for tag in v if tag.get("tags_id")] class ListComponentResponseModel(BaseModel): count: int | None = 0 authorized: bool results: list[ListComponentResponse] | None class DownloadComponentResponse(BaseModel): id: UUID name: str | None description: str | None data: dict | None is_component: bool | None metadata: dict | None = {} class StoreComponentCreate(BaseModel): name: str description: str | None data: dict tags: list[str] | None parent: UUID | None = None is_component: bool | None last_tested_version: str | None = None private: bool | None = True