pymammotion 0.4.55__tar.gz → 0.4.56__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 (129) hide show
  1. {pymammotion-0.4.55 → pymammotion-0.4.56}/PKG-INFO +1 -1
  2. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/client.py +2 -1
  3. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/state_manager.py +3 -3
  4. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/http.py +11 -3
  5. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/system.py +1 -0
  6. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/devices/mammotion_bluetooth.py +2 -1
  7. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/devices/mammotion_cloud.py +2 -1
  8. {pymammotion-0.4.55 → pymammotion-0.4.56}/pyproject.toml +2 -2
  9. {pymammotion-0.4.55 → pymammotion-0.4.56}/LICENSE +0 -0
  10. {pymammotion-0.4.55 → pymammotion-0.4.56}/README.md +0 -0
  11. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/__init__.py +0 -0
  12. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/__init__.py +0 -0
  13. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/cloud_gateway.py +0 -0
  14. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/model/aep_response.py +0 -0
  15. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/model/connect_response.py +0 -0
  16. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/model/dev_by_account_response.py +0 -0
  17. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/model/login_by_oauth_response.py +0 -0
  18. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/model/regions_response.py +0 -0
  19. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/model/session_by_authcode_response.py +0 -0
  20. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/regions.py +0 -0
  21. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/tea/core.py +0 -0
  22. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/aliyun/tmp_constant.py +0 -0
  23. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/__init__.py +0 -0
  24. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/ble.py +0 -0
  25. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/ble_message.py +0 -0
  26. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/const.py +0 -0
  27. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/data/__init__.py +0 -0
  28. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/data/convert.py +0 -0
  29. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/data/framectrldata.py +0 -0
  30. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/data/notifydata.py +0 -0
  31. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/model/__init__.py +0 -0
  32. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/bluetooth/model/atomic_integer.py +0 -0
  33. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/const.py +0 -0
  34. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/__init__.py +0 -0
  35. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/__init__.py +0 -0
  36. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/account.py +0 -0
  37. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/device.py +0 -0
  38. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/device_config.py +0 -0
  39. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/device_info.py +0 -0
  40. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/device_limits.py +0 -0
  41. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/enums.py +0 -0
  42. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/excute_boarder_params.py +0 -0
  43. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/execute_boarder.py +0 -0
  44. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/generate_route_information.py +0 -0
  45. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/hash_list.py +0 -0
  46. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/location.py +0 -0
  47. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/mowing_modes.py +0 -0
  48. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/rapid_state.py +0 -0
  49. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/raw_data.py +0 -0
  50. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/region_data.py +0 -0
  51. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/report_info.py +0 -0
  52. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/model/work.py +0 -0
  53. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/mqtt/__init__.py +0 -0
  54. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/mqtt/event.py +0 -0
  55. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/mqtt/properties.py +0 -0
  56. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/data/mqtt/status.py +0 -0
  57. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/event/__init__.py +0 -0
  58. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/event/event.py +0 -0
  59. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/__init__.py +0 -0
  60. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/_init_.py +0 -0
  61. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/encryption.py +0 -0
  62. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/model/__init__.py +0 -0
  63. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/model/camera_stream.py +0 -0
  64. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/http/model/http.py +0 -0
  65. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/__init__.py +0 -0
  66. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/__init__.py +0 -0
  67. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/abstract_message.py +0 -0
  68. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/mammotion_command.py +0 -0
  69. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/__init__.py +0 -0
  70. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/driver.py +0 -0
  71. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/media.py +0 -0
  72. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/navigation.py +0 -0
  73. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/network.py +0 -0
  74. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/ota.py +0 -0
  75. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/commands/messages/video.py +0 -0
  76. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/control/__init__.py +0 -0
  77. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/control/joystick.py +0 -0
  78. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/devices/__init__.py +0 -0
  79. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/devices/base.py +0 -0
  80. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mammotion/devices/mammotion.py +0 -0
  81. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mqtt/__init__.py +0 -0
  82. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mqtt/linkkit/__init__.py +0 -0
  83. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mqtt/linkkit/h2client.py +0 -0
  84. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mqtt/linkkit/linkkit.py +0 -0
  85. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mqtt/mammotion_future.py +0 -0
  86. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/mqtt/mammotion_mqtt.py +0 -0
  87. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/__init__.py +0 -0
  88. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/basestation.proto +0 -0
  89. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/basestation_pb2.py +0 -0
  90. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/basestation_pb2.pyi +0 -0
  91. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/common.proto +0 -0
  92. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/common_pb2.py +0 -0
  93. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/common_pb2.pyi +0 -0
  94. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/dev_net.proto +0 -0
  95. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/dev_net_pb2.py +0 -0
  96. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/dev_net_pb2.pyi +0 -0
  97. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/luba_msg.proto +0 -0
  98. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/luba_msg_pb2.py +0 -0
  99. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/luba_msg_pb2.pyi +0 -0
  100. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/luba_mul.proto +0 -0
  101. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/luba_mul_pb2.py +0 -0
  102. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/luba_mul_pb2.pyi +0 -0
  103. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_driver.proto +0 -0
  104. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_driver_pb2.py +0 -0
  105. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_driver_pb2.pyi +0 -0
  106. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_nav.proto +0 -0
  107. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_nav_pb2.py +0 -0
  108. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_nav_pb2.pyi +0 -0
  109. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_ota.proto +0 -0
  110. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_ota_pb2.py +0 -0
  111. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_ota_pb2.pyi +0 -0
  112. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_pept.proto +0 -0
  113. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_pept_pb2.py +0 -0
  114. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_pept_pb2.pyi +0 -0
  115. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_sys.proto +0 -0
  116. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_sys_pb2.py +0 -0
  117. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/proto/mctrl_sys_pb2.pyi +0 -0
  118. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/py.typed +0 -0
  119. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/constant/__init__.py +0 -0
  120. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/constant/device_constant.py +0 -0
  121. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/conversions.py +0 -0
  122. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/datatype_converter.py +0 -0
  123. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/device_config.py +0 -0
  124. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/device_type.py +0 -0
  125. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/map.py +0 -0
  126. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/movement.py +0 -0
  127. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/mur_mur_hash.py +0 -0
  128. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/periodic.py +0 -0
  129. {pymammotion-0.4.55 → pymammotion-0.4.56}/pymammotion/utility/rocker_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymammotion
3
- Version: 0.4.55
3
+ Version: 0.4.56
4
4
  Summary:
5
5
  License: GPL-3.0
6
6
  Author: Michael Arthur
@@ -1,3 +1,4 @@
1
+ from datetime import UTC, datetime
1
2
  import time
2
3
 
3
4
  from Tea.exceptions import UnretryableException
@@ -103,7 +104,7 @@ class Client:
103
104
  _request.headers = TeaCore.merge(
104
105
  {
105
106
  "host": self._domain,
106
- "date": UtilClient.get_date_utcstring(),
107
+ "date": datetime.now(UTC).strftime("%a, %d %b %Y %H:%M:%S GMT"),
107
108
  "x-ca-nonce": UtilClient.get_nonce(),
108
109
  "x-ca-key": self._app_key,
109
110
  "x-ca-signaturemethod": "HmacSHA256",
@@ -1,7 +1,7 @@
1
1
  """Manage state from notifications into MowingDevice."""
2
2
 
3
3
  from collections.abc import Awaitable, Callable
4
- from datetime import datetime
4
+ from datetime import UTC, datetime
5
5
  import logging
6
6
  from typing import Any
7
7
 
@@ -41,7 +41,7 @@ class StateManager:
41
41
 
42
42
  def __init__(self, device: MowingDevice) -> None:
43
43
  self._device: MowingDevice = device
44
- self.last_updated_at = datetime.now()
44
+ self.last_updated_at = datetime.now(UTC)
45
45
  self.preference = ConnectionPreference.WIFI
46
46
  self.cloud_gethash_ack_callback: Callable[[NavGetHashListAck], Awaitable[None]] | None = None
47
47
  self.cloud_get_commondata_ack_callback: (
@@ -115,7 +115,7 @@ class StateManager:
115
115
  async def notification(self, message: LubaMsg) -> None:
116
116
  """Handle protobuf notifications."""
117
117
  res = betterproto.which_one_of(message, "LubaSubMsg")
118
- self.last_updated_at = datetime.now()
118
+ self.last_updated_at = datetime.now(UTC)
119
119
  # additional catch all if we don't get a status update
120
120
  if not self._device.online:
121
121
  self._device.online = True
@@ -107,7 +107,9 @@ class MammotionHTTP:
107
107
  # TODO catch errors from mismatch like token expire etc
108
108
  # Assuming the data format matches the expected structure
109
109
  response = Response[StreamSubscriptionResponse].from_dict(data)
110
- response.data = StreamSubscriptionResponse.from_dict(data["data"])
110
+ if response.code != 0:
111
+ return response
112
+ response.data = StreamSubscriptionResponse.from_dict(data.get("data", {}))
111
113
  return response
112
114
 
113
115
  async def get_stream_subscription_mini_or_x_series(
@@ -138,7 +140,9 @@ class MammotionHTTP:
138
140
  # TODO catch errors from mismatch like token expire etc
139
141
  # Assuming the data format matches the expected structure
140
142
  response = Response[StreamSubscriptionResponse].from_dict(data)
141
- response.data = StreamSubscriptionResponse.from_dict(data["data"])
143
+ if response.code != 0:
144
+ return response
145
+ response.data = StreamSubscriptionResponse.from_dict(data.get("data", {}))
142
146
  return response
143
147
 
144
148
  async def get_video_resource(self, iot_id: str) -> Response[VideoResourceResponse]:
@@ -155,7 +159,11 @@ class MammotionHTTP:
155
159
  data = await resp.json()
156
160
  # TODO catch errors from mismatch like token expire etc
157
161
  # Assuming the data format matches the expected structure
158
- return Response[VideoResourceResponse].from_dict(data)
162
+ response = Response[VideoResourceResponse].from_dict(data)
163
+ if response.code != 0:
164
+ return response
165
+ response.data = VideoResourceResponse.from_dict(data.get("data", {}))
166
+ return response
159
167
 
160
168
  async def refresh_login(self, account: str, password: str | None = None) -> Response[LoginResponseData]:
161
169
  if self._password is None and password is not None:
@@ -202,6 +202,7 @@ class MessageSystem(AbstractMessage, ABC):
202
202
  # return self.send_order_msg_sys(build2)
203
203
 
204
204
  def send_sys_set_date_time(self) -> bytes:
205
+ # TODO get HA timezone
205
206
  calendar = datetime.datetime.now()
206
207
  i = calendar.year
207
208
  i2 = calendar.month
@@ -345,7 +345,8 @@ class MammotionBaseBLEDevice(MammotionBaseDevice):
345
345
  return
346
346
 
347
347
  new_msg = LubaMsg().parse(data)
348
- if betterproto.serialized_on_wire(new_msg.net):
348
+ res = betterproto.which_one_of(new_msg, "LubaSubMsg")
349
+ if res[0] == "net":
349
350
  if new_msg.net.todev_ble_sync != 0 or has_field(new_msg.net.toapp_wifi_iot_status):
350
351
  if has_field(new_msg.net.toapp_wifi_iot_status) and self._commands.get_device_product_key() == "":
351
352
  self._commands.set_device_product_key(new_msg.net.toapp_wifi_iot_status.productkey)
@@ -326,7 +326,8 @@ class MammotionBaseCloudDevice(MammotionBaseDevice):
326
326
  ):
327
327
  self._commands.set_device_product_key(event.params.productKey)
328
328
 
329
- if betterproto.serialized_on_wire(new_msg.net):
329
+ res = betterproto.which_one_of(new_msg, "LubaSubMsg")
330
+ if res[0] == "net":
330
331
  if new_msg.net.todev_ble_sync != 0 or has_field(new_msg.net.toapp_wifi_iot_status):
331
332
  return
332
333
 
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [project]
6
6
  name = "pymammotion"
7
- version = "0.4.55"
7
+ version = "0.4.56"
8
8
  license = "GPL-3.0"
9
9
  description = ""
10
10
  readme = "README.md"
@@ -66,7 +66,7 @@ autotyping = "^24.3.0"
66
66
  ipython = "^9.0.2"
67
67
 
68
68
  [tool.bumpver]
69
- current_version = "0.4.55"
69
+ current_version = "0.4.56"
70
70
  version_pattern = "MAJOR.MINOR.PATCH"
71
71
  commit_message = "Bump version {old_version} -> {new_version}"
72
72
  commit = true
File without changes
File without changes