Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion roborock/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,19 @@ def from_dict(cls, data: dict[str, any]):
return from_dict(cls, decamelize(data), config=Config(cast=[Enum]))

def as_dict(self):
return self.__dict__
dict = self.__dict__
for key, value in dict.items():
if isinstance(value, RoborockBase):
dict[key] = value.as_dict()
if isinstance(value, list):
new_list = []
for val in value:
if isinstance(val, RoborockBase):
new_list.append(val.as_dict())
else:
new_list.append(val)
dict[key] = new_list
return dict


@dataclass
Expand Down
11 changes: 9 additions & 2 deletions tests/test_containers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from roborock import UserData, HomeData, Consumable, Status, DNDTimer, CleanSummary, CleanRecord, HomeDataProduct
from roborock.code_mappings import RoborockStateCode, RoborockErrorCode, RoborockFanPowerCode, RoborockMopIntensityCode, \
RoborockDockTypeCode, RoborockMopModeCode, RoborockDockErrorCode

from roborock import UserData, HomeData, Consumable, Status, DNDTimer, CleanSummary, CleanRecord
from .mock_data import USER_DATA, HOME_DATA_RAW, CONSUMABLE, STATUS, DND_TIMER, CLEAN_SUMMARY, CLEAN_RECORD


Expand Down Expand Up @@ -82,6 +81,14 @@ def test_home_data():
assert hd.rooms[0].name == "Example room 1"


def test_serialize_and_unserialize():
hd = HomeData.from_dict(HOME_DATA_RAW)
hd_2 = hd.as_dict()
assert isinstance(hd_2["products"][0], dict)
hd_3 = HomeData.from_dict(hd_2)
assert isinstance(hd_3.products[0], HomeDataProduct)


def test_consumable():
c = Consumable.from_dict(CONSUMABLE)
assert c.main_brush_work_time == 74382
Expand Down