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

1from typing import List, Optional, Dict, Any 

2from pydantic import BaseModel 

3from datetime import datetime 

4 

5class Point(BaseModel): 

6 x: float 

7 y: float 

8 

9class CalibrationZoneBase(BaseModel): 

10 name: str 

11 type: str 

12 points: List[Point] 

13 metadata_json: Optional[Dict[str, Any]] = {} 

14 

15class CalibrationZoneCreate(CalibrationZoneBase): 

16 school_id: str 

17 

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 

23 

24class CalibrationZone(CalibrationZoneBase): 

25 id: str 

26 school_id: str 

27 created_at: datetime 

28 updated_at: datetime 

29 

30 class Config: 

31 from_attributes = True 

32 

33class CameraBindingBase(BaseModel): 

34 camera_id: str 

35 stream_url: Optional[str] = None 

36 status: str = "active" 

37 

38class CameraBindingCreate(CameraBindingBase): 

39 zone_id: str 

40 

41class CameraBindingUpdate(BaseModel): 

42 camera_id: Optional[str] = None 

43 stream_url: Optional[str] = None 

44 status: Optional[str] = None 

45 

46class CameraBinding(CameraBindingBase): 

47 id: str 

48 zone_id: str 

49 created_at: datetime 

50 

51 class Config: 

52 from_attributes = True 

53 

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 

61 

62class CameraCalibrationSave(BaseModel): 

63 calibration: GeometricCalibration 

64 exercises_supported: List[str]