- Remove XML builder, format query param, and XML tests - Simplify ExportFlowModal (no format picker) - Simplify rfflowParser (JSON-only) - Remove format field from schemas and types Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
"""Schemas for .rfflow file export and import."""
|
|
from datetime import datetime
|
|
from typing import Optional, Any
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.schemas.tree import TreeType
|
|
|
|
|
|
class FlowExportCategory(BaseModel):
|
|
"""Category info embedded in export file."""
|
|
name: str
|
|
slug: str
|
|
|
|
|
|
class FlowExportData(BaseModel):
|
|
"""The flow payload inside an .rfflow file."""
|
|
name: str
|
|
description: Optional[str] = None
|
|
tree_type: TreeType
|
|
version: int = 1
|
|
author_name: Optional[str] = None
|
|
category: Optional[FlowExportCategory] = None
|
|
tags: list[str] = []
|
|
tree_structure: dict[str, Any]
|
|
intake_form: Optional[list[dict[str, Any]]] = None
|
|
|
|
|
|
class FlowExportEnvelope(BaseModel):
|
|
"""Top-level .rfflow file structure."""
|
|
rfflow_version: str = "1.0"
|
|
exported_at: datetime
|
|
source_app: str = "ResolutionFlow"
|
|
flow: FlowExportData
|
|
|
|
|
|
class FlowImportRequest(BaseModel):
|
|
"""What the frontend sends after parsing a .rfflow file."""
|
|
rfflow_version: str = Field(..., description="Must be '1.0'")
|
|
exported_at: datetime
|
|
source_app: str = "ResolutionFlow"
|
|
flow: FlowExportData
|
|
|
|
|
|
class FlowImportResponse(BaseModel):
|
|
"""Response after importing a flow."""
|
|
tree_id: str
|
|
name: str
|
|
tree_type: str
|
|
status: str = "draft"
|
|
category_created: bool = False
|
|
tags_created: list[str] = []
|
|
validation_warnings: list[str] = []
|