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
« 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.
5These schemas are used for request validation and response serialization.
6Internal data structures remain as dataclasses in types.py.
7"""
9from my_lib.pydantic import BaseSchema
12# ======================================================================
13# Request Schemas
14# ======================================================================
15class ShutterCtrlRequest(BaseSchema):
16 """Shutter control request query parameters."""
18 cmd: int = 0
19 index: int = -1
20 state: str = "close"
23class ScheduleCtrlRequest(BaseSchema):
24 """Schedule control request query parameters."""
26 cmd: str | None = None
27 data: str | None = None
30class CtrlLogRequest(BaseSchema):
31 """Control log request query parameters."""
33 cmd: str = "get"
36# ======================================================================
37# Response Schemas
38# ======================================================================
39class SensorValueSchema(BaseSchema):
40 """Sensor value response."""
42 valid: bool
43 value: float | None = None
44 time: str | None = None
47class SensorDataSchema(BaseSchema):
48 """Sensor data response."""
50 lux: SensorValueSchema
51 solar_rad: SensorValueSchema
52 altitude: SensorValueSchema
55class ShutterStateEntrySchema(BaseSchema):
56 """Shutter state entry response."""
58 name: str
59 state: int
62class ShutterStateResponseSchema(BaseSchema):
63 """Shutter state response."""
65 state: list[ShutterStateEntrySchema]
66 result: str = "success"
67 cmd: str | None = None
70class ScheduleEntrySchema(BaseSchema):
71 """Schedule entry response."""
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
82class ScheduleDataSchema(BaseSchema):
83 """Schedule data response."""
85 open: ScheduleEntrySchema
86 close: ScheduleEntrySchema
89class CtrlLogResponseSchema(BaseSchema):
90 """Control log response."""
92 result: str
93 log: list[dict] | None = None