SurfSense/surfsense_backend/app/automations/schemas/api/automation.py
CREDO23 7fb0707933 refactor(backend): rename search_space -> workspace across app bulk (Phase 2 Wave D)
Scoped codemod over surfsense_backend/app (excluding routes/, Wave E): renames
search_space_id -> workspace_id, search_space -> workspace, SearchSpace -> Workspace
across services, utils, tasks, agents, gateway, event_bus, notifications, podcasts,
automations, observability params, and prompt .md files. Also flips the camelCase
payload key searchSpaceId -> workspaceId (no backend reader; hard cutover).

Preserved carve-outs (verbatim): Celery task names "delete_search_space_background"
and "ai_sort_search_space" (wire names), and the OTel/metric key "search_space.id"
(dashboards depend on it). Enum values 'SEARCH_SPACE' and SearchSourceConnector
untouched.
2026-06-26 18:30:47 +02:00

64 lines
1.8 KiB
Python

"""Request/response schemas for the ``Automation`` resource."""
from __future__ import annotations
from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field
from app.automations.persistence.enums.automation_status import AutomationStatus
from app.automations.schemas.definition import AutomationDefinition
from .trigger import TriggerCreate, TriggerDetail
class AutomationCreate(BaseModel):
"""Create an automation, optionally with initial triggers (atomic)."""
model_config = ConfigDict(extra="forbid")
workspace_id: int
name: str = Field(..., min_length=1, max_length=200)
description: str | None = None
definition: AutomationDefinition
triggers: list[TriggerCreate] = Field(default_factory=list)
class AutomationUpdate(BaseModel):
"""Partial update of an automation. Triggers are managed separately."""
model_config = ConfigDict(extra="forbid")
name: str | None = Field(default=None, min_length=1, max_length=200)
description: str | None = None
status: AutomationStatus | None = None
definition: AutomationDefinition | None = None
class AutomationSummary(BaseModel):
"""Lightweight automation view for list endpoints."""
model_config = ConfigDict(from_attributes=True)
id: int
workspace_id: int
name: str
description: str | None = None
status: AutomationStatus
version: int
created_at: datetime
updated_at: datetime
class AutomationDetail(AutomationSummary):
"""Full automation view including definition and attached triggers."""
definition: AutomationDefinition
triggers: list[TriggerDetail] = Field(default_factory=list)
class AutomationList(BaseModel):
"""Paginated list of automations."""
items: list[AutomationSummary]
total: int