pymammotion 0.5.27__py3-none-any.whl → 0.5.44__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.

Potentially problematic release.


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

Files changed (56) hide show
  1. pymammotion/__init__.py +3 -3
  2. pymammotion/aliyun/client.py +3 -0
  3. pymammotion/aliyun/cloud_gateway.py +117 -19
  4. pymammotion/aliyun/model/dev_by_account_response.py +198 -20
  5. pymammotion/const.py +3 -0
  6. pymammotion/data/model/device.py +1 -0
  7. pymammotion/data/model/device_config.py +1 -1
  8. pymammotion/data/model/enums.py +5 -3
  9. pymammotion/data/model/generate_route_information.py +2 -2
  10. pymammotion/data/model/hash_list.py +113 -33
  11. pymammotion/data/model/region_data.py +4 -4
  12. pymammotion/data/{state_manager.py → mower_state_manager.py} +17 -7
  13. pymammotion/data/mqtt/event.py +47 -22
  14. pymammotion/data/mqtt/mammotion_properties.py +257 -0
  15. pymammotion/data/mqtt/properties.py +32 -29
  16. pymammotion/data/mqtt/status.py +17 -16
  17. pymammotion/homeassistant/__init__.py +3 -0
  18. pymammotion/homeassistant/mower_api.py +446 -0
  19. pymammotion/homeassistant/rtk_api.py +54 -0
  20. pymammotion/http/http.py +431 -18
  21. pymammotion/http/model/http.py +82 -2
  22. pymammotion/http/model/response_factory.py +10 -4
  23. pymammotion/mammotion/commands/mammotion_command.py +20 -0
  24. pymammotion/mammotion/commands/messages/navigation.py +10 -6
  25. pymammotion/mammotion/commands/messages/system.py +0 -14
  26. pymammotion/mammotion/devices/__init__.py +27 -3
  27. pymammotion/mammotion/devices/base.py +22 -146
  28. pymammotion/mammotion/devices/mammotion.py +367 -206
  29. pymammotion/mammotion/devices/mammotion_bluetooth.py +8 -5
  30. pymammotion/mammotion/devices/mammotion_cloud.py +47 -83
  31. pymammotion/mammotion/devices/mammotion_mower_ble.py +49 -0
  32. pymammotion/mammotion/devices/mammotion_mower_cloud.py +39 -0
  33. pymammotion/mammotion/devices/managers/managers.py +81 -0
  34. pymammotion/mammotion/devices/mower_device.py +121 -0
  35. pymammotion/mammotion/devices/mower_manager.py +107 -0
  36. pymammotion/mammotion/devices/rtk_ble.py +89 -0
  37. pymammotion/mammotion/devices/rtk_cloud.py +113 -0
  38. pymammotion/mammotion/devices/rtk_device.py +50 -0
  39. pymammotion/mammotion/devices/rtk_manager.py +122 -0
  40. pymammotion/mqtt/__init__.py +2 -1
  41. pymammotion/mqtt/aliyun_mqtt.py +232 -0
  42. pymammotion/mqtt/mammotion_mqtt.py +174 -192
  43. pymammotion/mqtt/mqtt_models.py +66 -0
  44. pymammotion/proto/__init__.py +2 -2
  45. pymammotion/proto/mctrl_nav.proto +2 -2
  46. pymammotion/proto/mctrl_nav_pb2.py +1 -1
  47. pymammotion/proto/mctrl_nav_pb2.pyi +4 -4
  48. pymammotion/proto/mctrl_sys.proto +1 -1
  49. pymammotion/utility/datatype_converter.py +13 -12
  50. pymammotion/utility/device_type.py +88 -3
  51. pymammotion/utility/mur_mur_hash.py +132 -87
  52. {pymammotion-0.5.27.dist-info → pymammotion-0.5.44.dist-info}/METADATA +25 -30
  53. {pymammotion-0.5.27.dist-info → pymammotion-0.5.44.dist-info}/RECORD +61 -47
  54. {pymammotion-0.5.27.dist-info → pymammotion-0.5.44.dist-info}/WHEEL +1 -1
  55. pymammotion/http/_init_.py +0 -0
  56. {pymammotion-0.5.27.dist-info → pymammotion-0.5.44.dist-info/licenses}/LICENSE +0 -0
@@ -2,113 +2,158 @@ import struct
2
2
 
3
3
 
4
4
  class MurMurHashUtil:
5
+ MASK_32 = 0xFFFFFFFF
6
+ MULTIPLIER = 1540483477
7
+
5
8
  @staticmethod
6
- def get_unsigned_int(i):
7
- return i & 0xFFFFFFFF
9
+ def get_unsigned_int(i: int) -> int:
10
+ """Convert signed int to unsigned (32-bit)"""
11
+ return i & MurMurHashUtil.MASK_32
8
12
 
9
13
  @staticmethod
10
- def hash(byte_arr: bytes):
11
- # Create a bytearray view with little endian order
12
- position = 0
13
- remaining_bytes = len(byte_arr)
14
+ def hash(data: bytes) -> int:
15
+ """MurmurHash2 64-bit implementation"""
16
+ pos = 0
17
+ data_len = len(data)
14
18
 
15
- # Initial values
16
- remaining = remaining_bytes ^ 97
19
+ remaining = data_len ^ 97
17
20
  j = 0
18
21
 
19
22
  # Process 8 bytes at a time
20
- while remaining_bytes >= 8:
21
- multiplier = 1540483477
22
-
23
- # First 4 bytes
24
- unsigned_int = struct.unpack_from("<I", byte_arr, position)[0]
25
- position += 4
26
- unsigned_int = (MurMurHashUtil.get_unsigned_int(unsigned_int) * multiplier) & 0xFFFFFFFF
27
- remaining = (
28
- ((remaining * multiplier) & 0xFFFFFFFF)
29
- ^ (((unsigned_int ^ (unsigned_int >> 24)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF
30
- ) & 0xFFFFFFFF
31
-
32
- # Next 4 bytes
33
- unsigned_int2 = struct.unpack_from("<I", byte_arr, position)[0]
34
- position += 4
35
- unsigned_int2 = (MurMurHashUtil.get_unsigned_int(unsigned_int2) * multiplier) & 0xFFFFFFFF
36
- j = (
37
- ((j * multiplier) & 0xFFFFFFFF)
38
- ^ ((((unsigned_int2 ^ (unsigned_int2 >> 24)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF)
39
- ) & 0xFFFFFFFF
40
-
41
- remaining_bytes -= 8
23
+ while (data_len - pos) >= 8:
24
+ val1 = struct.unpack_from("<i", data, pos)[0]
25
+ pos += 4
26
+
27
+ unsigned_int_1 = MurMurHashUtil.get_unsigned_int(val1)
28
+ temp1 = (unsigned_int_1 * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
29
+ temp2 = (temp1 ^ (temp1 >> 24)) & MurMurHashUtil.MASK_32
30
+ temp3 = (temp2 * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
31
+
32
+ remaining = ((remaining * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32) ^ temp3
33
+ remaining = remaining & MurMurHashUtil.MASK_32
34
+
35
+ val2 = struct.unpack_from("<i", data, pos)[0]
36
+ pos += 4
37
+
38
+ unsigned_int_2 = MurMurHashUtil.get_unsigned_int(val2)
39
+ temp1 = (unsigned_int_2 * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
40
+ temp2 = (temp1 ^ (temp1 >> 24)) & MurMurHashUtil.MASK_32
41
+ temp3 = (temp2 * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
42
+
43
+ j = ((j * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32) ^ temp3
44
+ j = j & MurMurHashUtil.MASK_32
42
45
 
43
46
  # Process remaining 4 bytes if available
44
- if remaining_bytes >= 4:
45
- multiplier = 1540483477
46
- unsigned_int3 = struct.unpack_from("<I", byte_arr, position)[0]
47
- position += 4
48
- unsigned_int3 = (MurMurHashUtil.get_unsigned_int(unsigned_int3) * multiplier) & 0xFFFFFFFF
49
- remaining = (
50
- ((remaining * multiplier) & 0xFFFFFFFF)
51
- ^ ((((unsigned_int3 ^ (unsigned_int3 >> 24)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF)
52
- ) & 0xFFFFFFFF
53
- remaining_bytes -= 4
54
-
55
- # Process final 1-3 bytes if available
56
- if remaining_bytes == 1:
57
- j = (
58
- ((j ^ (MurMurHashUtil.get_unsigned_int(byte_arr[position]) & 0xFF)) & 0xFFFFFFFF) * 1540483477
59
- ) & 0xFFFFFFFF
60
- elif remaining_bytes == 2:
61
- j = (j ^ ((MurMurHashUtil.get_unsigned_int(byte_arr[position + 1]) & 0xFF) << 8)) & 0xFFFFFFFF
62
- j = (
63
- ((j ^ (MurMurHashUtil.get_unsigned_int(byte_arr[position]) & 0xFF)) & 0xFFFFFFFF) * 1540483477
64
- ) & 0xFFFFFFFF
65
- elif remaining_bytes == 3:
66
- j = (j ^ ((MurMurHashUtil.get_unsigned_int(byte_arr[position + 2]) & 0xFF) << 16)) & 0xFFFFFFFF
67
- j = (j ^ ((MurMurHashUtil.get_unsigned_int(byte_arr[position + 1]) & 0xFF) << 8)) & 0xFFFFFFFF
68
- j = (
69
- ((j ^ (MurMurHashUtil.get_unsigned_int(byte_arr[position]) & 0xFF)) & 0xFFFFFFFF) * 1540483477
70
- ) & 0xFFFFFFFF
71
-
72
- # Final mixing
73
- multiplier = 1540483477
74
- j5 = (((remaining ^ (j >> 18)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF
75
- j6 = (((j ^ (j5 >> 22)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF
76
- j7 = (((j5 ^ (j6 >> 17)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF
47
+ if (data_len - pos) >= 4:
48
+ val = struct.unpack_from("<i", data, pos)[0]
49
+ pos += 4
50
+
51
+ unsigned_int_3 = MurMurHashUtil.get_unsigned_int(val)
52
+ temp1 = (unsigned_int_3 * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
53
+ temp2 = (temp1 ^ (temp1 >> 24)) & MurMurHashUtil.MASK_32
54
+ temp3 = (temp2 * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
55
+
56
+ remaining = ((remaining * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32) ^ temp3
57
+ remaining = remaining & MurMurHashUtil.MASK_32
58
+
59
+ # Process tail bytes (1-3 bytes)
60
+ bytes_remaining = data_len - pos
61
+
62
+ if bytes_remaining == 1:
63
+ byte_val = data[pos] if data[pos] < 128 else data[pos] - 256
64
+ j = (j ^ (MurMurHashUtil.get_unsigned_int(byte_val) & 255)) & MurMurHashUtil.MASK_32
65
+ j = (j * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
66
+
67
+ elif bytes_remaining == 2:
68
+ byte_val1 = data[pos + 1] if data[pos + 1] < 128 else data[pos + 1] - 256
69
+ j = (j ^ ((MurMurHashUtil.get_unsigned_int(byte_val1) & 255) << 8)) & MurMurHashUtil.MASK_32
70
+
71
+ byte_val0 = data[pos] if data[pos] < 128 else data[pos] - 256
72
+ j = (j ^ (MurMurHashUtil.get_unsigned_int(byte_val0) & 255)) & MurMurHashUtil.MASK_32
73
+ j = (j * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
74
+
75
+ elif bytes_remaining == 3:
76
+ byte_val2 = data[pos + 2] if data[pos + 2] < 128 else data[pos + 2] - 256
77
+ j = (j ^ ((MurMurHashUtil.get_unsigned_int(byte_val2) & 255) << 16)) & MurMurHashUtil.MASK_32
78
+
79
+ byte_val1 = data[pos + 1] if data[pos + 1] < 128 else data[pos + 1] - 256
80
+ j = (j ^ ((MurMurHashUtil.get_unsigned_int(byte_val1) & 255) << 8)) & MurMurHashUtil.MASK_32
81
+
82
+ byte_val0 = data[pos] if data[pos] < 128 else data[pos] - 256
83
+ j = (j ^ (MurMurHashUtil.get_unsigned_int(byte_val0) & 255)) & MurMurHashUtil.MASK_32
84
+ j = (j * MurMurHashUtil.MULTIPLIER) & MurMurHashUtil.MASK_32
85
+
86
+ # Final avalanche
87
+ j4 = MurMurHashUtil.MULTIPLIER
88
+
89
+ j5 = remaining ^ (j >> 18)
90
+ j5 = (j5 & MurMurHashUtil.MASK_32) * j4
91
+ j5 = j5 & MurMurHashUtil.MASK_32
92
+
93
+ j6 = j ^ (j5 >> 22)
94
+ j6 = (j6 & MurMurHashUtil.MASK_32) * j4
95
+ j6 = j6 & MurMurHashUtil.MASK_32
96
+
97
+ j7 = j5 ^ (j6 >> 17)
98
+ j7 = (j7 & MurMurHashUtil.MASK_32) * j4
99
+ j7 = j7 & MurMurHashUtil.MASK_32
100
+
101
+ # Combine high and low parts
77
102
  j8 = j7 << 32
78
103
 
79
- return j8 | ((((j6 ^ (j7 >> 19)) & 0xFFFFFFFF) * multiplier) & 0xFFFFFFFF)
104
+ low = j6 ^ (j7 >> 19)
105
+ low = (low & MurMurHashUtil.MASK_32) * j4
106
+ low = low & MurMurHashUtil.MASK_32
80
107
 
81
- @staticmethod
82
- def hash_unsigned(s: str | bytes) -> None:
83
- if isinstance(s, str):
84
- return MurMurHashUtil.read_unsigned_long(MurMurHashUtil.hash(s.encode()))
85
- elif isinstance(s, bytes) or isinstance(s, bytearray):
86
- return MurMurHashUtil.read_unsigned_long(MurMurHashUtil.hash(s))
87
- return None
108
+ result = j8 | low
109
+
110
+ # Convert to signed 64-bit
111
+ if result > 0x7FFFFFFFFFFFFFFF:
112
+ result = result - 0x10000000000000000
113
+
114
+ return result
88
115
 
89
116
  @staticmethod
90
- def long2bytes(value: int) -> bytes:
91
- # Convert long to 8 bytes in little-endian order
92
- result = bytearray(8)
93
- for i in range(8):
94
- result[7 - i] = (value >> (i * 8)) & 0xFF
95
- return bytes(result)
117
+ def hash_string(s: str) -> int:
118
+ """Hash a string using UTF-8 encoding"""
119
+ return MurMurHashUtil.hash(s.encode("utf-8"))
96
120
 
97
121
  @staticmethod
98
122
  def read_unsigned_long(value: int) -> int:
123
+ """Convert to unsigned by masking with Long.MAX_VALUE"""
99
124
  return value & 0x7FFFFFFFFFFFFFFF
100
125
 
101
126
  @staticmethod
102
- def hash_unsigned_list(long_list: list[int]):
103
- byte_arr = b""
104
- for i in range(len(long_list)):
105
- if i == 0:
106
- byte_arr = MurMurHashUtil.long2bytes(long_list[i])
107
- else:
108
- byte_arr += MurMurHashUtil.long2bytes(long_list[i])
127
+ def hash_unsigned(data) -> int:
128
+ """Get unsigned hash value
129
+ Can accept bytes or string
130
+ """
131
+ if isinstance(data, str):
132
+ hash_val = MurMurHashUtil.hash_string(data)
133
+ else:
134
+ hash_val = MurMurHashUtil.hash(data)
109
135
 
110
- return MurMurHashUtil.read_unsigned_long(MurMurHashUtil.hash(byte_arr))
136
+ return MurMurHashUtil.read_unsigned_long(hash_val)
111
137
 
112
138
  @staticmethod
113
- def hash_string(s: str):
114
- return MurMurHashUtil.hash(s.encode())
139
+ def long_to_bytes(value: int) -> bytes:
140
+ """Convert long to bytes exactly as Java does:
141
+ 1. Pack as big-endian (ByteBuffer default)
142
+ 2. Reverse all bytes
143
+ """
144
+ if value < 0:
145
+ value = value & 0xFFFFFFFFFFFFFFFF
146
+
147
+ big_endian = struct.pack(">Q", value)
148
+ return big_endian[::-1]
149
+
150
+ @staticmethod
151
+ def hash_unsigned_list(values: list[int]) -> int:
152
+ """Hash a list of long values"""
153
+ data = b""
154
+
155
+ for val in values:
156
+ data += MurMurHashUtil.long_to_bytes(val)
157
+
158
+ hash_val = MurMurHashUtil.hash(data)
159
+ return MurMurHashUtil.read_unsigned_long(hash_val)
@@ -1,33 +1,29 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: pymammotion
3
- Version: 0.5.27
4
- Summary:
5
- License: GPL-3.0
6
- Author: Michael Arthur
7
- Author-email: michael@jumblesoft.co.nz
8
- Requires-Python: >=3.10
9
- Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.11
12
- Classifier: Programming Language :: Python :: 3.12
13
- Classifier: Programming Language :: Python :: 3.13
14
- Requires-Dist: aiohttp (>=3.9.1)
15
- Requires-Dist: alibabacloud-apigateway-util (>=0.0.2,<0.0.3)
16
- Requires-Dist: alibabacloud-iot-api-gateway (>=0.0.4,<0.0.5)
17
- Requires-Dist: alicloud-gateway-iot (>=1.0.0,<2.0.0)
18
- Requires-Dist: async-timeout (>=4.0.3,<5.0.0)
19
- Requires-Dist: betterproto2 (>=0.8.0,<0.9.0)
20
- Requires-Dist: bleak (>=0.21.0)
21
- Requires-Dist: bleak-retry-connector (>=3.5.0)
22
- Requires-Dist: crcmod (>=1.7,<2.0)
23
- Requires-Dist: cryptography (>=43.0.1)
24
- Requires-Dist: jsonic (>=1.0.0,<2.0.0)
25
- Requires-Dist: mashumaro (>=3.13,<4.0)
26
- Requires-Dist: numpy (>=1.26.0)
27
- Requires-Dist: orjson (>=3.9.15,<4.0.0)
28
- Requires-Dist: paho-mqtt (>=2.1.0,<3.0.0)
29
- Requires-Dist: protobuf (>=4.23.1)
30
- Requires-Dist: py-jsonic (>=0.0.2,<0.0.3)
3
+ Version: 0.5.44
4
+ Author: jLynx
5
+ Author-email: Michael Arthur <michael@jumblesoft.co.nz>
6
+ License-Expression: GPL-3.0
7
+ License-File: LICENSE
8
+ Requires-Python: <4.0,>=3.12
9
+ Requires-Dist: aiohttp>=3.9.1
10
+ Requires-Dist: alibabacloud-apigateway-util<0.0.3,>=0.0.2
11
+ Requires-Dist: alibabacloud-iot-api-gateway<0.0.5,>=0.0.4
12
+ Requires-Dist: alicloud-gateway-iot<2,>=1.0.0
13
+ Requires-Dist: async-timeout<5,>=4.0.3
14
+ Requires-Dist: betterproto2<0.9,>=0.8.0
15
+ Requires-Dist: bleak-retry-connector>=3.5.0
16
+ Requires-Dist: bleak>=0.21.0
17
+ Requires-Dist: crcmod~=1.7
18
+ Requires-Dist: cryptography>=43.0.1
19
+ Requires-Dist: jsonic<2,>=1.0.0
20
+ Requires-Dist: mashumaro~=3.13
21
+ Requires-Dist: numpy>=1.26.0
22
+ Requires-Dist: orjson<4,>=3.9.15
23
+ Requires-Dist: paho-mqtt<3,>=2.1.0
24
+ Requires-Dist: protobuf>=4.23.1
25
+ Requires-Dist: py-jsonic<0.0.3,>=0.0.2
26
+ Requires-Dist: pyjwt>=2.10.1
31
27
  Description-Content-Type: text/markdown
32
28
 
33
29
  # PyMammotion - Python API for Mammotion Mowers [![Discord](https://img.shields.io/discord/1247286396297678879)](https://discord.gg/vpZdWhJX8x)
@@ -96,4 +92,3 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
96
92
 
97
93
  The trademarks "Mammotion," "Luba," and "Yuka" referenced herein are registered trademarks of their respective owners. The author of this software repository is not affiliated with, endorsed by, or connected to these trademark owners in any way.
98
94
 
99
-
@@ -1,17 +1,19 @@
1
- pymammotion/__init__.py,sha256=H-U94bNLp0LPC6hkRopVEUlUsZSR97n7WfKGPjK1GMg,1638
1
+ pymammotion/__init__.py,sha256=1qcHKu-sHbn1Jc2PCiYX0S_GDKg6g-FneTEw1x4IcNs,1661
2
+ pymammotion/const.py,sha256=SUB5OQEIBoJ_K6gzIZhx4yVxwWO24yGsEMYPy0MUiKE,499
3
+ pymammotion/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
4
  pymammotion/aliyun/__init__.py,sha256=T1lkX7TRYiL4nqYanG4l4MImV-SlavSbuooC-W-uUGw,29
3
- pymammotion/aliyun/client.py,sha256=z-dCR6cD5-8MuxjFaXC5U8IsiKcsGQ4EzzexG7X78B8,9664
4
- pymammotion/aliyun/cloud_gateway.py,sha256=rnOV5v6V1jIbZ8nYXTwvJTEfbAIrmbNBPG8eIbqVyZ0,31977
5
+ pymammotion/aliyun/client.py,sha256=gS15-fAYn3nViwFY3zMlS_2T9mZokFLUyuHADaXH-O8,9777
6
+ pymammotion/aliyun/cloud_gateway.py,sha256=aIKO0pJ1OwWoz9Xt0MQd1XZCr0Tkw8_1e4WoX60ExF4,35575
7
+ pymammotion/aliyun/regions.py,sha256=ctlRGrmdE4-xgItl9slCANYOV502qVN5lkAU4lj92sk,2518
8
+ pymammotion/aliyun/tmp_constant.py,sha256=M4Hq_lrGB3LZdX6R2XohRPFoK1NDnNV-pTJwJcJ9838,6650
5
9
  pymammotion/aliyun/model/aep_response.py,sha256=EY4uMTJ4F9rvbcXnAOc5YKi7q__9kIVgfDwfyr65Gk0,421
6
10
  pymammotion/aliyun/model/connect_response.py,sha256=Yz-fEbDzgGPTo5Of2oAjmFkSv08T7ze80pQU4k-gKIU,824
7
- pymammotion/aliyun/model/dev_by_account_response.py,sha256=P9yYy4Z2tLkJSqXA_5XGaCUliSSVa5ILl7VoMtL_tCA,977
11
+ pymammotion/aliyun/model/dev_by_account_response.py,sha256=9L-ST-U64gYh0FtmXO94ArMgsnB3vdMmq2w20tF4hrQ,7051
8
12
  pymammotion/aliyun/model/login_by_oauth_response.py,sha256=g7JnvEjoa3SplHd-UqCuK6x0qtODpHlDyJCHRz7tfDI,1228
9
13
  pymammotion/aliyun/model/regions_response.py,sha256=HSnpPcgpjr6VNXBQHw__gn-xWCkQ-MZ-Tmus9_va9mI,635
10
14
  pymammotion/aliyun/model/session_by_authcode_response.py,sha256=0owdNcGFIP7rsVqLIf9rT-iOtvWmKCt2AW0cUUXwFiQ,427
11
15
  pymammotion/aliyun/model/thing_response.py,sha256=23gUpB8EX3jNICp-p4Gytxs4qAfzKVr8anUA9JCl4XM,273
12
- pymammotion/aliyun/regions.py,sha256=ctlRGrmdE4-xgItl9slCANYOV502qVN5lkAU4lj92sk,2518
13
16
  pymammotion/aliyun/tea/core.py,sha256=4SjhRkbPMbw-uI0lQnCN0SBNAHAgVFrpHeaauuu6nZY,10200
14
- pymammotion/aliyun/tmp_constant.py,sha256=M4Hq_lrGB3LZdX6R2XohRPFoK1NDnNV-pTJwJcJ9838,6650
15
17
  pymammotion/bluetooth/__init__.py,sha256=LAl8jqZ1fPh-3mLmViNQsP3s814C1vsocYUa6oSaXt0,36
16
18
  pymammotion/bluetooth/ble.py,sha256=XQWJBpSzeIawCrLTsVrq9LI6jmM_ALVTttUkosK2BRM,2480
17
19
  pymammotion/bluetooth/ble_message.py,sha256=qROCOsz68kfxWeEK3Hm4dfvsbA3SpxJRhX7sEmJAMZU,18797
@@ -22,70 +24,83 @@ pymammotion/bluetooth/data/framectrldata.py,sha256=qxhGQsTGsfPx-CarEMLkgBn_RJ6I2
22
24
  pymammotion/bluetooth/data/notifydata.py,sha256=jeROpoFmaZfNTidkLLm5VYeFbeIgDSi8waJ0nVLRUTA,1995
23
25
  pymammotion/bluetooth/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
26
  pymammotion/bluetooth/model/atomic_integer.py,sha256=jtSqeqd6It3TvzZN7TJyYHQNRuItuw0Bg-cL0AUEBhY,1666
25
- pymammotion/const.py,sha256=lWRxvTVdXnNHuxqvRkjO5ziK0Ic-fZMM6J2dbe5M6Nc,385
26
27
  pymammotion/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ pymammotion/data/mower_state_manager.py,sha256=-iLTn6zrnhQYzKCto-SoLeu9OpIxa_YQ_7V8mLf3g4A,14390
27
29
  pymammotion/data/model/__init__.py,sha256=UVRbSXGOjYnWv30ZEvzT5QRpdVqAbyeToo-t0QBWyi4,292
28
30
  pymammotion/data/model/account.py,sha256=vJM-KTf2q6eBfVC-UlNHBSmJvqHiCawZ40vnuhXhaz8,140
29
- pymammotion/data/model/device.py,sha256=2qi0Fv5F_wUZmCxiqDaPjqwz5isKGNODw7ynOfzrLLE,8290
30
- pymammotion/data/model/device_config.py,sha256=DTnoePsMwJrKVXqGeKvbZQjs8Zab61U5T3b-c-w0WlM,2654
31
+ pymammotion/data/model/device.py,sha256=MeaB0ucFuNU5E4RAQ6qC8sTqdPJMw3lsMXR_YmYvqEM,8350
32
+ pymammotion/data/model/device_config.py,sha256=cLfvO_xs8GhEQbhTZLOfhYK5OX4T337M9OZkyQ_GNWQ,2652
31
33
  pymammotion/data/model/device_info.py,sha256=vjqHlRbHOyEkkaIoTwAp14CZMY5R5o609SbThfOO-gg,1390
32
34
  pymammotion/data/model/device_limits.py,sha256=m8HdxD-RaAkPm7jHYb9GLxMEH9IfzBPz0ZypmsLnId4,1946
33
- pymammotion/data/model/enums.py,sha256=NLImBbeqwbwBLbABC_NbBzk4M8OxhUTcto6QcGZVNOc,1707
35
+ pymammotion/data/model/enums.py,sha256=LVLP-9ypW0NxwyTeizxPVFNX3INWGfhSR9obM_vl0-M,1782
34
36
  pymammotion/data/model/errors.py,sha256=lBHq2cE8P5fc6Q4JXgrkJXzFKTWgxsoPOyMlTaJWbWk,396
35
37
  pymammotion/data/model/excute_boarder_params.py,sha256=9CpUqrygcle1C_1hDW-riLmm4map4ZbE842NXjcomEI,1394
36
38
  pymammotion/data/model/execute_boarder.py,sha256=9rd_h4fbcsXxgnLOd2rO2hWyD1abnTGc47QTEpp8DD0,1103
37
- pymammotion/data/model/generate_route_information.py,sha256=pgjqURwmEIzjCMbl4Z5JDDkfxyUAdry1KhPfyir3-mU,777
38
- pymammotion/data/model/hash_list.py,sha256=t9pY5JkL8Ky5YE4y6FowsiBeEZJPFl8XrPvW21xavEE,12121
39
+ pymammotion/data/model/generate_route_information.py,sha256=-_c8pk10zwRh-O2vJ0i3DDCOQbv9CRJ7YNWpfsIpajI,807
40
+ pymammotion/data/model/hash_list.py,sha256=jikG45FlsIBXaPzFN84WVN7Mn-c1yi3BmMC46aw2c3k,14817
39
41
  pymammotion/data/model/location.py,sha256=PwmITejfI4pm7PI4rzqSuuHetwle6IJr_CV95435s2M,871
40
42
  pymammotion/data/model/mowing_modes.py,sha256=4rMn1H8w2iU2aBwpmAhPh_sT81yqrocrWWUIaU7DCIc,1171
41
43
  pymammotion/data/model/rapid_state.py,sha256=mIdhAG_LZXpVcybxqTLgLXkNOmVmDTn04B9PGIDA8Ls,1251
42
44
  pymammotion/data/model/raw_data.py,sha256=x2xuqVC8CQuV3ui3QK4G5EqRET9EsNljHLHR11ByYgo,6471
43
- pymammotion/data/model/region_data.py,sha256=VokMRqB_o4OFL1TWAM90Fvm-1z4jcYrw3X2o760qpx4,2949
45
+ pymammotion/data/model/region_data.py,sha256=OP4hXYX2U1gNxU7VFsHQfQbE1Bze_nvVFQ0ZT7XZJsg,2909
44
46
  pymammotion/data/model/report_info.py,sha256=3nXBFRfdKWnZj4YfBcrPwhBRpq58ICMQlrESfI1tTMg,3808
45
47
  pymammotion/data/model/work.py,sha256=AfKMItFqnRtAlVHzKCfYY-BQy-WFDYZBzdj-9Yc03bo,655
46
48
  pymammotion/data/mqtt/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
47
- pymammotion/data/mqtt/event.py,sha256=pj65y93ACcTzUIJkHZC6s_pRFBYaNMSU1wyYRhiGvw4,5571
48
- pymammotion/data/mqtt/properties.py,sha256=laud9rE-JqBHWKZ44Dov2yMkp3Ld8ghpBwlZ4_3g9uQ,4321
49
- pymammotion/data/mqtt/status.py,sha256=qwZPevIzScePA_25nbRWMN7IhU-MhhtIl7fcZKAJfIc,1102
50
- pymammotion/data/state_manager.py,sha256=FU9F_UMGyMBRJvbBSoW-uQaVHWE2XA7qrY1R5011qG8,14217
49
+ pymammotion/data/mqtt/event.py,sha256=JPzu2XCgyLwcdKsN9vqg94WMvHtsGH6vHHSFGstILjo,6911
50
+ pymammotion/data/mqtt/mammotion_properties.py,sha256=oMsHkMJQxLjiUu8wXtWiLV7cmUPM8sJk2GBVsBeIfNU,8528
51
+ pymammotion/data/mqtt/properties.py,sha256=40r6rW7bL1R4v1PFEhBMF7Z45UfpgafhsAou5JyB6NU,5152
52
+ pymammotion/data/mqtt/status.py,sha256=jZ1Qx8tRhtBOguL7MOtR0jhsA1cRmVKoPJszho5A2Bs,1644
51
53
  pymammotion/event/__init__.py,sha256=mgATR6vPHACNQ-0zH5fi7NdzeTCDV1CZyaWPmtUusi8,115
52
54
  pymammotion/event/event.py,sha256=Z8WYxv_-5khEqKjL1w4c_Et24G1Kdm8QFuIBylD3h3U,3021
55
+ pymammotion/homeassistant/__init__.py,sha256=j0aQZKWR41pCDR3g1y2p_zfp033pESECcqXiefRg1DQ,107
56
+ pymammotion/homeassistant/mower_api.py,sha256=bQPCAre0tD3dO4vr07vfKOENmnA8Fv0NVMMq_fkt0ik,19207
57
+ pymammotion/homeassistant/rtk_api.py,sha256=YyTF_14cWvvT31H-LYD715W82KsWfkV1nwXsJcHfQ7I,2445
53
58
  pymammotion/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- pymammotion/http/_init_.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
59
  pymammotion/http/encryption.py,sha256=lzXu3WwBdQlzjXxWnlJuRgkCrKdPbxx5drhMitVKIEk,8287
56
- pymammotion/http/http.py,sha256=a-EGTagL2wAdTYbDpQSoRciCdGoWky6Qbrl2U5XOXVg,13157
60
+ pymammotion/http/http.py,sha256=kFHvHV73zeTaRvdi-GbWD59YdXrszPTQI24I7EljDT4,29372
57
61
  pymammotion/http/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
62
  pymammotion/http/model/camera_stream.py,sha256=ilxQNny_w9Frwt-m8kbHinvyjDv4Bx8C2swfZ2lTEDE,600
59
- pymammotion/http/model/http.py,sha256=VDBmi9nyY5Y2ns_HYvKIyzbkKRxhZ5elpq0lWXWzbGw,4123
60
- pymammotion/http/model/response_factory.py,sha256=f5_ZR0-4sLOU-q28BVy5sQOReSoND2A8UvpOOwnwrzA,1936
63
+ pymammotion/http/model/http.py,sha256=PymW658jcAxYNmO3l3NBXMATc8WK_lZuZfj_9seMbBQ,6433
64
+ pymammotion/http/model/response_factory.py,sha256=OoS7_f2yh8TUecTKlQhf6bFKdsihn9b7k1cgoyaw7XY,2183
61
65
  pymammotion/http/model/rtk.py,sha256=pR2mi6_Y8oTPlqDXWLk7oaUqmcgcrBQ0f3MJdC0_CUg,491
62
66
  pymammotion/mammotion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
67
  pymammotion/mammotion/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
68
  pymammotion/mammotion/commands/abstract_message.py,sha256=M4qL-Yw5g3fTgS9jB9LUSgJSAqpUf7MME-2mfv471Sk,808
65
- pymammotion/mammotion/commands/mammotion_command.py,sha256=AMOx6nEbPa0HijbENomPLLuJummS1q-23BzgetBAuOI,2991
69
+ pymammotion/mammotion/commands/mammotion_command.py,sha256=wX1bPtlPbYZfAw_TOLkVk5QCTZbQQXNIswQg8bfmcpI,3647
66
70
  pymammotion/mammotion/commands/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
71
  pymammotion/mammotion/commands/messages/basestation.py,sha256=a1LEF4C25ynILeQLx-FOOU4d-N_vMkXSh_etojJjIDM,1442
68
72
  pymammotion/mammotion/commands/messages/driver.py,sha256=tJUM1WhlWFs92PbZW5QSG-TMo6nemAUkcUDzI_6gETU,4695
69
73
  pymammotion/mammotion/commands/messages/media.py,sha256=KJyMzSZkwQrHWjAWfAI88Y7-jmfN3-WYtY193KaomT4,2930
70
- pymammotion/mammotion/commands/messages/navigation.py,sha256=yI-B5HHGuZJXn9iYrxhYZ5BArde6wB_j9bUc5IcSIJE,23261
74
+ pymammotion/mammotion/commands/messages/navigation.py,sha256=iirpqbbLqGWafwK5AB_xXyUvytZ-sAxrTYEqXI14Flg,23424
71
75
  pymammotion/mammotion/commands/messages/network.py,sha256=7K6aqt29ymTSUG0iEv4kIRD0Dv6rfHNctE00UvuMpG4,7264
72
76
  pymammotion/mammotion/commands/messages/ota.py,sha256=Nk3Tlp6n7hkbkuy355BlqbozHIHzsYnrH2cDO8QGaLk,1446
73
- pymammotion/mammotion/commands/messages/system.py,sha256=620kzRgX_ee9ATRgxQ1fwog4hN_-ijGNxGUH-wwlIIU,13816
77
+ pymammotion/mammotion/commands/messages/system.py,sha256=1Xchdx7Y0-kbrM-knSEUhwELu9PyF7DjtsCFt7_BCXw,13343
74
78
  pymammotion/mammotion/commands/messages/video.py,sha256=5D5Azt6Q63K-OeC2eSPmmrGgFLmGIi21jPuESCYVgnE,1296
75
79
  pymammotion/mammotion/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
80
  pymammotion/mammotion/control/joystick.py,sha256=QfBVxM_gxpWsZAGO90whtgxCI2tIZ3TTad9wHIPsU9s,5640
77
- pymammotion/mammotion/devices/__init__.py,sha256=f2qQFPgLGmV85W2hSlMUh5BYuht9o_Ar_JEAAMD4fsE,102
78
- pymammotion/mammotion/devices/base.py,sha256=-AYurMM70CFxrtm-YelttYAWdOGta4p4Cxg_5eD5cXY,12051
79
- pymammotion/mammotion/devices/mammotion.py,sha256=uk0mM6JSOzr84qkf8lECvlmTLX0UEQDXyowSeHZydek,15801
80
- pymammotion/mammotion/devices/mammotion_bluetooth.py,sha256=lVqGice3fv-Xura10PuWUCMdtNXf84gtf3S1STw2hr4,19345
81
- pymammotion/mammotion/devices/mammotion_cloud.py,sha256=ligdszu1KsHe0b0ZyyIibN_uXpxoSNp7ytNmsumidHY,16489
82
- pymammotion/mqtt/__init__.py,sha256=Ocs5e-HLJvTuDpVXyECEsWIvwsUaxzj7lZ9mSYutNDY,105
81
+ pymammotion/mammotion/devices/__init__.py,sha256=YYphpxf0zr1Xc_dOBKsCzcO5zSwlewuhZNjAbmy6cHI,1012
82
+ pymammotion/mammotion/devices/base.py,sha256=MLLup0ZQI1GvyEF980BTtIeuayRZJijR1kvk77U1DS0,6518
83
+ pymammotion/mammotion/devices/mammotion.py,sha256=bI86oDE3wRAaq01xLTxDqCwdlle3oAHWJy1xfQvIl58,23827
84
+ pymammotion/mammotion/devices/mammotion_bluetooth.py,sha256=bwl1wphx2ev3iuDBTFTJbeujtll0L2ZBYDRzTcKBZes,19203
85
+ pymammotion/mammotion/devices/mammotion_cloud.py,sha256=8MosSefZtymgHhKxkp7nSHq7b5D6sNPobxoKYVMBy-I,15139
86
+ pymammotion/mammotion/devices/mammotion_mower_ble.py,sha256=GLc-f9TFhpGp2OYnVestzFqPSyGBMHX2YmrAnnmYu0I,1947
87
+ pymammotion/mammotion/devices/mammotion_mower_cloud.py,sha256=JwCQICv8S31c1ll23JIWFFJEwzbTss182MvE4ZiQxWs,1877
88
+ pymammotion/mammotion/devices/mower_device.py,sha256=VUgoJYlMKMOuy9j6MzxDmOIe6y7ziG-O-gUdDQPhkUM,5627
89
+ pymammotion/mammotion/devices/mower_manager.py,sha256=m2U90ZlNgSmdPAh8BtKtyMVt5ZTBpfxNs5RT_lsUTls,4280
90
+ pymammotion/mammotion/devices/rtk_ble.py,sha256=egZo4VJYS1_9r7e8f8FA21tD-bVthc-YgJbTtf0cNSI,3601
91
+ pymammotion/mammotion/devices/rtk_cloud.py,sha256=gFzcnlSyWnyFLTYR-WOLpjIQD8Y1k844ZTkd-gdyIIk,4816
92
+ pymammotion/mammotion/devices/rtk_device.py,sha256=8wUCPqS6Xkox7sFj8AaXlVbzh67X9HarqldddBoWqBE,1917
93
+ pymammotion/mammotion/devices/rtk_manager.py,sha256=m963cKvfx2ThjYJpKb5_KrjqUPpvxK-DLVoF7TNXyP4,4392
94
+ pymammotion/mammotion/devices/managers/managers.py,sha256=d2z7oo2kMCsZ_YHSOBO9LazMSQxov0NNbr4EzJtxlYs,2495
95
+ pymammotion/mqtt/__init__.py,sha256=9nhy9GS8EbzOAPOrXHBTd_olePq8mctIkwMruDDSeWw,155
96
+ pymammotion/mqtt/aliyun_mqtt.py,sha256=CmGsxHfCYkhE5mJFPyV7NXcJs7srvpQo_6PVjDyK3Nk,10144
97
+ pymammotion/mqtt/mammotion_future.py,sha256=_OWqKOlUGl2yT1xOsXFQYpGd-1zQ63OxqXgy7KRQgYc,710
98
+ pymammotion/mqtt/mammotion_mqtt.py,sha256=MUkwx4kaofrdppqMRUCzDjincIqi3OGo3g072ALpvDE,8765
99
+ pymammotion/mqtt/mqtt_models.py,sha256=3JXP9Nals-3f27pYUqxD9WrfQHf5tpnal1j4R6vr-CM,1760
83
100
  pymammotion/mqtt/linkkit/__init__.py,sha256=ENgc3ynd2kd9gMQR3-kgmCu6Ed9Y6XCIzU0zFReUlkk,80
84
101
  pymammotion/mqtt/linkkit/h2client.py,sha256=w9Nvi_nY4CLD_fw-pHtYChwQf7e2TiAGeqkY_sF4cf0,19659
85
102
  pymammotion/mqtt/linkkit/linkkit.py,sha256=SGWny2_LKa8qg8RD0Bgd3a4S_fMqpYxJ7a9eFRvgcN0,132923
86
- pymammotion/mqtt/mammotion_future.py,sha256=_OWqKOlUGl2yT1xOsXFQYpGd-1zQ63OxqXgy7KRQgYc,710
87
- pymammotion/mqtt/mammotion_mqtt.py,sha256=BmMiSkEChWpurR-U9tTVKoowrafdcB-9_4tSuSqUlP0,10050
88
- pymammotion/proto/__init__.py,sha256=0FsseWaJMvFIE05zH03iVlLn2E0Y7nsWRfs4u_JCUcg,151191
103
+ pymammotion/proto/__init__.py,sha256=COJw6Gq52RGTIqyWZNz_emMIg4nC2lQ9aDxq1xEtQP8,151189
89
104
  pymammotion/proto/basestation.proto,sha256=YiSsDmT0DY_ep6DHay13SbhxGMhentYt0BmJrVQrwLQ,1198
90
105
  pymammotion/proto/basestation_pb2.py,sha256=suenbpMz9JZCXdGJGdiPaapppRz9Cf4IDzAXUfdIG3w,3083
91
106
  pymammotion/proto/basestation_pb2.pyi,sha256=lGcTPlGaLdHEQ1A39YITbMG_vs1cVaqHAg5TsPvzexc,4652
@@ -104,33 +119,32 @@ pymammotion/proto/luba_mul_pb2.pyi,sha256=KsTOSGRTvcO1qO7wxuu827zRT7Eb7xnUN-KRd7
104
119
  pymammotion/proto/mctrl_driver.proto,sha256=35U29NukN3ZT4davrrwOWtszmMX8R_8D39sWVMgixnY,2181
105
120
  pymammotion/proto/mctrl_driver_pb2.py,sha256=gDk7woW1L3yyNx_Yufxa0_cjJnDIMW7EMqXBwhNsXKk,5512
106
121
  pymammotion/proto/mctrl_driver_pb2.pyi,sha256=yVKNGzAWaQTFI1DQ6ytnHKofUmGqDmLqmNq_9TXofMQ,8494
107
- pymammotion/proto/mctrl_nav.proto,sha256=sPAVCyIn5MZiQbp0wFk5KKJacSRUOy3zEiExa4ebikQ,12806
108
- pymammotion/proto/mctrl_nav_pb2.py,sha256=uw3WWd6klSQ0F8iK_BQX_jfJybfDuQVbJH9vnHiWh7c,26271
109
- pymammotion/proto/mctrl_nav_pb2.pyi,sha256=1e2KkCep7EGgIsf_G2aXRdBQarh54j_ABvoG4XGfIK0,55825
122
+ pymammotion/proto/mctrl_nav.proto,sha256=qIhKkmP5yLCc85LmFq6OCC2cE_-S_CYoV0fHHWE4ohc,12804
123
+ pymammotion/proto/mctrl_nav_pb2.py,sha256=h7orPnijActaK0WAZF5LNeB3EDI7yqEPL_hWzmnEWVU,26271
124
+ pymammotion/proto/mctrl_nav_pb2.pyi,sha256=3u3yZ-H5TdKWAJh4bjuGNKXALVGotyfzKekK-eQZ5Xk,55825
110
125
  pymammotion/proto/mctrl_ota.proto,sha256=feIooPeE-FgkLpjd0pWp6maAMaJOUIjIlbXk_FHDrD4,1337
111
126
  pymammotion/proto/mctrl_ota_pb2.py,sha256=Fs5IQbGBZSvLqxertw1JRaYOGd2EhNI41lgSHkrGWPs,3762
112
127
  pymammotion/proto/mctrl_ota_pb2.pyi,sha256=sXX19_q1SfLKMKzdPnmcy6eIslt1NASlD0hlMNNYCQY,5913
113
128
  pymammotion/proto/mctrl_pept.proto,sha256=E-kp3dLPTbnrnRz4x1hFHfIbv4IYs2lHL8Nhs73qla4,807
114
129
  pymammotion/proto/mctrl_pept_pb2.py,sha256=7rM3ZSn2XyPD0k2FUhL0zDrHmyC15ZUJgMXqx0biptg,2436
115
130
  pymammotion/proto/mctrl_pept_pb2.pyi,sha256=rYmmllXOmHqz7PRn7IWGSkGjKmJRHI4HNA7ZkYipK_g,3308
116
- pymammotion/proto/mctrl_sys.proto,sha256=A6qEkLRoMKdC-Zb789E1kmep6lXa3H0KoHeVLXb9DkI,15939
131
+ pymammotion/proto/mctrl_sys.proto,sha256=XdmmJTkVmy7M93--tQIhM7w2B0YZdsTjSXqmD6kbd1g,15938
117
132
  pymammotion/proto/mctrl_sys_pb2.py,sha256=HujvgOTzE4PKct_-fdaXXwnt5E_HqLMH4WOEQ0zDZO8,33160
118
133
  pymammotion/proto/mctrl_sys_pb2.pyi,sha256=N1sJJMx7qWsj1kKYoQJ4JEZanZetLZ5JThs1IXCChUE,61557
119
134
  pymammotion/proto/message_pool.py,sha256=4-cRhhiM6bmfpUJZ8qxc8LEyqHBHpLCcotjbyZxl7JM,71
120
135
  pymammotion/proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
- pymammotion/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- pymammotion/utility/constant/__init__.py,sha256=tcY0LDeD-qDDHx2LKt55KOyv9ZI0UfCNM6fknLCmm8s,110
123
- pymammotion/utility/constant/device_constant.py,sha256=MJE1DEOg86oWNSXYGx3xxJ542KEuSJNZ0VJLN4eHbUg,8237
124
136
  pymammotion/utility/conversions.py,sha256=v3YICy0zZwwBBzrUZgabI7GRfiDBnkiAX2qdtk3NxOY,89
125
- pymammotion/utility/datatype_converter.py,sha256=SPM_HuaaD_XOawlqEnA8qlRRZXGba3WjA8kGOZgeBlQ,4284
137
+ pymammotion/utility/datatype_converter.py,sha256=A9qHBTbnq2PniAyBKxx3Qrk08aF5SIXGK1lDIY1siPU,4424
126
138
  pymammotion/utility/device_config.py,sha256=65Jl73-dQDs4yMXwYXZW_bsgSvnwpFBZDu8OQPEIgx8,27877
127
- pymammotion/utility/device_type.py,sha256=InpsJFw2mXpX_yoXYKC4eoR42p2IygmawJlmEH6mM1g,13366
139
+ pymammotion/utility/device_type.py,sha256=RdxBdkqzd03Q0MCCkbfqLj_CKrks8nNV4ji50UvJbH8,17024
128
140
  pymammotion/utility/map.py,sha256=GYscVMg2cX3IPlNpCBNHDW0S55yS1WGRf1iHnNZ7TfQ,2227
129
141
  pymammotion/utility/movement.py,sha256=N75oAoAgFydqoaOedYIxGUHmuTCtPzAOtb-d_29tpfI,615
130
- pymammotion/utility/mur_mur_hash.py,sha256=xEfOZVbqRawJj66eLgtnZ85OauDR47oIPr29OHelzPI,4468
142
+ pymammotion/utility/mur_mur_hash.py,sha256=nurSJKhLVvysNjXy9X4JYsEVOwEc-dElp3Oo0_ZWoSA,5851
131
143
  pymammotion/utility/periodic.py,sha256=MbeSb9cfhxzYmdT_RiE0dZe3H9IfbQW_zSqhmSX2RUc,3321
132
144
  pymammotion/utility/rocker_util.py,sha256=6tX7sS87qoQC_tsxbx3NLL-HgS08wtzXiZkhDiz7uo0,7179
133
- pymammotion-0.5.27.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
134
- pymammotion-0.5.27.dist-info/METADATA,sha256=--BT0tjha-LT_KPXu4eLFQygqGSUdMJT7vJTORZgx_s,3872
135
- pymammotion-0.5.27.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
136
- pymammotion-0.5.27.dist-info/RECORD,,
145
+ pymammotion/utility/constant/__init__.py,sha256=tcY0LDeD-qDDHx2LKt55KOyv9ZI0UfCNM6fknLCmm8s,110
146
+ pymammotion/utility/constant/device_constant.py,sha256=MJE1DEOg86oWNSXYGx3xxJ542KEuSJNZ0VJLN4eHbUg,8237
147
+ pymammotion-0.5.44.dist-info/METADATA,sha256=j5hdf_HwYZX4m0Xonw8HbB4ni588m89hKvKPGFmijNw,3575
148
+ pymammotion-0.5.44.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
149
+ pymammotion-0.5.44.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
150
+ pymammotion-0.5.44.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
File without changes