Coverage for app\schemas\calibration.py: 100%
50 statements
« prev ^ index » next coverage.py v7.3.2, created at 2026-01-15 13:39 +0300
« prev ^ index » next coverage.py v7.3.2, created at 2026-01-15 13:39 +0300
1from typing import List, Optional, Dict, Any
2from pydantic import BaseModel
3from datetime import datetime
5class Point(BaseModel):
6 x: float
7 y: float
9class CalibrationZoneBase(BaseModel):
10 name: str
11 type: str
12 points: List[Point]
13 metadata_json: Optional[Dict[str, Any]] = {}
15class CalibrationZoneCreate(CalibrationZoneBase):
16 school_id: str
18class CalibrationZoneUpdate(BaseModel):
19 name: Optional[str] = None
20 type: Optional[str] = None
21 points: Optional[List[Point]] = None
22 metadata_json: Optional[Dict[str, Any]] = None
24class CalibrationZone(CalibrationZoneBase):
25 id: str
26 school_id: str
27 created_at: datetime
28 updated_at: datetime
30 class Config:
31 from_attributes = True
33class CameraBindingBase(BaseModel):
34 camera_id: str
35 stream_url: Optional[str] = None
36 status: str = "active"
38class CameraBindingCreate(CameraBindingBase):
39 zone_id: str
41class CameraBindingUpdate(BaseModel):
42 camera_id: Optional[str] = None
43 stream_url: Optional[str] = None
44 status: Optional[str] = None
46class CameraBinding(CameraBindingBase):
47 id: str
48 zone_id: str
49 created_at: datetime
51 class Config:
52 from_attributes = True
54# --- Geometric Calibration ---
55class GeometricCalibration(BaseModel):
56 floor_y: float
57 angle: float
58 distance: float
59 scale: float
60 roi: Optional[Dict[str, Any]] = None
62class CameraCalibrationSave(BaseModel):
63 calibration: GeometricCalibration
64 exercises_supported: List[str]