Skip to content

Commit b24dc56

Browse files
authored
Split WaterInfoEvent into multiple (#917)
1 parent 17e3186 commit b24dc56

31 files changed

+406
-291
lines changed

deebot_client/capabilities.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,10 @@
4848
TrueDetectEvent,
4949
VoiceAssistantStateEvent,
5050
VolumeEvent,
51-
WaterAmount,
52-
WaterInfoEvent,
5351
WorkMode,
5452
WorkModeEvent,
5553
auto_empty,
54+
water_info,
5655
)
5756

5857
if TYPE_CHECKING:
@@ -229,6 +228,18 @@ class CapabilityStation:
229228
state: CapabilityEvent[StationEvent]
230229

231230

231+
@dataclass(frozen=True, kw_only=True)
232+
class CapabilityWater:
233+
"""Capabilities for water."""
234+
235+
amount: CapabilitySetTypes[
236+
water_info.WaterAmountEvent,
237+
[water_info.WaterAmount | str],
238+
water_info.WaterAmount,
239+
]
240+
mop_attached: CapabilityEvent[water_info.MopAttachedEvent]
241+
242+
232243
@dataclass(frozen=True, kw_only=True)
233244
class Capabilities(ABC):
234245
"""Capabilities."""
@@ -252,9 +263,7 @@ class Capabilities(ABC):
252263
state: CapabilityEvent[StateEvent]
253264
station: CapabilityStation | None = None
254265
stats: CapabilityStats
255-
water: (
256-
CapabilitySetTypes[WaterInfoEvent, [WaterAmount | str], WaterAmount] | None
257-
) = None
266+
water: CapabilityWater | None = None
258267

259268
_events: MappingProxyType[type[Event], list[Command]] = field(init=False)
260269

deebot_client/commands/json/water_info.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@
66
from typing import TYPE_CHECKING, Any
77

88
from deebot_client.command import InitParam
9-
from deebot_client.events import SweepType, WaterAmount, WaterInfoEvent
9+
from deebot_client.events.water_info import (
10+
MopAttachedEvent,
11+
SweepType,
12+
WaterAmount,
13+
WaterAmountEvent,
14+
WaterSweepTypeEvent,
15+
)
1016
from deebot_client.message import HandlingResult
1117
from deebot_client.util import get_enum
1218

@@ -29,20 +35,14 @@ def _handle_body_data_dict(
2935
3036
:return: A message response
3137
"""
32-
mop_attached = data.get("enable")
33-
if mop_attached is not None:
34-
mop_attached = bool(mop_attached)
38+
event_bus.notify(WaterAmountEvent(WaterAmount(int(data["amount"]))))
39+
40+
if (mop_attached := data.get("enable")) is not None:
41+
event_bus.notify(MopAttachedEvent(bool(mop_attached)))
3542

3643
if sweep_type := data.get("sweepType"):
37-
sweep_type = SweepType(int(sweep_type))
38-
39-
event_bus.notify(
40-
WaterInfoEvent(
41-
WaterAmount(int(data["amount"])),
42-
sweep_type,
43-
mop_attached=mop_attached,
44-
)
45-
)
44+
event_bus.notify(WaterSweepTypeEvent(SweepType(int(sweep_type))))
45+
4646
return HandlingResult.success()
4747

4848

deebot_client/events/__init__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from deebot_client.util.enum import StrEnumWithXml
1010

11-
from . import auto_empty, station
11+
from . import auto_empty, station, water_info
1212
from .auto_empty import AutoEmptyEvent
1313
from .base import Event
1414
from .efficiency_mode import EfficiencyMode, EfficiencyModeEvent
@@ -27,7 +27,6 @@
2727
)
2828
from .network import NetworkInfoEvent
2929
from .station import StationEvent
30-
from .water_info import SweepType, WaterAmount, WaterInfoEvent
3130
from .work_mode import WorkMode, WorkModeEvent
3231

3332
if TYPE_CHECKING:
@@ -56,13 +55,11 @@
5655
"PositionsEvent",
5756
"StationEvent",
5857
"SweepModeEvent",
59-
"SweepType",
60-
"WaterAmount",
61-
"WaterInfoEvent",
6258
"WorkMode",
6359
"WorkModeEvent",
6460
"auto_empty",
6561
"station",
62+
"water_info",
6663
]
6764

6865

deebot_client/events/base.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@
22

33
from __future__ import annotations
44

5+
from dataclasses import dataclass
6+
57

68
class Event:
79
"""Event base class."""
10+
11+
12+
@dataclass(frozen=True)
13+
class ValueEvent[T](Event):
14+
"""Value event class."""
15+
16+
value: T

deebot_client/events/water_info.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22

33
from __future__ import annotations
44

5-
from dataclasses import dataclass, field
65
from enum import IntEnum, unique
76

8-
from .base import Event
7+
from .base import ValueEvent
8+
9+
__all__ = [
10+
"MopAttachedEvent",
11+
"SweepType",
12+
"WaterAmount",
13+
"WaterAmountEvent",
14+
"WaterSweepTypeEvent",
15+
]
916

1017

1118
@unique
@@ -26,11 +33,6 @@ class SweepType(IntEnum):
2633
DEEP = 2
2734

2835

29-
@dataclass(frozen=True)
30-
class WaterInfoEvent(Event):
31-
"""Water info event representation."""
32-
33-
amount: WaterAmount
34-
# None means no data available
35-
sweep_type: SweepType | None = None
36-
mop_attached: bool | None = field(kw_only=True, default=None)
36+
WaterAmountEvent = ValueEvent[WaterAmount]
37+
WaterSweepTypeEvent = ValueEvent[SweepType]
38+
MopAttachedEvent = ValueEvent[bool]

deebot_client/hardware/deebot/2o4lnm.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
CapabilitySettings,
1717
CapabilitySetTypes,
1818
CapabilityStats,
19+
CapabilityWater,
1920
DeviceType,
2021
)
2122
from deebot_client.commands.json.advanced_mode import GetAdvancedMode, SetAdvancedMode
@@ -91,8 +92,7 @@
9192
TrueDetectEvent,
9293
VoiceAssistantStateEvent,
9394
VolumeEvent,
94-
WaterAmount,
95-
WaterInfoEvent,
95+
water_info,
9696
)
9797
from deebot_client.models import StaticDeviceInfo
9898
from deebot_client.util import short_name
@@ -200,15 +200,18 @@
200200
report=CapabilityEvent(ReportStatsEvent, []),
201201
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
202202
),
203-
water=CapabilitySetTypes(
204-
event=WaterInfoEvent,
205-
get=[GetWaterInfo()],
206-
set=SetWaterInfo,
207-
types=(
208-
WaterAmount.LOW,
209-
WaterAmount.MEDIUM,
210-
WaterAmount.HIGH,
203+
water=CapabilityWater(
204+
amount=CapabilitySetTypes(
205+
event=water_info.WaterAmountEvent,
206+
get=[GetWaterInfo()],
207+
set=SetWaterInfo,
208+
types=(
209+
water_info.WaterAmount.LOW,
210+
water_info.WaterAmount.MEDIUM,
211+
water_info.WaterAmount.HIGH,
212+
),
211213
),
214+
mop_attached=CapabilityEvent(water_info.MopAttachedEvent, [GetWaterInfo()]),
212215
),
213216
),
214217
)

deebot_client/hardware/deebot/4bdkrs.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
CapabilitySetTypes,
1919
CapabilityStation,
2020
CapabilityStats,
21+
CapabilityWater,
2122
DeviceType,
2223
)
2324
from deebot_client.commands import StationAction
@@ -105,11 +106,10 @@
105106
TrueDetectEvent,
106107
VoiceAssistantStateEvent,
107108
VolumeEvent,
108-
WaterAmount,
109-
WaterInfoEvent,
110109
WorkMode,
111110
WorkModeEvent,
112111
auto_empty,
112+
water_info,
113113
)
114114
from deebot_client.events.auto_empty import AutoEmptyEvent
115115
from deebot_client.events.efficiency_mode import EfficiencyMode
@@ -258,16 +258,19 @@
258258
report=CapabilityEvent(ReportStatsEvent, []),
259259
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
260260
),
261-
water=CapabilitySetTypes(
262-
event=WaterInfoEvent,
263-
get=[GetWaterInfo()],
264-
set=SetWaterInfo,
265-
types=(
266-
WaterAmount.LOW,
267-
WaterAmount.MEDIUM,
268-
WaterAmount.HIGH,
269-
WaterAmount.ULTRAHIGH,
261+
water=CapabilityWater(
262+
amount=CapabilitySetTypes(
263+
event=water_info.WaterAmountEvent,
264+
get=[GetWaterInfo()],
265+
set=SetWaterInfo,
266+
types=(
267+
water_info.WaterAmount.LOW,
268+
water_info.WaterAmount.MEDIUM,
269+
water_info.WaterAmount.HIGH,
270+
water_info.WaterAmount.ULTRAHIGH,
271+
),
270272
),
273+
mop_attached=CapabilityEvent(water_info.MopAttachedEvent, [GetWaterInfo()]),
271274
),
272275
),
273276
)

deebot_client/hardware/deebot/7bryc5.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
CapabilitySettings,
1717
CapabilitySetTypes,
1818
CapabilityStats,
19+
CapabilityWater,
1920
DeviceType,
2021
)
2122
from deebot_client.commands.json.advanced_mode import GetAdvancedMode, SetAdvancedMode
@@ -84,8 +85,7 @@
8485
TotalStatsEvent,
8586
TrueDetectEvent,
8687
VolumeEvent,
87-
WaterAmount,
88-
WaterInfoEvent,
88+
water_info,
8989
)
9090
from deebot_client.models import StaticDeviceInfo
9191
from deebot_client.util import short_name
@@ -183,16 +183,19 @@
183183
report=CapabilityEvent(ReportStatsEvent, []),
184184
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
185185
),
186-
water=CapabilitySetTypes(
187-
event=WaterInfoEvent,
188-
get=[GetWaterInfo()],
189-
set=SetWaterInfo,
190-
types=(
191-
WaterAmount.LOW,
192-
WaterAmount.MEDIUM,
193-
WaterAmount.HIGH,
194-
WaterAmount.ULTRAHIGH,
186+
water=CapabilityWater(
187+
amount=CapabilitySetTypes(
188+
event=water_info.WaterAmountEvent,
189+
get=[GetWaterInfo()],
190+
set=SetWaterInfo,
191+
types=(
192+
water_info.WaterAmount.LOW,
193+
water_info.WaterAmount.MEDIUM,
194+
water_info.WaterAmount.HIGH,
195+
water_info.WaterAmount.ULTRAHIGH,
196+
),
195197
),
198+
mop_attached=CapabilityEvent(water_info.MopAttachedEvent, [GetWaterInfo()]),
196199
),
197200
),
198201
)

deebot_client/hardware/deebot/7j1tu6.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
CapabilitySettings,
1515
CapabilitySetTypes,
1616
CapabilityStats,
17+
CapabilityWater,
1718
DeviceType,
1819
)
1920
from deebot_client.commands.json.battery import GetBattery
@@ -47,8 +48,7 @@
4748
StatsEvent,
4849
TotalStatsEvent,
4950
VolumeEvent,
50-
WaterAmount,
51-
WaterInfoEvent,
51+
water_info,
5252
)
5353
from deebot_client.models import StaticDeviceInfo
5454
from deebot_client.util import short_name
@@ -110,15 +110,18 @@
110110
report=CapabilityEvent(ReportStatsEvent, []),
111111
total=CapabilityEvent(TotalStatsEvent, [GetTotalStats()]),
112112
),
113-
water=CapabilitySetTypes(
114-
event=WaterInfoEvent,
115-
get=[GetWaterInfo()],
116-
set=SetWaterInfo,
117-
types=(
118-
WaterAmount.LOW,
119-
WaterAmount.MEDIUM,
120-
WaterAmount.HIGH,
113+
water=CapabilityWater(
114+
amount=CapabilitySetTypes(
115+
event=water_info.WaterAmountEvent,
116+
get=[GetWaterInfo()],
117+
set=SetWaterInfo,
118+
types=(
119+
water_info.WaterAmount.LOW,
120+
water_info.WaterAmount.MEDIUM,
121+
water_info.WaterAmount.HIGH,
122+
),
121123
),
124+
mop_attached=CapabilityEvent(water_info.MopAttachedEvent, [GetWaterInfo()]),
122125
),
123126
),
124127
)

0 commit comments

Comments
 (0)