python-roborock 2.6.1__tar.gz → 2.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_roborock-2.6.1 → python_roborock-2.7.0}/PKG-INFO +1 -1
- {python_roborock-2.6.1 → python_roborock-2.7.0}/pyproject.toml +1 -1
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/containers.py +63 -8
- {python_roborock-2.6.1 → python_roborock-2.7.0}/LICENSE +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/README.md +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/__init__.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/api.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/cli.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/cloud_api.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/code_mappings.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/command_cache.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/const.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/exceptions.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/local_api.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/protocol.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/py.typed +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/roborock_future.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/roborock_message.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/roborock_typing.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/util.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/__init__.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/roborock_client_v1.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/roborock_local_client_v1.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/roborock_mqtt_client_v1.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_a01_apis/__init__.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_a01_apis/roborock_client_a01.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_a01_apis/roborock_mqtt_client_a01.py +0 -0
- {python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/web_api.py +0 -0
|
@@ -7,9 +7,7 @@ import re
|
|
|
7
7
|
from dataclasses import asdict, dataclass, field
|
|
8
8
|
from datetime import timezone
|
|
9
9
|
from enum import Enum
|
|
10
|
-
from typing import Any, NamedTuple
|
|
11
|
-
|
|
12
|
-
from dacite import Config, from_dict
|
|
10
|
+
from typing import Any, NamedTuple, get_args, get_origin
|
|
13
11
|
|
|
14
12
|
from .code_mappings import (
|
|
15
13
|
RoborockCategory,
|
|
@@ -102,14 +100,70 @@ class RoborockBase:
|
|
|
102
100
|
_ignore_keys = [] # type: ignore
|
|
103
101
|
is_cached = False
|
|
104
102
|
|
|
103
|
+
@staticmethod
|
|
104
|
+
def convert_to_class_obj(type, value):
|
|
105
|
+
try:
|
|
106
|
+
class_type = eval(type)
|
|
107
|
+
if get_origin(class_type) is list:
|
|
108
|
+
return_list = []
|
|
109
|
+
cls_type = get_args(class_type)[0]
|
|
110
|
+
for obj in value:
|
|
111
|
+
if issubclass(cls_type, RoborockBase):
|
|
112
|
+
return_list.append(cls_type.from_dict(obj))
|
|
113
|
+
elif cls_type in {str, int, float}:
|
|
114
|
+
return_list.append(cls_type(obj))
|
|
115
|
+
else:
|
|
116
|
+
return_list.append(cls_type(**obj))
|
|
117
|
+
return return_list
|
|
118
|
+
if issubclass(class_type, RoborockBase):
|
|
119
|
+
converted_value = class_type.from_dict(value)
|
|
120
|
+
else:
|
|
121
|
+
converted_value = class_type(value)
|
|
122
|
+
return converted_value
|
|
123
|
+
except NameError as err:
|
|
124
|
+
_LOGGER.exception(err)
|
|
125
|
+
except ValueError as err:
|
|
126
|
+
_LOGGER.exception(err)
|
|
127
|
+
except Exception as err:
|
|
128
|
+
_LOGGER.exception(err)
|
|
129
|
+
raise Exception("Fail")
|
|
130
|
+
|
|
105
131
|
@classmethod
|
|
106
132
|
def from_dict(cls, data: dict[str, Any]):
|
|
107
133
|
if isinstance(data, dict):
|
|
108
134
|
ignore_keys = cls._ignore_keys
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
135
|
+
data = decamelize_obj(data, ignore_keys)
|
|
136
|
+
cls_annotations: dict[str, str] = {}
|
|
137
|
+
for base in reversed(cls.__mro__):
|
|
138
|
+
cls_annotations.update(getattr(base, "__annotations__", {}))
|
|
139
|
+
remove_keys = []
|
|
140
|
+
for key, value in data.items():
|
|
141
|
+
if value == "None" or value is None:
|
|
142
|
+
data[key] = None
|
|
143
|
+
continue
|
|
144
|
+
if key not in cls_annotations:
|
|
145
|
+
remove_keys.append(key)
|
|
146
|
+
continue
|
|
147
|
+
field_type: str = cls_annotations[key]
|
|
148
|
+
if "|" in field_type:
|
|
149
|
+
# It's a union
|
|
150
|
+
types = field_type.split("|")
|
|
151
|
+
for type in types:
|
|
152
|
+
if "None" in type or "Any" in type:
|
|
153
|
+
continue
|
|
154
|
+
try:
|
|
155
|
+
data[key] = RoborockBase.convert_to_class_obj(type, value)
|
|
156
|
+
break
|
|
157
|
+
except Exception:
|
|
158
|
+
...
|
|
159
|
+
else:
|
|
160
|
+
try:
|
|
161
|
+
data[key] = RoborockBase.convert_to_class_obj(field_type, value)
|
|
162
|
+
except Exception:
|
|
163
|
+
...
|
|
164
|
+
for key in remove_keys:
|
|
165
|
+
del data[key]
|
|
166
|
+
return cls(**data)
|
|
113
167
|
|
|
114
168
|
def as_dict(self) -> dict:
|
|
115
169
|
return asdict(
|
|
@@ -185,6 +239,7 @@ class HomeDataProductSchema(RoborockBase):
|
|
|
185
239
|
mode: Any | None = None
|
|
186
240
|
type: Any | None = None
|
|
187
241
|
product_property: Any | None = None
|
|
242
|
+
property: Any | None = None
|
|
188
243
|
desc: Any | None = None
|
|
189
244
|
|
|
190
245
|
|
|
@@ -195,7 +250,7 @@ class HomeDataProduct(RoborockBase):
|
|
|
195
250
|
model: str
|
|
196
251
|
category: RoborockCategory
|
|
197
252
|
code: str | None = None
|
|
198
|
-
|
|
253
|
+
icon_url: str | None = None
|
|
199
254
|
attribute: Any | None = None
|
|
200
255
|
capability: int | None = None
|
|
201
256
|
schema: list[HomeDataProductSchema] | None = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/roborock_client_v1.py
RENAMED
|
File without changes
|
{python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/roborock_local_client_v1.py
RENAMED
|
File without changes
|
{python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_1_apis/roborock_mqtt_client_v1.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_roborock-2.6.1 → python_roborock-2.7.0}/roborock/version_a01_apis/roborock_client_a01.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|