35 lines
1.5 KiB
Python
35 lines
1.5 KiB
Python
from pydantic import BaseModel, ConfigDict
|
||
from datetime import datetime
|
||
from typing import Optional, Dict, Any
|
||
|
||
# --- Базовая схема ---
|
||
# Общие поля для расчета
|
||
class CalculationBase(BaseModel):
|
||
input_params: Dict[str, Any]
|
||
model_name: Optional[str] = None # Модель может быть выбрана сервером
|
||
|
||
# --- Схема для создания (запуска) расчета ---
|
||
# Данные, которые пользователь отправляет для запуска
|
||
class CalculationCreate(CalculationBase):
|
||
pass # Пока совпадает с Base, но может быть расширена
|
||
|
||
# --- Схема для чтения ---
|
||
# Полная информация о расчете, возвращаемая API
|
||
class CalculationRead(CalculationBase):
|
||
id: int
|
||
output_results: Optional[Dict[str, Any]] = None
|
||
timestamp: datetime
|
||
objective_score: Optional[float] = None
|
||
|
||
# Включаем режим ORM
|
||
model_config = ConfigDict(from_attributes=True)
|
||
# В Pydantic v1 было:
|
||
# class Config:
|
||
# orm_mode = True
|
||
|
||
|
||
# --- Опционально: Схема для обновления (если результаты добавляются позже) ---
|
||
class CalculationUpdate(BaseModel):
|
||
output_results: Optional[Dict[str, Any]] = None
|
||
objective_score: Optional[float] = None
|
||
model_name: Optional[str] = None # Если модель определяется по результату |