python-roborock 7.11.0__py3-none-any.whl → 7.11.1__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: python-roborock
3
- Version: 7.11.0
3
+ Version: 7.11.1
4
4
  Summary: A package to control Roborock vacuums.
5
5
  Project-URL: Repository, https://github.com/python-roborock/python-roborock
6
6
  Project-URL: Documentation, https://python-roborock.readthedocs.io/
@@ -82,9 +82,9 @@ roborock/devices/traits/v1/device_features.py,sha256=vSacV1NMoOwrP0vpysVc7vI0EPN
82
82
  roborock/devices/traits/v1/do_not_disturb.py,sha256=_pJ-DS9r9h9eoTx1MW2MZ0RcrEh9J9gbSUPMQKoMSnE,1661
83
83
  roborock/devices/traits/v1/dust_collection_mode.py,sha256=2Sdi_-U0wzhtN-aOertDF6aGq9z9SeVVIL0dhEJcIiQ,656
84
84
  roborock/devices/traits/v1/flow_led_status.py,sha256=alwHAvD6D9Dunn4siMb6euH1Wxor_BlbRMXyT4FbNwQ,1160
85
- roborock/devices/traits/v1/home.py,sha256=UCLGCkhIowmVSjNv_aC76MortpKn8v0E1jlQA1kuRH4,14194
85
+ roborock/devices/traits/v1/home.py,sha256=r50O6dHgzvw44-RXWu9D2_DkT5V3OV6rpFA5y1cVZGY,14206
86
86
  roborock/devices/traits/v1/led_status.py,sha256=qUY6GgC-RSXCAKlL2D0_FBO-1xwi2eU3fkMFg-pLQCs,1754
87
- roborock/devices/traits/v1/map_content.py,sha256=w_34H6ItiYm98QFOmEDCP0AvTBWAFVuB-uz5rmgBRwI,3175
87
+ roborock/devices/traits/v1/map_content.py,sha256=yQyy20EwQBkbMhb7epH-wGRel-2Kfq5f4aPt4v19Kqs,4540
88
88
  roborock/devices/traits/v1/maps.py,sha256=JdOjJCeJ6iAH85pNHKHbVGlD-zOrha9h6XAh7IDeQr8,3468
89
89
  roborock/devices/traits/v1/mop_dryer.py,sha256=O_kesBuk_oxtcTE3jFD3Qm2lH939kQatib2aEjvPwCY,1979
90
90
  roborock/devices/traits/v1/network_info.py,sha256=CX9-ye2Zb_8lAWPGvegXWSOguxMY2K0xO-2OmWmE67o,2291
@@ -127,8 +127,8 @@ roborock/testing/channel.py,sha256=vjulT5MHBe8lAq6XITUqcxJVcCILWx7ZEcw5imTx0Tk,7
127
127
  roborock/testing/cloud.py,sha256=L2L0KlZDYaMuoV19KUQUoq5EAUDeNQ1lJ8Ew5YaOgjo,11946
128
128
  roborock/testing/simulator.py,sha256=g8ZUWVSjgAzuRRxWOCeOq-7deodyEItwUpqEw9RzCmQ,4347
129
129
  roborock/testing/v1_simulator.py,sha256=_LX_vsBMcB2Uu2QDt8QnQymgtVtbnwD5Xa7tmhiPAnY,14439
130
- python_roborock-7.11.0.dist-info/METADATA,sha256=JhgyZnvDj6mJq6Xu_9QGJYPsEjD5mt5MJT10PtNgTWQ,5279
131
- python_roborock-7.11.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
132
- python_roborock-7.11.0.dist-info/entry_points.txt,sha256=EvC1nMqi9ZXKgZnqlNXA33v_3nzgPNjnM0mzWlrehnY,47
133
- python_roborock-7.11.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
134
- python_roborock-7.11.0.dist-info/RECORD,,
130
+ python_roborock-7.11.1.dist-info/METADATA,sha256=l1QU8R1Law1v6OrWjFE6N7ogYqtCLDmDNOlpUj5T7XU,5279
131
+ python_roborock-7.11.1.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
132
+ python_roborock-7.11.1.dist-info/entry_points.txt,sha256=EvC1nMqi9ZXKgZnqlNXA33v_3nzgPNjnM0mzWlrehnY,47
133
+ python_roborock-7.11.1.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
134
+ python_roborock-7.11.1.dist-info/RECORD,,
@@ -96,7 +96,7 @@ class HomeTrait(RoborockBase, common.V1TraitMixin, TraitUpdateListener):
96
96
  self._discovery_completed = True
97
97
  try:
98
98
  self._home_map_content = {
99
- k: self._map_content.converter.parse_map_content(base64.b64decode(v))
99
+ k: await self._map_content.converter.async_parse_map_content(base64.b64decode(v))
100
100
  for k, v in (device_cache_data.home_map_content_base64 or {}).items()
101
101
  }
102
102
  except (ValueError, RoborockException) as ex:
@@ -1,5 +1,6 @@
1
1
  """Trait for fetching the map content from Roborock devices."""
2
2
 
3
+ import asyncio
3
4
  import logging
4
5
  from dataclasses import dataclass
5
6
 
@@ -7,6 +8,7 @@ from vacuum_map_parser_base.map_data import MapData
7
8
 
8
9
  from roborock.data import RoborockBase
9
10
  from roborock.devices.traits.v1 import common
11
+ from roborock.exceptions import RoborockParsingException
10
12
  from roborock.map.map_parser import MapParser, MapParserConfig
11
13
  from roborock.roborock_typing import RoborockCommand
12
14
 
@@ -78,6 +80,20 @@ class MapContentConverter(common.V1TraitDataConverter):
78
80
  raw_api_response=response,
79
81
  )
80
82
 
83
+ async def async_parse_map_content(self, response: bytes) -> MapContent:
84
+ """Parse the map content from raw bytes asynchronously.
85
+
86
+ Args:
87
+ response: The raw bytes of the map data from the API.
88
+
89
+ Returns:
90
+ MapContent: The parsed map content.
91
+
92
+ Raises:
93
+ RoborockException: If the map data cannot be parsed.
94
+ """
95
+ return await asyncio.to_thread(self.parse_map_content, response)
96
+
81
97
 
82
98
  @common.map_rpc_channel
83
99
  class MapContentTrait(MapContent, common.V1TraitMixin):
@@ -90,3 +106,21 @@ class MapContentTrait(MapContent, common.V1TraitMixin):
90
106
  """Initialize MapContentTrait."""
91
107
  super().__init__()
92
108
  self.converter = MapContentConverter(MapParser(map_parser_config or MapParserConfig()))
109
+
110
+ async def refresh(self) -> None:
111
+ """Refresh the contents of this trait without blocking the event loop."""
112
+ response = await self.rpc_channel.send_command(self.command)
113
+ if self.raw_api_response is not None and self.raw_api_response == response:
114
+ return
115
+ if not isinstance(response, bytes):
116
+ raise ValueError(f"Unexpected MapContentTrait response format: {type(response)}")
117
+ try:
118
+ new_data = await self.converter.async_parse_map_content(response)
119
+ except (TypeError, ValueError) as err:
120
+ raise RoborockParsingException(
121
+ trait_name=type(self).__name__,
122
+ command=self.command,
123
+ payload=response,
124
+ inner_error=err,
125
+ ) from err
126
+ common.merge_trait_values(self, new_data)