68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
# [DEF:backend.src.schemas.settings:Module]
|
|
# @TIER: STANDARD
|
|
# @SEMANTICS: settings, schemas, pydantic, validation
|
|
# @PURPOSE: Pydantic schemas for application settings and automation policies.
|
|
# @LAYER: Domain
|
|
|
|
from pydantic import BaseModel, Field
|
|
from typing import List, Optional
|
|
from datetime import datetime, time
|
|
|
|
# [DEF:NotificationChannel:Class]
|
|
# @PURPOSE: Structured notification channel definition for policy-level custom routing.
|
|
class NotificationChannel(BaseModel):
|
|
type: str = Field(..., description="Notification channel type (e.g., SLACK, SMTP, TELEGRAM)")
|
|
target: str = Field(..., description="Notification destination (e.g., #alerts, chat id, email)")
|
|
# [/DEF:NotificationChannel:Class]
|
|
|
|
# [DEF:ValidationPolicyBase:Class]
|
|
# @PURPOSE: Base schema for validation policy data.
|
|
class ValidationPolicyBase(BaseModel):
|
|
name: str = Field(..., description="Name of the policy")
|
|
environment_id: str = Field(..., description="Target Superset environment ID")
|
|
is_active: bool = Field(True, description="Whether the policy is currently active")
|
|
dashboard_ids: List[str] = Field(..., description="List of dashboard IDs to validate")
|
|
schedule_days: List[int] = Field(..., description="Days of the week (0-6, 0=Sunday) to run")
|
|
window_start: time = Field(..., description="Start of the execution window")
|
|
window_end: time = Field(..., description="End of the execution window")
|
|
notify_owners: bool = Field(True, description="Whether to notify dashboard owners on failure")
|
|
custom_channels: Optional[List[NotificationChannel]] = Field(
|
|
None,
|
|
description="List of additional structured notification channels",
|
|
)
|
|
alert_condition: str = Field("FAIL_ONLY", description="Condition to trigger alerts: FAIL_ONLY, WARN_AND_FAIL, ALWAYS")
|
|
# [/DEF:ValidationPolicyBase:Class]
|
|
|
|
# [DEF:ValidationPolicyCreate:Class]
|
|
# @PURPOSE: Schema for creating a new validation policy.
|
|
class ValidationPolicyCreate(ValidationPolicyBase):
|
|
pass
|
|
# [/DEF:ValidationPolicyCreate:Class]
|
|
|
|
# [DEF:ValidationPolicyUpdate:Class]
|
|
# @PURPOSE: Schema for updating an existing validation policy.
|
|
class ValidationPolicyUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
environment_id: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
dashboard_ids: Optional[List[str]] = None
|
|
schedule_days: Optional[List[int]] = None
|
|
window_start: Optional[time] = None
|
|
window_end: Optional[time] = None
|
|
notify_owners: Optional[bool] = None
|
|
custom_channels: Optional[List[NotificationChannel]] = None
|
|
alert_condition: Optional[str] = None
|
|
# [/DEF:ValidationPolicyUpdate:Class]
|
|
|
|
# [DEF:ValidationPolicyResponse:Class]
|
|
# @PURPOSE: Schema for validation policy response data.
|
|
class ValidationPolicyResponse(ValidationPolicyBase):
|
|
id: str
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
# [/DEF:ValidationPolicyResponse:Class]
|
|
|
|
# [/DEF:backend.src.schemas.settings:Module] |