Skip to content

Commit 91910b9

Browse files
committed
refactor: deduplicate DHW and heating weekly schedules
1 parent 8b486b4 commit 91910b9

1 file changed

Lines changed: 24 additions & 43 deletions

File tree

src/bsblan/models.py

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -141,23 +141,10 @@ def from_bsblan_format(cls, value: str) -> DaySchedule:
141141

142142

143143
@dataclass
144-
class DHWSchedule:
145-
"""Weekly hot water schedule for setting time programs.
146-
147-
Use this dataclass to set DHW time programs via set_hot_water_schedule().
148-
Each day can have up to 3 time slots.
144+
class WeeklySchedule:
145+
"""Base weekly schedule with optional day schedules.
149146
150-
Example:
151-
>>> schedule = DHWSchedule(
152-
... monday=DaySchedule(slots=[
153-
... TimeSlot(time(6, 0), time(8, 0)),
154-
... TimeSlot(time(17, 0), time(21, 0)),
155-
... ]),
156-
... tuesday=DaySchedule(slots=[
157-
... TimeSlot(time(6, 0), time(8, 0)),
158-
... ])
159-
... )
160-
>>> await client.set_hot_water_schedule(schedule)
147+
Each day can have up to 3 time slots (validated by DaySchedule).
161148
162149
"""
163150

@@ -191,41 +178,35 @@ def has_any_schedule(self) -> bool:
191178

192179

193180
@dataclass
194-
class HeatingSchedule:
195-
"""Weekly heating schedule for setting time programs.
181+
class DHWSchedule(WeeklySchedule):
182+
"""Weekly hot water schedule for setting time programs.
196183
197-
Use this dataclass to set heating time programs via set_heating_schedule().
184+
Use this dataclass to set DHW time programs via set_hot_water_schedule().
198185
Each day can have up to 3 time slots.
199186
187+
Example:
188+
>>> schedule = DHWSchedule(
189+
... monday=DaySchedule(slots=[
190+
... TimeSlot(time(6, 0), time(8, 0)),
191+
... TimeSlot(time(17, 0), time(21, 0)),
192+
... ]),
193+
... tuesday=DaySchedule(slots=[
194+
... TimeSlot(time(6, 0), time(8, 0)),
195+
... ])
196+
... )
197+
>>> await client.set_hot_water_schedule(schedule)
198+
200199
"""
201200

202-
monday: DaySchedule | None = None
203-
tuesday: DaySchedule | None = None
204-
wednesday: DaySchedule | None = None
205-
thursday: DaySchedule | None = None
206-
friday: DaySchedule | None = None
207-
saturday: DaySchedule | None = None
208-
sunday: DaySchedule | None = None
209201

210-
def has_any_schedule(self) -> bool:
211-
"""Check if any day has a schedule set.
202+
@dataclass
203+
class HeatingSchedule(WeeklySchedule):
204+
"""Weekly heating schedule for setting time programs.
212205
213-
Returns:
214-
bool: True if at least one day has a schedule.
206+
Use this dataclass to set heating time programs via set_heating_schedule().
207+
Each day can have up to 3 time slots.
215208
216-
"""
217-
return any(
218-
day is not None
219-
for day in [
220-
self.monday,
221-
self.tuesday,
222-
self.wednesday,
223-
self.thursday,
224-
self.friday,
225-
self.saturday,
226-
self.sunday,
227-
]
228-
)
209+
"""
229210

230211

231212
@dataclass

0 commit comments

Comments
 (0)