90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
"""Schemas for skills marketplace listing and install/uninstall actions."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
from uuid import UUID
|
|
|
|
from pydantic import AnyHttpUrl
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
from app.schemas.common import NonEmptyStr
|
|
|
|
RUNTIME_ANNOTATION_TYPES = (datetime, UUID, NonEmptyStr)
|
|
|
|
|
|
class MarketplaceSkillCreate(SQLModel):
|
|
"""Payload used to register a skill URL in the organization marketplace."""
|
|
|
|
source_url: AnyHttpUrl
|
|
name: NonEmptyStr | None = None
|
|
description: str | None = None
|
|
|
|
|
|
class SkillPackCreate(SQLModel):
|
|
"""Payload used to register a pack URL in the organization."""
|
|
|
|
source_url: AnyHttpUrl
|
|
name: NonEmptyStr | None = None
|
|
description: str | None = None
|
|
branch: str = "main"
|
|
metadata: dict[str, object] = Field(default_factory=dict)
|
|
|
|
|
|
class MarketplaceSkillRead(SQLModel):
|
|
"""Serialized marketplace skill catalog record."""
|
|
|
|
id: UUID
|
|
organization_id: UUID
|
|
name: str
|
|
description: str | None = None
|
|
category: str | None = None
|
|
risk: str | None = None
|
|
source: str | None = None
|
|
source_url: str
|
|
metadata: dict[str, object]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class SkillPackRead(SQLModel):
|
|
"""Serialized skill pack record."""
|
|
|
|
id: UUID
|
|
organization_id: UUID
|
|
name: str
|
|
description: str | None = None
|
|
source_url: str
|
|
branch: str
|
|
metadata: dict[str, object]
|
|
skill_count: int = 0
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class MarketplaceSkillCardRead(MarketplaceSkillRead):
|
|
"""Marketplace card payload with gateway-specific install state."""
|
|
|
|
installed: bool
|
|
installed_at: datetime | None = None
|
|
|
|
|
|
class MarketplaceSkillActionResponse(SQLModel):
|
|
"""Install/uninstall action response payload."""
|
|
|
|
ok: bool = True
|
|
skill_id: UUID
|
|
gateway_id: UUID
|
|
installed: bool
|
|
|
|
|
|
class SkillPackSyncResponse(SQLModel):
|
|
"""Pack sync summary payload."""
|
|
|
|
ok: bool = True
|
|
pack_id: UUID
|
|
synced: int
|
|
created: int
|
|
updated: int
|
|
warnings: list[str] = Field(default_factory=list)
|