pymammotion 0.0.50__tar.gz → 0.0.52__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.

Potentially problematic release.


This version of pymammotion might be problematic. Click here for more details.

Files changed (108) hide show
  1. {pymammotion-0.0.50 → pymammotion-0.0.52}/PKG-INFO +1 -1
  2. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/device.py +94 -29
  3. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/devices/mammotion.py +2 -1
  4. {pymammotion-0.0.50 → pymammotion-0.0.52}/pyproject.toml +2 -2
  5. {pymammotion-0.0.50 → pymammotion-0.0.52}/LICENSE +0 -0
  6. {pymammotion-0.0.50 → pymammotion-0.0.52}/README.md +0 -0
  7. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/__init__.py +0 -0
  8. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/__init__.py +0 -0
  9. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/cloud_gateway.py +0 -0
  10. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/cloud_service.py +0 -0
  11. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/dataclass/aep_response.py +0 -0
  12. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/dataclass/connect_response.py +0 -0
  13. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/dataclass/dev_by_account_response.py +0 -0
  14. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/dataclass/login_by_oauth_response.py +0 -0
  15. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/dataclass/regions_response.py +0 -0
  16. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/dataclass/session_by_authcode_response.py +0 -0
  17. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/aliyun/tmp_constant.py +0 -0
  18. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/__init__.py +0 -0
  19. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/ble.py +0 -0
  20. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/ble_message.py +0 -0
  21. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/const.py +0 -0
  22. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/data/__init__.py +0 -0
  23. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/data/convert.py +0 -0
  24. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  25. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/bluetooth/data/notifydata.py +0 -0
  26. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/const.py +0 -0
  27. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/__init__.py +0 -0
  28. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/__init__.py +0 -0
  29. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/enums.py +0 -0
  30. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/excute_boarder_params.py +0 -0
  31. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/execute_boarder.py +0 -0
  32. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/generate_route_information.py +0 -0
  33. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/hash_list.py +0 -0
  34. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/location.py +0 -0
  35. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/mowing_modes.py +0 -0
  36. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/plan.py +0 -0
  37. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/rapid_state.py +0 -0
  38. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/model/region_data.py +0 -0
  39. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/mqtt/__init__.py +0 -0
  40. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/mqtt/event.py +0 -0
  41. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/mqtt/properties.py +0 -0
  42. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/mqtt/status.py +0 -0
  43. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/data/state_manager.py +0 -0
  44. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/event/__init__.py +0 -0
  45. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/event/event.py +0 -0
  46. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/http/_init_.py +0 -0
  47. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/http/http.py +0 -0
  48. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/__init__.py +0 -0
  49. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/__init__.py +0 -0
  50. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  51. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  52. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  53. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  54. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/media.py +0 -0
  55. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  56. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/network.py +0 -0
  57. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  58. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/system.py +0 -0
  59. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/commands/messages/video.py +0 -0
  60. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/control/__init__.py +0 -0
  61. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/control/joystick.py +0 -0
  62. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mammotion/devices/__init__.py +0 -0
  63. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mqtt/__init__.py +0 -0
  64. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
  65. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/__init__.py +0 -0
  66. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/common.proto +0 -0
  67. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/common.py +0 -0
  68. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/common_pb2.py +0 -0
  69. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/common_pb2.pyi +0 -0
  70. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/dev_net.proto +0 -0
  71. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/dev_net.py +0 -0
  72. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/dev_net_pb2.py +0 -0
  73. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  74. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_msg.proto +0 -0
  75. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_msg.py +0 -0
  76. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_msg_pb2.py +0 -0
  77. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  78. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_mul.proto +0 -0
  79. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_mul.py +0 -0
  80. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_mul_pb2.py +0 -0
  81. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  82. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_driver.proto +0 -0
  83. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_driver.py +0 -0
  84. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  85. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  86. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_nav.proto +0 -0
  87. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_nav.py +0 -0
  88. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  89. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  90. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_ota.proto +0 -0
  91. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_ota.py +0 -0
  92. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  93. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  94. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_pept.proto +0 -0
  95. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_pept.py +0 -0
  96. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  97. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  98. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_sys.proto +0 -0
  99. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_sys.py +0 -0
  100. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  101. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  102. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/py.typed +0 -0
  103. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/utility/constant/__init__.py +0 -0
  104. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/utility/constant/device_constant.py +0 -0
  105. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/utility/datatype_converter.py +0 -0
  106. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/utility/device_type.py +0 -0
  107. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/utility/periodic.py +0 -0
  108. {pymammotion-0.0.50 → pymammotion-0.0.52}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pymammotion
3
- Version: 0.0.50
3
+ Version: 0.0.52
4
4
  Summary:
5
5
  License: GNU-3.0
6
6
  Author: Michael Arthur
@@ -2,6 +2,8 @@
2
2
 
3
3
  from dataclasses import dataclass
4
4
 
5
+ import betterproto
6
+
5
7
  from pymammotion.data.model import HashList
6
8
  from pymammotion.data.model.location import Location
7
9
  from pymammotion.proto.dev_net import DevNet
@@ -122,95 +124,158 @@ class MowingDevice:
122
124
  class DevNetData:
123
125
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
124
126
 
125
- net: DevNet
127
+ net: dict
128
+
129
+ def __init__(self, net: DevNet):
130
+ if isinstance(net, dict):
131
+ self.net = net
132
+ else:
133
+ self.net = net.to_dict()
126
134
 
127
135
  def __getattr__(self, item):
128
136
  """Intercept call to get net in dict and return a betterproto dataclass."""
129
- if not isinstance(self.net[item], dict):
130
- return self.net[item]
137
+ if self.net.get(item) is None:
138
+ return DevNet().__getattribute__(item)
131
139
 
132
- return DevNet().__getattribute__(item).from_dict(value=self.net[item])
140
+ if not isinstance(self.net.get(item), dict):
141
+ return self.net.get(item)
142
+
143
+ return DevNet().__getattribute__(item).from_dict(value=self.net.get(item))
133
144
 
134
145
 
135
146
  @dataclass
136
147
  class SysData:
137
148
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
138
149
 
139
- sys: MctlSys
150
+ sys: dict
151
+
152
+ def __init__(self, sys: MctlSys):
153
+ if isinstance(sys, dict):
154
+ self.sys = sys
155
+ else:
156
+ self.sys = sys.to_dict()
140
157
 
141
158
  def __getattr__(self, item):
142
- """Intercept call to get net in dict and return a betterproto dataclass."""
143
- if not isinstance(self.sys[item], dict):
144
- return self.sys[item]
159
+ """Intercept call to get sys in dict and return a betterproto dataclass."""
160
+ if self.sys.get(item) is None:
161
+ return MctlSys().__getattribute__(item)
162
+
163
+ if not isinstance(self.sys.get(item), dict):
164
+ return self.sys.get(item)
145
165
 
146
- return MctlSys().__getattribute__(item).from_dict(value=self.sys[item])
166
+ return MctlSys().__getattribute__(item).from_dict(value=self.sys.get(item))
147
167
 
148
168
 
149
169
  @dataclass
150
170
  class NavData:
151
171
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
152
172
 
153
- nav: MctlNav
173
+ nav: dict
174
+
175
+ def __init__(self, nav: MctlNav):
176
+ if isinstance(nav, dict):
177
+ self.nav = nav
178
+ else:
179
+ self.nav = nav.to_dict()
154
180
 
155
181
  def __getattr__(self, item):
156
182
  """Intercept call to get nav in dict and return a betterproto dataclass."""
157
- if not isinstance(self.nav[item], dict):
158
- return self.nav[item]
183
+ if self.nav.get(item) is None:
184
+ return MctlNav().__getattribute__(item)
185
+
186
+ if not isinstance(self.nav.get(item), dict):
187
+ return self.nav.get(item)
159
188
 
160
- return MctlNav().__getattribute__(item).from_dict(value=self.nav[item])
189
+ return MctlNav().__getattribute__(item).from_dict(value=self.nav.get(item))
161
190
 
162
191
 
163
192
  @dataclass
164
193
  class DriverData:
165
194
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
166
195
 
167
- driver: MctlDriver
196
+ driver: dict
197
+
198
+ def __init__(self, driver: MctlDriver):
199
+ if isinstance(driver, dict):
200
+ self.driver = driver
201
+ else:
202
+ self.driver = driver.to_dict()
168
203
 
169
204
  def __getattr__(self, item):
170
205
  """Intercept call to get driver in dict and return a betterproto dataclass."""
171
- if not isinstance(self.driver[item], dict):
172
- return self.driver[item]
206
+ if self.driver.get(item) is None:
207
+ return MctlDriver().__getattribute__(item)
208
+
209
+ if not isinstance(self.driver.get(item), dict):
210
+ return self.driver.get(item)
173
211
 
174
- return MctlDriver().__getattribute__(item).from_dict(value=self.driver[item])
212
+ return MctlDriver().__getattribute__(item).from_dict(value=self.driver.get(item))
175
213
 
176
214
 
177
215
  @dataclass
178
216
  class MulData:
179
217
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
180
218
 
181
- mul: SocMul
219
+ mul: dict
220
+
221
+ def __init__(self, mul: SocMul):
222
+ if isinstance(mul, dict):
223
+ self.mul = mul
224
+ else:
225
+ self.mul = mul.to_dict()
182
226
 
183
227
  def __getattr__(self, item):
184
228
  """Intercept call to get mul in dict and return a betterproto dataclass."""
185
- if not isinstance(self.mul[item], dict):
186
- return self.mul[item]
229
+ if self.mul.get(item) is None:
230
+ return SocMul().__getattribute__(item)
231
+
232
+ if not isinstance(self.mul.get(item), dict):
233
+ return self.mul.get(item)
187
234
 
188
- return SocMul().__getattribute__(item).from_dict(value=self.mul[item])
235
+ return SocMul().__getattribute__(item).from_dict(value=self.mul.get(item))
189
236
 
190
237
 
191
238
  @dataclass
192
239
  class OtaData:
193
240
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
194
241
 
195
- ota: MctlOta
242
+ ota: dict
243
+
244
+ def __init__(self, ota: MctlOta):
245
+ if isinstance(ota, dict):
246
+ self.ota = ota
247
+ else:
248
+ self.ota = ota.to_dict()
196
249
 
197
250
  def __getattr__(self, item):
198
251
  """Intercept call to get ota in dict and return a betterproto dataclass."""
199
- if not isinstance(self.ota[item], dict):
200
- return self.ota[item]
252
+ if self.ota.get(item) is None:
253
+ return MctlOta().__getattribute__(item)
254
+
255
+ if not isinstance(self.ota.get(item), dict):
256
+ return self.ota.get(item)
201
257
 
202
- return MctlOta().__getattribute__(item).from_dict(value=self.ota[item])
258
+ return MctlOta().__getattribute__(item).from_dict(value=self.ota.get(item))
203
259
 
204
260
 
205
261
  @dataclass
206
262
  class PeptData:
207
263
  """Wrapping class around LubaMsg to return a dataclass from the raw dict."""
208
264
 
209
- pept: MctlPept
265
+ pept: dict
266
+
267
+ def __init__(self, pept: MctlPept):
268
+ if isinstance(pept, dict):
269
+ self.pept = pept
270
+ else:
271
+ self.pept = pept.to_dict()
210
272
 
211
273
  def __getattr__(self, item):
212
274
  """Intercept call to get pept in dict and return a betterproto dataclass."""
213
- if not isinstance(self.pept[item], dict):
214
- return self.pept[item]
275
+ if self.pept.get(item) is None:
276
+ return MctlPept().__getattribute__(item)
277
+
278
+ if not isinstance(self.pept.get(item), dict):
279
+ return self.pept.get(item)
215
280
 
216
- return MctlPept().__getattribute__(item).from_dict(value=self.pept[item])
281
+ return MctlPept().__getattribute__(item).from_dict(value=self.pept.get(item))
@@ -531,6 +531,7 @@ class MammotionBaseBLEDevice(MammotionBaseDevice):
531
531
  if self._notify_future and not self._notify_future.done():
532
532
  self._notify_future.set_result(data)
533
533
 
534
+ self._reset_disconnect_timer()
534
535
  await self._state_manager.notification(new_msg)
535
536
 
536
537
  async def _start_notify(self) -> None:
@@ -663,7 +664,7 @@ class MammotionBaseBLEDevice(MammotionBaseDevice):
663
664
  _LOGGER.debug("%s: Disconnecting", self.name)
664
665
  try:
665
666
  """We reset what command the robot last heard before disconnecting."""
666
- if client.is_connected:
667
+ if client is not None and client.is_connected:
667
668
  command_bytes = self._commands.send_todev_ble_sync(2)
668
669
  await self._message.post_custom_data_bytes(command_bytes)
669
670
  await client.stop_notify(self._read_char)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pymammotion"
3
- version = "0.0.50"
3
+ version = "0.0.52"
4
4
  license = "GNU-3.0"
5
5
  description = ""
6
6
  readme = "README.md"
@@ -47,7 +47,7 @@ mypy = "^1.10.0"
47
47
  pre-commit = "^3.7.1"
48
48
 
49
49
  [tool.bumpver]
50
- current_version = "0.0.50"
50
+ current_version = "0.0.52"
51
51
  version_pattern = "MAJOR.MINOR.PATCH"
52
52
  commit_message = "Bump version {old_version} -> {new_version}"
53
53
  commit = true
File without changes
File without changes