Coverage for src / rasp_shutter / schemas.py: 100%

39 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-02-13 00:10 +0900

1#!/usr/bin/env python3 

2""" 

3Pydantic schemas for Web API. 

4 

5These schemas are used for request validation and response serialization. 

6Internal data structures remain as dataclasses in types.py. 

7""" 

8 

9from my_lib.pydantic import BaseSchema 

10 

11 

12# ====================================================================== 

13# Request Schemas 

14# ====================================================================== 

15class ShutterCtrlRequest(BaseSchema): 

16 """Shutter control request query parameters.""" 

17 

18 cmd: int = 0 

19 index: int = -1 

20 state: str = "close" 

21 

22 

23class ScheduleCtrlRequest(BaseSchema): 

24 """Schedule control request query parameters.""" 

25 

26 cmd: str | None = None 

27 data: str | None = None 

28 

29 

30class CtrlLogRequest(BaseSchema): 

31 """Control log request query parameters.""" 

32 

33 cmd: str = "get" 

34 

35 

36# ====================================================================== 

37# Response Schemas 

38# ====================================================================== 

39class SensorValueSchema(BaseSchema): 

40 """Sensor value response.""" 

41 

42 valid: bool 

43 value: float | None = None 

44 time: str | None = None 

45 

46 

47class SensorDataSchema(BaseSchema): 

48 """Sensor data response.""" 

49 

50 lux: SensorValueSchema 

51 solar_rad: SensorValueSchema 

52 altitude: SensorValueSchema 

53 

54 

55class ShutterStateEntrySchema(BaseSchema): 

56 """Shutter state entry response.""" 

57 

58 name: str 

59 state: int 

60 

61 

62class ShutterStateResponseSchema(BaseSchema): 

63 """Shutter state response.""" 

64 

65 state: list[ShutterStateEntrySchema] 

66 result: str = "success" 

67 cmd: str | None = None 

68 

69 

70class ScheduleEntrySchema(BaseSchema): 

71 """Schedule entry response.""" 

72 

73 is_active: bool 

74 time: str 

75 wday: list[bool] 

76 solar_rad: int 

77 lux: int 

78 altitude: int 

79 endpoint: str | None = None 

80 

81 

82class ScheduleDataSchema(BaseSchema): 

83 """Schedule data response.""" 

84 

85 open: ScheduleEntrySchema 

86 close: ScheduleEntrySchema 

87 

88 

89class CtrlLogResponseSchema(BaseSchema): 

90 """Control log response.""" 

91 

92 result: str 

93 log: list[dict] | None = None