Skip to content

Commit 88bdb42

Browse files
committed
🦎 q7: move map list containers into data layer
1 parent 71b785f commit 88bdb42

File tree

4 files changed

+32
-31
lines changed

4 files changed

+32
-31
lines changed

roborock/data/b01_q7/b01_q7_containers.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,33 @@ class Recommend(RoborockBase):
7575
room_id: list[int] = field(default_factory=list)
7676

7777

78+
@dataclass
79+
class Q7MapListEntry(RoborockBase):
80+
"""Single map list entry returned by `service.get_map_list`."""
81+
82+
id: int | None = None
83+
cur: bool | None = None
84+
85+
86+
@dataclass
87+
class Q7MapList(RoborockBase):
88+
"""Map list response returned by `service.get_map_list`."""
89+
90+
map_list: list[Q7MapListEntry] = field(default_factory=list)
91+
92+
@property
93+
def current_map_id(self) -> int | None:
94+
"""Current map id, preferring the entry marked current."""
95+
if not self.map_list:
96+
return None
97+
98+
ordered = sorted(self.map_list, key=lambda entry: entry.cur or False, reverse=True)
99+
first = next(iter(ordered), None)
100+
if first is None or not isinstance(first.id, int):
101+
return None
102+
return first.id
103+
104+
78105
@dataclass
79106
class B01Props(RoborockBase):
80107
"""

roborock/devices/traits/b01/q7/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Any
55

66
from roborock import B01Props
7+
from roborock.data import Q7MapList, Q7MapListEntry
78
from roborock.data.b01_q7.b01_q7_code_mappings import (
89
CleanPathPreferenceMapping,
910
CleanRepeatMapping,
@@ -21,7 +22,7 @@
2122
from roborock.roborock_typing import RoborockB01Q7Methods
2223

2324
from .clean_summary import CleanSummaryTrait
24-
from .map import MapTrait, Q7MapList, Q7MapListEntry
25+
from .map import MapTrait
2526

2627
__all__ = [
2728
"Q7PropertiesApi",

roborock/devices/traits/b01/q7/map.py

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
"""Map trait for B01 Q7 devices."""
22

33
import asyncio
4-
from dataclasses import dataclass, field
54

6-
from roborock.data import RoborockBase
5+
from roborock.data import Q7MapList
76
from roborock.devices.rpc.b01_q7_channel import send_decoded_command, send_map_command
87
from roborock.devices.traits import Trait
98
from roborock.devices.transport.mqtt_channel import MqttChannel
@@ -12,33 +11,6 @@
1211
from roborock.roborock_typing import RoborockB01Q7Methods
1312

1413

15-
@dataclass
16-
class Q7MapListEntry(RoborockBase):
17-
"""Single map list entry returned by `service.get_map_list`."""
18-
19-
id: int | None = None
20-
cur: bool | None = None
21-
22-
23-
@dataclass
24-
class Q7MapList(RoborockBase):
25-
"""Map list response returned by `service.get_map_list`."""
26-
27-
map_list: list[Q7MapListEntry] = field(default_factory=list)
28-
29-
@property
30-
def current_map_id(self) -> int | None:
31-
"""Current map id, preferring the entry marked current."""
32-
if not self.map_list:
33-
return None
34-
35-
ordered = sorted(self.map_list, key=lambda entry: entry.cur or False, reverse=True)
36-
first = next(iter(ordered), None)
37-
if first is None or not isinstance(first.id, int):
38-
return None
39-
return first.id
40-
41-
4214
class MapTrait(Q7MapList, Trait):
4315
"""Map retrieval + map metadata helpers for Q7 devices."""
4416

tests/devices/traits/b01/q7/test_map.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
from Crypto.Cipher import AES
55
from Crypto.Util.Padding import unpad
66

7-
from roborock.devices.traits.b01.q7 import Q7MapList, Q7MapListEntry, Q7PropertiesApi
7+
from roborock.data import Q7MapList, Q7MapListEntry
8+
from roborock.devices.traits.b01.q7 import Q7PropertiesApi
89
from roborock.exceptions import RoborockException
910
from roborock.roborock_message import RoborockMessage, RoborockMessageProtocol
1011
from tests.fixtures.channel_fixtures import FakeChannel

0 commit comments

Comments
 (0)