Files
OLD-server-architecture/copernicus/schemas.py
Giuseppe Raffa 0ce879aa44 feat: Add new API endpoints and HTML pages for ML model management
- Implemented HTML pages for datasets, models, training, testing, and results.
- Created API endpoints for managing repositories, results, tests, and training sessions.
- Added functionality for streaming training progress via Server-Sent Events (SSE).
- Introduced a Dockerfile for the ML runner with necessary dependencies.
- Developed an SDK for user code execution within the runner container.
- Enhanced CSS styles for improved UI layout and navigation.
- Established a layout template for consistent HTML structure across pages.
- Added JavaScript for dynamic interactions on the models page.
- Implemented WebSocket handling for real-time communication with kiosk devices and controllers.
- Implemented model registration and management API at /api/models
- Added Gitea proxy API for repository interactions at /api/repos
- Created results API for listing and comparing training results at /api/results
- Developed training management API for enqueueing and retrieving training jobs at /api/trainings
- Introduced SSE endpoint for live training progress updates
- Added HTML pages for models, datasets, and training management
- Created a Dockerfile for the ML runner with necessary dependencies
- Developed SDK for user code execution within the runner container
- Enhanced CSS styles for improved UI/UX
- Implemented WebSocket communication for real-time device and controller interactions in the kiosk system
2026-04-28 09:24:38 +02:00

78 lines
2.6 KiB
Python

from pydantic import BaseModel, Field
from typing import Dict, List, Optional, Any
from datetime import datetime
# ── Catalog ──────────────────────────────────────────────────────────────────
class DatasetVariable(BaseModel):
short_name: str
standard_name: Optional[str] = None
units: Optional[str] = None
description: Optional[str] = None # human-readable label derived from standard_name
class CatalogDataset(BaseModel):
dataset_id: str
title: Optional[str] = None
description: Optional[str] = None
variables: List[DatasetVariable] = []
min_longitude: Optional[float] = None
max_longitude: Optional[float] = None
min_latitude: Optional[float] = None
max_latitude: Optional[float] = None
start_datetime: Optional[str] = None
end_datetime: Optional[str] = None
# ── Jobs ─────────────────────────────────────────────────────────────────────
class DownloadJobRequest(BaseModel):
dataset_id: str
variables: List[str] = Field(..., min_length=1)
min_longitude: float
max_longitude: float
min_latitude: float
max_latitude: float
start_date: str # YYYY-MM-DD
end_date: str # YYYY-MM-DD
format: str = Field("json", pattern="^(json|csv)$")
nome: str = Field(..., min_length=1)
tags: List[str] = Field(default_factory=lambda: ["marine"])
notes: str = ""
variable_renames: Dict[str, str] = Field(default_factory=dict) # {original: custom}
class JobStatus(BaseModel):
job_id: str
status: str # pending | downloading | converting | saving | done | error
progress: int = 0 # 0-100
message: str = ""
dataset_id: Optional[str] = None # filled on done
# ── Saved Datasets ────────────────────────────────────────────────────────────
class DatasetMeta(BaseModel):
id: str
nome: str
tags: List[str] = []
created_date: str
created_by: str
used_last_date: Optional[str] = None
type: str # json | csv
size: int
notes: str = ""
version: int = 1
filename: str
copernicus_id: str
variables: List[str] = []
bbox: List[float] = [] # [min_lon, min_lat, max_lon, max_lat]
start_date: str
end_date: str
class DatasetListResponse(BaseModel):
datasets: List[DatasetMeta]
count: int