pymammotion 0.5.69__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.
Files changed (154) hide show
  1. pymammotion/__init__.py +53 -0
  2. pymammotion/agora/__init__.py +0 -0
  3. pymammotion/agora/agora_api.py +755 -0
  4. pymammotion/agora/agora_rtc_capabilities.py +748 -0
  5. pymammotion/agora/agora_websockets.py +1175 -0
  6. pymammotion/aliyun/__init__.py +1 -0
  7. pymammotion/aliyun/client.py +235 -0
  8. pymammotion/aliyun/cloud_gateway.py +982 -0
  9. pymammotion/aliyun/model/aep_response.py +21 -0
  10. pymammotion/aliyun/model/connect_response.py +51 -0
  11. pymammotion/aliyun/model/dev_by_account_response.py +195 -0
  12. pymammotion/aliyun/model/login_by_oauth_response.py +64 -0
  13. pymammotion/aliyun/model/regions_response.py +29 -0
  14. pymammotion/aliyun/model/session_by_authcode_response.py +19 -0
  15. pymammotion/aliyun/model/thing_response.py +12 -0
  16. pymammotion/aliyun/regions.py +62 -0
  17. pymammotion/aliyun/tea/core.py +297 -0
  18. pymammotion/aliyun/tmp_constant.py +171 -0
  19. pymammotion/bluetooth/__init__.py +1 -0
  20. pymammotion/bluetooth/ble.py +62 -0
  21. pymammotion/bluetooth/ble_message.py +676 -0
  22. pymammotion/bluetooth/const.py +27 -0
  23. pymammotion/bluetooth/data/__init__.py +0 -0
  24. pymammotion/bluetooth/data/convert.py +25 -0
  25. pymammotion/bluetooth/data/framectrldata.py +40 -0
  26. pymammotion/bluetooth/data/notifydata.py +62 -0
  27. pymammotion/bluetooth/model/__init__.py +0 -0
  28. pymammotion/bluetooth/model/atomic_integer.py +54 -0
  29. pymammotion/const.py +13 -0
  30. pymammotion/data/__init__.py +0 -0
  31. pymammotion/data/model/__init__.py +8 -0
  32. pymammotion/data/model/account.py +8 -0
  33. pymammotion/data/model/device.py +192 -0
  34. pymammotion/data/model/device_config.py +72 -0
  35. pymammotion/data/model/device_info.py +60 -0
  36. pymammotion/data/model/device_limits.py +49 -0
  37. pymammotion/data/model/enums.py +77 -0
  38. pymammotion/data/model/errors.py +12 -0
  39. pymammotion/data/model/events.py +14 -0
  40. pymammotion/data/model/generate_geojson.py +565 -0
  41. pymammotion/data/model/generate_route_information.py +26 -0
  42. pymammotion/data/model/hash_list.py +475 -0
  43. pymammotion/data/model/location.py +36 -0
  44. pymammotion/data/model/mowing_modes.py +77 -0
  45. pymammotion/data/model/rapid_state.py +45 -0
  46. pymammotion/data/model/raw_data.py +215 -0
  47. pymammotion/data/model/region_data.py +102 -0
  48. pymammotion/data/model/report_info.py +182 -0
  49. pymammotion/data/model/work.py +27 -0
  50. pymammotion/data/mower_state_manager.py +369 -0
  51. pymammotion/data/mqtt/__init__.py +1 -0
  52. pymammotion/data/mqtt/event.py +227 -0
  53. pymammotion/data/mqtt/mammotion_properties.py +276 -0
  54. pymammotion/data/mqtt/properties.py +203 -0
  55. pymammotion/data/mqtt/status.py +57 -0
  56. pymammotion/event/__init__.py +6 -0
  57. pymammotion/event/event.py +96 -0
  58. pymammotion/homeassistant/__init__.py +3 -0
  59. pymammotion/homeassistant/mower_api.py +514 -0
  60. pymammotion/homeassistant/rtk_api.py +54 -0
  61. pymammotion/http/__init__.py +0 -0
  62. pymammotion/http/encryption.py +220 -0
  63. pymammotion/http/http.py +673 -0
  64. pymammotion/http/model/__init__.py +0 -0
  65. pymammotion/http/model/camera_stream.py +31 -0
  66. pymammotion/http/model/http.py +249 -0
  67. pymammotion/http/model/response_factory.py +61 -0
  68. pymammotion/http/model/rtk.py +16 -0
  69. pymammotion/mammotion/__init__.py +0 -0
  70. pymammotion/mammotion/commands/__init__.py +0 -0
  71. pymammotion/mammotion/commands/abstract_message.py +24 -0
  72. pymammotion/mammotion/commands/mammotion_command.py +81 -0
  73. pymammotion/mammotion/commands/messages/__init__.py +0 -0
  74. pymammotion/mammotion/commands/messages/basestation.py +43 -0
  75. pymammotion/mammotion/commands/messages/driver.py +122 -0
  76. pymammotion/mammotion/commands/messages/media.py +87 -0
  77. pymammotion/mammotion/commands/messages/navigation.py +564 -0
  78. pymammotion/mammotion/commands/messages/network.py +205 -0
  79. pymammotion/mammotion/commands/messages/ota.py +38 -0
  80. pymammotion/mammotion/commands/messages/system.py +330 -0
  81. pymammotion/mammotion/commands/messages/video.py +33 -0
  82. pymammotion/mammotion/control/__init__.py +0 -0
  83. pymammotion/mammotion/control/joystick.py +145 -0
  84. pymammotion/mammotion/devices/__init__.py +29 -0
  85. pymammotion/mammotion/devices/base.py +163 -0
  86. pymammotion/mammotion/devices/mammotion.py +571 -0
  87. pymammotion/mammotion/devices/mammotion_bluetooth.py +496 -0
  88. pymammotion/mammotion/devices/mammotion_cloud.py +355 -0
  89. pymammotion/mammotion/devices/mammotion_mower_ble.py +48 -0
  90. pymammotion/mammotion/devices/mammotion_mower_cloud.py +39 -0
  91. pymammotion/mammotion/devices/managers/managers.py +81 -0
  92. pymammotion/mammotion/devices/mower_device.py +120 -0
  93. pymammotion/mammotion/devices/mower_manager.py +107 -0
  94. pymammotion/mammotion/devices/rtk_ble.py +89 -0
  95. pymammotion/mammotion/devices/rtk_cloud.py +115 -0
  96. pymammotion/mammotion/devices/rtk_device.py +50 -0
  97. pymammotion/mammotion/devices/rtk_manager.py +125 -0
  98. pymammotion/mqtt/__init__.py +6 -0
  99. pymammotion/mqtt/aliyun_mqtt.py +237 -0
  100. pymammotion/mqtt/linkkit/__init__.py +5 -0
  101. pymammotion/mqtt/linkkit/h2client.py +585 -0
  102. pymammotion/mqtt/linkkit/linkkit.py +3025 -0
  103. pymammotion/mqtt/mammotion_future.py +26 -0
  104. pymammotion/mqtt/mammotion_mqtt.py +214 -0
  105. pymammotion/mqtt/mqtt_models.py +66 -0
  106. pymammotion/proto/__init__.py +4841 -0
  107. pymammotion/proto/basestation.proto +51 -0
  108. pymammotion/proto/basestation_pb2.py +35 -0
  109. pymammotion/proto/basestation_pb2.pyi +89 -0
  110. pymammotion/proto/common.proto +7 -0
  111. pymammotion/proto/common_pb2.py +25 -0
  112. pymammotion/proto/common_pb2.pyi +13 -0
  113. pymammotion/proto/dev_net.proto +321 -0
  114. pymammotion/proto/dev_net_pb2.py +111 -0
  115. pymammotion/proto/dev_net_pb2.pyi +515 -0
  116. pymammotion/proto/luba_msg.proto +76 -0
  117. pymammotion/proto/luba_msg_pb2.py +41 -0
  118. pymammotion/proto/luba_msg_pb2.pyi +97 -0
  119. pymammotion/proto/luba_mul.proto +129 -0
  120. pymammotion/proto/luba_mul_pb2.py +61 -0
  121. pymammotion/proto/luba_mul_pb2.pyi +178 -0
  122. pymammotion/proto/mctrl_driver.proto +107 -0
  123. pymammotion/proto/mctrl_driver_pb2.py +57 -0
  124. pymammotion/proto/mctrl_driver_pb2.pyi +167 -0
  125. pymammotion/proto/mctrl_nav.proto +591 -0
  126. pymammotion/proto/mctrl_nav_pb2.py +136 -0
  127. pymammotion/proto/mctrl_nav_pb2.pyi +1067 -0
  128. pymammotion/proto/mctrl_ota.proto +80 -0
  129. pymammotion/proto/mctrl_ota_pb2.py +45 -0
  130. pymammotion/proto/mctrl_ota_pb2.pyi +128 -0
  131. pymammotion/proto/mctrl_pept.proto +34 -0
  132. pymammotion/proto/mctrl_pept_pb2.py +33 -0
  133. pymammotion/proto/mctrl_pept_pb2.pyi +58 -0
  134. pymammotion/proto/mctrl_sys.proto +741 -0
  135. pymammotion/proto/mctrl_sys_pb2.py +206 -0
  136. pymammotion/proto/mctrl_sys_pb2.pyi +1213 -0
  137. pymammotion/proto/message_pool.py +3 -0
  138. pymammotion/proto/py.typed +0 -0
  139. pymammotion/py.typed +0 -0
  140. pymammotion/utility/constant/__init__.py +3 -0
  141. pymammotion/utility/constant/device_constant.py +315 -0
  142. pymammotion/utility/conversions.py +5 -0
  143. pymammotion/utility/datatype_converter.py +124 -0
  144. pymammotion/utility/device_config.py +755 -0
  145. pymammotion/utility/device_type.py +489 -0
  146. pymammotion/utility/map.py +259 -0
  147. pymammotion/utility/movement.py +18 -0
  148. pymammotion/utility/mur_mur_hash.py +159 -0
  149. pymammotion/utility/periodic.py +106 -0
  150. pymammotion/utility/rocker_util.py +194 -0
  151. pymammotion-0.5.69.dist-info/METADATA +93 -0
  152. pymammotion-0.5.69.dist-info/RECORD +154 -0
  153. pymammotion-0.5.69.dist-info/WHEEL +4 -0
  154. pymammotion-0.5.69.dist-info/licenses/LICENSE +674 -0
@@ -0,0 +1,194 @@
1
+ import copy
2
+ import math
3
+
4
+
5
+ class RockerControlUtil:
6
+ """generated source for class RockerControlUtil"""
7
+
8
+ instance_ = None
9
+ list_ = []
10
+ thresholdValue_1 = 30
11
+ thresholdValue_2 = 7
12
+ thresholdValue_3 = 15
13
+
14
+ def __init__(self) -> None:
15
+ """Generated source for method __init__"""
16
+
17
+ @classmethod
18
+ def getInstance(cls):
19
+ """Return the instance of RockerControlUtil if it exists, otherwise create
20
+ a new instance.
21
+
22
+ This method checks if an instance of RockerControlUtil exists. If not,
23
+ it creates a new instance and returns it.
24
+
25
+ Args:
26
+ cls (class): The class for which the instance is being retrieved.
27
+
28
+ Returns:
29
+ RockerControlUtil: An instance of RockerControlUtil.
30
+
31
+ """
32
+ if cls.instance_ == None:
33
+ cls.instance_ = RockerControlUtil()
34
+ return cls.instance_
35
+
36
+ def transfrom(self, f, f2):
37
+ """Perform a transformation based on the input angles and distance.
38
+
39
+ This method calculates the transformation based on the input angle 'f'
40
+ and distance 'f2'. It determines the appropriate radians based on the
41
+ angle and performs the transformation.
42
+
43
+ Args:
44
+ f (float): The angle in degrees for transformation.
45
+ f2 (float): The distance for transformation.
46
+
47
+ Returns:
48
+ list: A list containing the transformed coordinates.
49
+
50
+ """
51
+ radians = 0.0
52
+ self.list_.clear()
53
+ i = self.thresholdValue_2
54
+ if f > 90 - i and f < i + 90:
55
+ radians = math.radians(90.0)
56
+ elif f > 270 - i and f < i + 270:
57
+ radians = math.radians(270.0)
58
+ elif f > 180 - i and f < i + 180:
59
+ radians = math.radians(180.0)
60
+ elif f < i and f > 360 - i:
61
+ radians = math.radians(0.0)
62
+ else:
63
+ if f > i:
64
+ i2 = self.thresholdValue_2
65
+ if f < 90 - i2:
66
+ radians = math.radians(90 - i2)
67
+
68
+ i3 = self.thresholdValue_1
69
+ if f > i3 + 90 and f < 180 - i:
70
+ radians = math.radians(i3 + 90)
71
+ elif f > i + 180 and f < 270 - i3:
72
+ radians = math.radians(270 - i3)
73
+ elif f > i3 + 270 and f < 360 - i:
74
+ radians = math.radians(i3 + 270)
75
+ else:
76
+ radians = math.radians(f)
77
+ d = f2
78
+ self.list_.append(int(math.sin(radians) * d))
79
+ self.list_.append(int(d * math.cos(radians)))
80
+ return copy.copy(self.list_)
81
+
82
+ def transfrom2(self, f, f2):
83
+ """Calculate the transformation of input angles to radians and perform
84
+ trigonometric calculations.
85
+
86
+ This method takes two input parameters, an angle 'f' and a value 'f2',
87
+ and calculates the corresponding radians based on the angle. It then
88
+ performs trigonometric calculations using the radians and 'f2' value to
89
+ generate a list of transformed values.
90
+
91
+ Args:
92
+ self: The instance of the class.
93
+ f (float): The input angle in degrees.
94
+ f2 (float): The input value for trigonometric calculations.
95
+
96
+ Returns:
97
+ list: A list containing the transformed values based on trigonometric
98
+ calculations.
99
+
100
+ """
101
+ radians = 0.0
102
+ self.list_.clear()
103
+ i = self.thresholdValue_2
104
+ if f > 90 - i and f < i + 90:
105
+ radians = math.radians(90.0)
106
+ elif f > 270 - i and f < i + 270:
107
+ radians = math.radians(270.0)
108
+ else:
109
+ i2 = self.thresholdValue_3
110
+ if f > 180 - i2 and f < i2 + 180:
111
+ radians = math.radians(0.0)
112
+ elif f < i2 or f > 360 - i2:
113
+ radians = math.radians(180.0)
114
+ else:
115
+ if f > i2:
116
+ i3 = self.thresholdValue_1
117
+ if f < 90 - i3:
118
+ radians = math.radians(i3 + 90)
119
+ i4 = self.thresholdValue_1
120
+ if f > i4 + 90 and f < 180 - i2:
121
+ radians = math.radians(90 - i4)
122
+ elif f > i2 + 180 and f < 270 - i4:
123
+ radians = math.radians(i4 + 270)
124
+ elif f > i4 + 270 and f < 360 - i2:
125
+ radians = math.radians(270 - i4)
126
+ elif f > 270 - i4 and f < 270 - i:
127
+ radians = math.radians((270.0 - f) + 270.0)
128
+ elif f > i + 270 and f < i4 + 270:
129
+ radians = math.radians(270.0 - (f - 270.0))
130
+ elif f > 90 - i4 and f < 90 - i:
131
+ radians = math.radians((90.0 - f) + 90.0)
132
+ elif f > i + 90 and f < i4 + 90:
133
+ radians = math.radians(90.0 - (f - 90.0))
134
+ else:
135
+ radians = math.radians(f)
136
+ d = f2
137
+ self.list_.append(int(math.sin(radians) * d))
138
+ self.list_.append(int(d * math.cos(radians)))
139
+ return copy.copy(self.list_)
140
+
141
+ def transfrom3(self, f, f2):
142
+ """Calculate the transformation of input angles to radians and perform
143
+ trigonometric calculations.
144
+
145
+ This method calculates the transformation of input angles to radians
146
+ based on certain threshold values. It then performs trigonometric
147
+ calculations using sine and cosine functions to determine the output
148
+ values.
149
+
150
+ Args:
151
+ self: The object instance.
152
+ f (float): The input angle in degrees.
153
+ f2 (float): The input value for trigonometric calculations.
154
+
155
+ Returns:
156
+ list: A list containing the calculated values based on trigonometric
157
+ functions.
158
+
159
+ """
160
+ radians = 0.0
161
+ self.list_.clear()
162
+ i = self.thresholdValue_2
163
+ if f > 90 - i and f < i + 90:
164
+ radians = math.radians(90.0)
165
+ elif f > 270 - i and f < i + 270:
166
+ radians = math.radians(270.0)
167
+ else:
168
+ i2 = self.thresholdValue_3
169
+ if f > 180 - i2 and f < i2 + 180:
170
+ radians = math.radians(180.0)
171
+ elif f < i2 or f > 360 - i2:
172
+ radians = math.radians(0.0)
173
+ else:
174
+ if f > i2:
175
+ i3 = self.thresholdValue_1
176
+ if f < 90 - i3:
177
+ radians = math.radians(90 - i3)
178
+ i4 = self.thresholdValue_1
179
+ if f > i4 + 90 and f < 180 - i2:
180
+ radians = math.radians(i4 + 90)
181
+ elif f > i2 + 180 and f < 270 - i4:
182
+ radians = math.radians(i4 + 270)
183
+ elif f > i4 + 270 and f < 360 - i2:
184
+ radians = math.radians(270 - i4)
185
+ elif f > 270 - i4 and f < 270 - i:
186
+ radians = math.radians((270.0 - f) + 270.0)
187
+ elif f > i + 270 and f < i4 + 270:
188
+ radians = math.radians(270.0 - (f - 270.0))
189
+ else:
190
+ radians = math.radians(f)
191
+ d = f2
192
+ self.list_.append(int(math.sin(radians) * d))
193
+ self.list_.append(int(d * math.cos(radians)))
194
+ return copy.copy(self.list_)
@@ -0,0 +1,93 @@
1
+ Metadata-Version: 2.4
2
+ Name: pymammotion
3
+ Version: 0.5.69
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: betterproto2>=0.9.1
13
+ Requires-Dist: bleak-retry-connector>=3.5.0
14
+ Requires-Dist: bleak>=0.21.0
15
+ Requires-Dist: crcmod~=1.7
16
+ Requires-Dist: cryptography>=43.0.1
17
+ Requires-Dist: mashumaro~=3.13
18
+ Requires-Dist: numpy>=1.26.0
19
+ Requires-Dist: orjson<4,>=3.9.15
20
+ Requires-Dist: paho-mqtt<3,>=2.1.0
21
+ Requires-Dist: protobuf>=4.23.1
22
+ Requires-Dist: pyjwt>=2.10.1
23
+ Requires-Dist: sdp-transform>=1.1.0
24
+ Requires-Dist: shapely>=2.1.2
25
+ Requires-Dist: websockets>=13.1
26
+ Description-Content-Type: text/markdown
27
+
28
+ # PyMammotion - Python API for Mammotion Mowers [![Discord](https://img.shields.io/discord/1247286396297678879)](https://discord.gg/vpZdWhJX8x)
29
+
30
+ [![SemVer 0.8.5][img_version]][url_version]
31
+ [![PyPI Releases][img_pypi]][url_pypi]
32
+ [![Supported Python Versions][img_pyversions]][url_pyversions]
33
+
34
+ [img_version]: https://img.shields.io/static/v1.svg?label=SemVer&message=0.4.0&color=blue
35
+ [url_version]: https://pypi.org/project/pymammotion/
36
+
37
+ [img_pypi]: https://img.shields.io/badge/PyPI-wheels-green.svg
38
+ [url_pypi]: https://pypi.org/project/pymammotion/#files
39
+
40
+ [img_pyversions]: https://img.shields.io/pypi/pyversions/pymammotion.svg
41
+ [url_pyversions]: https://pypi.python.org/pypi/pymammotion
42
+
43
+ 💬 [Join us on Discord](https://discord.gg/vpZdWhJX8x)
44
+
45
+ PyMammotion is a Python API for controlling and monitoring Mammotion robot mowers (Luba, Luba 2 & Yuka) via MQTT, Cloud, and Bluetooth.
46
+
47
+ ⚠️ **Please note:** This API is still under active development. You may encounter unfinished features or bugs. If you come across any issues, please open an issue on the GitHub repository. 🐛
48
+
49
+ ## Home Assistant Integration
50
+
51
+ This library is the foundation for the [Mammotion Home Assistant integration](https://github.com/mikey0000/Mammotion-HA). If you're looking to control your Mammotion mower through Home Assistant, check out the integration repository for installation and setup instructions.
52
+
53
+ ## Installation 🛠️
54
+
55
+ You can install PyMammotion using pip:
56
+
57
+ ```bash
58
+ pip install pymammotion
59
+ ```
60
+
61
+ ## Development 🔧
62
+
63
+ PyMammotion uses `betterproto` and `protoc` for generating protobuf models. To set up the development environment:
64
+
65
+ 1. Clone the repository
66
+ 2. poetry install --with=dev
67
+ 3. Profit
68
+
69
+ ## Contributing 🤝
70
+
71
+ Contributions are welcome! Please check the [issues](https://github.com/mikey0000/pymammotion/issues) for ways you can help improve PyMammotion.
72
+
73
+ ## Troubleshooting 🔍
74
+
75
+ If you encounter any issues:
76
+
77
+ - Check the [wiki](https://github.com/mikey0000/pymammotion/wiki) for known issues and solutions
78
+ - Ensure you're using the latest version of PyMammotion
79
+ - If the problem persists, please open an issue on GitHub
80
+
81
+ ## Credits 👥
82
+
83
+ [![Contributors](https://contrib.rocks/image?repo=mikey0000/pymammotion)](https://github.com/mikey0000/pymammotion/graphs/contributors)
84
+
85
+ ## License 📄
86
+
87
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
88
+
89
+
90
+ ## Trademark Notice
91
+
92
+ 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.
93
+
@@ -0,0 +1,154 @@
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
4
+ pymammotion/agora/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ pymammotion/agora/agora_api.py,sha256=Ef-Glk_RBZKkxifL9yMP5azvVBKTX4Iw60NEk3q6up8,24759
6
+ pymammotion/agora/agora_rtc_capabilities.py,sha256=H2pUFi66Ua8tF53xUQQI9fuMB6QEyNPWH7oglGjrZ9g,21150
7
+ pymammotion/agora/agora_websockets.py,sha256=VLzWrXM7f5tAQTrPGiDG2cNI6NQpQw885CmaPaAHCVo,47745
8
+ pymammotion/aliyun/__init__.py,sha256=T1lkX7TRYiL4nqYanG4l4MImV-SlavSbuooC-W-uUGw,29
9
+ pymammotion/aliyun/client.py,sha256=gS15-fAYn3nViwFY3zMlS_2T9mZokFLUyuHADaXH-O8,9777
10
+ pymammotion/aliyun/cloud_gateway.py,sha256=0GW2MQaQVmtVT1C50MOXHWB3bvIP8OS3J5UHmyMmopw,35718
11
+ pymammotion/aliyun/regions.py,sha256=ctlRGrmdE4-xgItl9slCANYOV502qVN5lkAU4lj92sk,2518
12
+ pymammotion/aliyun/tmp_constant.py,sha256=M4Hq_lrGB3LZdX6R2XohRPFoK1NDnNV-pTJwJcJ9838,6650
13
+ pymammotion/aliyun/model/aep_response.py,sha256=EY4uMTJ4F9rvbcXnAOc5YKi7q__9kIVgfDwfyr65Gk0,421
14
+ pymammotion/aliyun/model/connect_response.py,sha256=Yz-fEbDzgGPTo5Of2oAjmFkSv08T7ze80pQU4k-gKIU,824
15
+ pymammotion/aliyun/model/dev_by_account_response.py,sha256=PTkHRJQzEdqJRIGKEaU_4Q45O2KdupxRjZGR757xzvw,6788
16
+ pymammotion/aliyun/model/login_by_oauth_response.py,sha256=g7JnvEjoa3SplHd-UqCuK6x0qtODpHlDyJCHRz7tfDI,1228
17
+ pymammotion/aliyun/model/regions_response.py,sha256=HSnpPcgpjr6VNXBQHw__gn-xWCkQ-MZ-Tmus9_va9mI,635
18
+ pymammotion/aliyun/model/session_by_authcode_response.py,sha256=0owdNcGFIP7rsVqLIf9rT-iOtvWmKCt2AW0cUUXwFiQ,427
19
+ pymammotion/aliyun/model/thing_response.py,sha256=23gUpB8EX3jNICp-p4Gytxs4qAfzKVr8anUA9JCl4XM,273
20
+ pymammotion/aliyun/tea/core.py,sha256=4SjhRkbPMbw-uI0lQnCN0SBNAHAgVFrpHeaauuu6nZY,10200
21
+ pymammotion/bluetooth/__init__.py,sha256=LAl8jqZ1fPh-3mLmViNQsP3s814C1vsocYUa6oSaXt0,36
22
+ pymammotion/bluetooth/ble.py,sha256=XQWJBpSzeIawCrLTsVrq9LI6jmM_ALVTttUkosK2BRM,2480
23
+ pymammotion/bluetooth/ble_message.py,sha256=d9rGsPa8XKLpg3aBmngQp5BUQzIxASPjx1Aoj2G-Su8,18298
24
+ pymammotion/bluetooth/const.py,sha256=CCqyHsYbB0BAYjwdhXt_n6eWWxmhlUrAFjvVv57mbvE,1749
25
+ pymammotion/bluetooth/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ pymammotion/bluetooth/data/convert.py,sha256=6DMwvzVr9FWCoQFIKSI2poFXjISc_m6X59g8FlVO0-o,800
27
+ pymammotion/bluetooth/data/framectrldata.py,sha256=qxhGQsTGsfPx-CarEMLkgBn_RJ6I2-exmr9AX2U4pFg,995
28
+ pymammotion/bluetooth/data/notifydata.py,sha256=jeROpoFmaZfNTidkLLm5VYeFbeIgDSi8waJ0nVLRUTA,1995
29
+ pymammotion/bluetooth/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ pymammotion/bluetooth/model/atomic_integer.py,sha256=jtSqeqd6It3TvzZN7TJyYHQNRuItuw0Bg-cL0AUEBhY,1666
31
+ pymammotion/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ pymammotion/data/mower_state_manager.py,sha256=L9toRKylPlvEibFJGY_9pO8IjXrMlZ44c5HHHBCn_oI,16950
33
+ pymammotion/data/model/__init__.py,sha256=UVRbSXGOjYnWv30ZEvzT5QRpdVqAbyeToo-t0QBWyi4,292
34
+ pymammotion/data/model/account.py,sha256=vJM-KTf2q6eBfVC-UlNHBSmJvqHiCawZ40vnuhXhaz8,140
35
+ pymammotion/data/model/device.py,sha256=qQM7wCZrfg5iV5RZdvnMPcZS6CXLH2cTMg-sVqFbAWg,9090
36
+ pymammotion/data/model/device_config.py,sha256=cLfvO_xs8GhEQbhTZLOfhYK5OX4T337M9OZkyQ_GNWQ,2652
37
+ pymammotion/data/model/device_info.py,sha256=YRs-7kcnzS5qNeZTvLTNewv8RZ_Qx51pXrebSKYj7Ks,1411
38
+ pymammotion/data/model/device_limits.py,sha256=m8HdxD-RaAkPm7jHYb9GLxMEH9IfzBPz0ZypmsLnId4,1946
39
+ pymammotion/data/model/enums.py,sha256=LVLP-9ypW0NxwyTeizxPVFNX3INWGfhSR9obM_vl0-M,1782
40
+ pymammotion/data/model/errors.py,sha256=lBHq2cE8P5fc6Q4JXgrkJXzFKTWgxsoPOyMlTaJWbWk,396
41
+ pymammotion/data/model/events.py,sha256=fa8xG6kB2NgZKzpd-T9TKRcVEme_fdB5VnHuF2Qa62s,392
42
+ pymammotion/data/model/generate_geojson.py,sha256=p6CqOda_iHJdXX8pU34hAbKC9K8Z4iT6oSixaDptWPA,19853
43
+ pymammotion/data/model/generate_route_information.py,sha256=-_c8pk10zwRh-O2vJ0i3DDCOQbv9CRJ7YNWpfsIpajI,807
44
+ pymammotion/data/model/hash_list.py,sha256=cAhHt9tqi3wf8jA5rreUII5B7dxRoJ9tijaGHLfkd8M,16204
45
+ pymammotion/data/model/location.py,sha256=BirPRZDjZEi_pEg2RquCOfCRR8cV4THuWyHoJM8gAAg,919
46
+ pymammotion/data/model/mowing_modes.py,sha256=4rMn1H8w2iU2aBwpmAhPh_sT81yqrocrWWUIaU7DCIc,1171
47
+ pymammotion/data/model/rapid_state.py,sha256=mIdhAG_LZXpVcybxqTLgLXkNOmVmDTn04B9PGIDA8Ls,1251
48
+ pymammotion/data/model/raw_data.py,sha256=x2xuqVC8CQuV3ui3QK4G5EqRET9EsNljHLHR11ByYgo,6471
49
+ pymammotion/data/model/region_data.py,sha256=OP4hXYX2U1gNxU7VFsHQfQbE1Bze_nvVFQ0ZT7XZJsg,2909
50
+ pymammotion/data/model/report_info.py,sha256=mkMhPpaOtVxGeJ4Bv2PL5idAEr0kHlkRQoqpOAxxJZ8,5033
51
+ pymammotion/data/model/work.py,sha256=AfKMItFqnRtAlVHzKCfYY-BQy-WFDYZBzdj-9Yc03bo,655
52
+ pymammotion/data/mqtt/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
53
+ pymammotion/data/mqtt/event.py,sha256=IdaFnXl0o00d24xQFC3YaxNwT63z3VWNqR-fOvCTvnQ,7032
54
+ pymammotion/data/mqtt/mammotion_properties.py,sha256=ZV8uSkpK1Xhxp8d_ZrYrh2J4mSGChWrYOHuketJq6po,9064
55
+ pymammotion/data/mqtt/properties.py,sha256=Dqhp2z-XO1_5wB9qfboWcpj1O47X9mmCWo8l1-fws98,5273
56
+ pymammotion/data/mqtt/status.py,sha256=xG6krDz9tbADbU4ui3Ay7K70hb9J3AJOpPtjMGEnyQ4,1765
57
+ pymammotion/event/__init__.py,sha256=mgATR6vPHACNQ-0zH5fi7NdzeTCDV1CZyaWPmtUusi8,115
58
+ pymammotion/event/event.py,sha256=P2yphZfJwMCefVE4h4hLTDPqCCVd63tSUo667gWF72c,3153
59
+ pymammotion/homeassistant/__init__.py,sha256=j0aQZKWR41pCDR3g1y2p_zfp033pESECcqXiefRg1DQ,107
60
+ pymammotion/homeassistant/mower_api.py,sha256=7SAq44fFwja6g1KwsGxAvjBdMjGIvH442qh4oFqa47A,22110
61
+ pymammotion/homeassistant/rtk_api.py,sha256=XVc6S0zN2dl2PWXGJ3bAFRba4AICofg1hYCUE84czTw,2516
62
+ pymammotion/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ pymammotion/http/encryption.py,sha256=lzXu3WwBdQlzjXxWnlJuRgkCrKdPbxx5drhMitVKIEk,8287
64
+ pymammotion/http/http.py,sha256=-uUI6YEB_ZAhzjjLN_NQ1YxIgaZQEzoeLf37DjMc-RQ,26938
65
+ pymammotion/http/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ pymammotion/http/model/camera_stream.py,sha256=ilxQNny_w9Frwt-m8kbHinvyjDv4Bx8C2swfZ2lTEDE,600
67
+ pymammotion/http/model/http.py,sha256=ETNxFByIohZSAEv_a4MG630tLyp9TSM4-e0gemA0eVI,6928
68
+ pymammotion/http/model/response_factory.py,sha256=OoS7_f2yh8TUecTKlQhf6bFKdsihn9b7k1cgoyaw7XY,2183
69
+ pymammotion/http/model/rtk.py,sha256=pR2mi6_Y8oTPlqDXWLk7oaUqmcgcrBQ0f3MJdC0_CUg,491
70
+ pymammotion/mammotion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ pymammotion/mammotion/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ pymammotion/mammotion/commands/abstract_message.py,sha256=M4qL-Yw5g3fTgS9jB9LUSgJSAqpUf7MME-2mfv471Sk,808
73
+ pymammotion/mammotion/commands/mammotion_command.py,sha256=wX1bPtlPbYZfAw_TOLkVk5QCTZbQQXNIswQg8bfmcpI,3647
74
+ pymammotion/mammotion/commands/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ pymammotion/mammotion/commands/messages/basestation.py,sha256=a1LEF4C25ynILeQLx-FOOU4d-N_vMkXSh_etojJjIDM,1442
76
+ pymammotion/mammotion/commands/messages/driver.py,sha256=tJUM1WhlWFs92PbZW5QSG-TMo6nemAUkcUDzI_6gETU,4695
77
+ pymammotion/mammotion/commands/messages/media.py,sha256=KJyMzSZkwQrHWjAWfAI88Y7-jmfN3-WYtY193KaomT4,2930
78
+ pymammotion/mammotion/commands/messages/navigation.py,sha256=sZ66aMObEVStNxGcDvtSSJmTAr45pTBzJ-WMpaHqwtM,26365
79
+ pymammotion/mammotion/commands/messages/network.py,sha256=7K6aqt29ymTSUG0iEv4kIRD0Dv6rfHNctE00UvuMpG4,7264
80
+ pymammotion/mammotion/commands/messages/ota.py,sha256=Nk3Tlp6n7hkbkuy355BlqbozHIHzsYnrH2cDO8QGaLk,1446
81
+ pymammotion/mammotion/commands/messages/system.py,sha256=1Xchdx7Y0-kbrM-knSEUhwELu9PyF7DjtsCFt7_BCXw,13343
82
+ pymammotion/mammotion/commands/messages/video.py,sha256=5D5Azt6Q63K-OeC2eSPmmrGgFLmGIi21jPuESCYVgnE,1296
83
+ pymammotion/mammotion/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ pymammotion/mammotion/control/joystick.py,sha256=QfBVxM_gxpWsZAGO90whtgxCI2tIZ3TTad9wHIPsU9s,5640
85
+ pymammotion/mammotion/devices/__init__.py,sha256=YYphpxf0zr1Xc_dOBKsCzcO5zSwlewuhZNjAbmy6cHI,1012
86
+ pymammotion/mammotion/devices/base.py,sha256=MLLup0ZQI1GvyEF980BTtIeuayRZJijR1kvk77U1DS0,6518
87
+ pymammotion/mammotion/devices/mammotion.py,sha256=0s6RqyQfW45Lz_oGN5AO_fbxj7IHO9_CVL192Q98fec,25418
88
+ pymammotion/mammotion/devices/mammotion_bluetooth.py,sha256=xSxqlsWJaXnozFUv3kV91FwWMg7IWAIos-MMjshvQEI,19184
89
+ pymammotion/mammotion/devices/mammotion_cloud.py,sha256=pBZYLFsFdKL5hBd6PADD7G63cXUtCzC06T19hePJsc0,15540
90
+ pymammotion/mammotion/devices/mammotion_mower_ble.py,sha256=v2fdj7qWhudMc7yy8LeQ7t8OZy3hI5cqiMYyR71ElDI,1900
91
+ pymammotion/mammotion/devices/mammotion_mower_cloud.py,sha256=JwCQICv8S31c1ll23JIWFFJEwzbTss182MvE4ZiQxWs,1877
92
+ pymammotion/mammotion/devices/mower_device.py,sha256=Oa--dxOdE8w3Z5tSni2OPPJ9jUPGFMXSsblCMneE3pw,5498
93
+ pymammotion/mammotion/devices/mower_manager.py,sha256=m2U90ZlNgSmdPAh8BtKtyMVt5ZTBpfxNs5RT_lsUTls,4280
94
+ pymammotion/mammotion/devices/rtk_ble.py,sha256=egZo4VJYS1_9r7e8f8FA21tD-bVthc-YgJbTtf0cNSI,3601
95
+ pymammotion/mammotion/devices/rtk_cloud.py,sha256=a6XPo6c5p-HhyeaNiPvrSoj4NEwkqgmC_8GUx2wf5DI,4851
96
+ pymammotion/mammotion/devices/rtk_device.py,sha256=8wUCPqS6Xkox7sFj8AaXlVbzh67X9HarqldddBoWqBE,1917
97
+ pymammotion/mammotion/devices/rtk_manager.py,sha256=3rm_adJUdga9E6Uo6If2jRLcfAXdkreMIWESlwY2yC8,4523
98
+ pymammotion/mammotion/devices/managers/managers.py,sha256=WD6ZZefMRi5sMrtaKwvc1hKqmAj3iDVbyP6htRIt1_0,2287
99
+ pymammotion/mqtt/__init__.py,sha256=9nhy9GS8EbzOAPOrXHBTd_olePq8mctIkwMruDDSeWw,155
100
+ pymammotion/mqtt/aliyun_mqtt.py,sha256=-15bFVOMfqssZffOWnHjK01hL37yn7UO-bJXfYGWWRY,10304
101
+ pymammotion/mqtt/mammotion_future.py,sha256=_OWqKOlUGl2yT1xOsXFQYpGd-1zQ63OxqXgy7KRQgYc,710
102
+ pymammotion/mqtt/mammotion_mqtt.py,sha256=MUkwx4kaofrdppqMRUCzDjincIqi3OGo3g072ALpvDE,8765
103
+ pymammotion/mqtt/mqtt_models.py,sha256=3JXP9Nals-3f27pYUqxD9WrfQHf5tpnal1j4R6vr-CM,1760
104
+ pymammotion/mqtt/linkkit/__init__.py,sha256=ENgc3ynd2kd9gMQR3-kgmCu6Ed9Y6XCIzU0zFReUlkk,80
105
+ pymammotion/mqtt/linkkit/h2client.py,sha256=w9Nvi_nY4CLD_fw-pHtYChwQf7e2TiAGeqkY_sF4cf0,19659
106
+ pymammotion/mqtt/linkkit/linkkit.py,sha256=77rbykSCxad-nrI4Ibs-J1227zhGHlCaZp9L-B2fFeg,133030
107
+ pymammotion/proto/__init__.py,sha256=tiNljAXKL-CkTfIgnJ0dzXhMTHuprHL9xThyNqoVR88,151190
108
+ pymammotion/proto/basestation.proto,sha256=YiSsDmT0DY_ep6DHay13SbhxGMhentYt0BmJrVQrwLQ,1198
109
+ pymammotion/proto/basestation_pb2.py,sha256=suenbpMz9JZCXdGJGdiPaapppRz9Cf4IDzAXUfdIG3w,3083
110
+ pymammotion/proto/basestation_pb2.pyi,sha256=lGcTPlGaLdHEQ1A39YITbMG_vs1cVaqHAg5TsPvzexc,4652
111
+ pymammotion/proto/common.proto,sha256=op8TCU1ppCMeP-izK2tXMoJXQyZXdgj1EgOKcd14A-A,81
112
+ pymammotion/proto/common_pb2.py,sha256=8OpJ04lLq8sAktY6CkP8TxVGar9x858sCf6FqLy7Rs4,1030
113
+ pymammotion/proto/common_pb2.pyi,sha256=skF2ydSIQIvoobjiCUjXVD-pTfJiAILbaUl6nkdh2SY,460
114
+ pymammotion/proto/dev_net.proto,sha256=EXZp8PV-_l6-Y6o55ANAudmgKP4YPc2oGNvXa1emD0I,6027
115
+ pymammotion/proto/dev_net_pb2.py,sha256=BHMv7iUEtBf6OnaZTwnshOdyY94zlLLr7f00xarTeYY,13906
116
+ pymammotion/proto/dev_net_pb2.pyi,sha256=LrAYzN1NcZ-uuINOzU-77WmGuUIw5pQMrlxlWv9funQ,23993
117
+ pymammotion/proto/luba_msg.proto,sha256=JHK9JqIIKEnamO7mI_67z4dj5yGXi5MGTtNA8I1QBNE,1695
118
+ pymammotion/proto/luba_msg_pb2.py,sha256=-dEGD7lCHeItY5D7dAZ391l7qqjWKafbx8tavl7qqgU,4564
119
+ pymammotion/proto/luba_msg_pb2.pyi,sha256=_pTiOzssrVbEty_yIjHpnQWbTNtFfKfqSC_wvpVT_bI,4325
120
+ pymammotion/proto/luba_mul.proto,sha256=jAJN9Sts0PfqmLYDdte5NIY36oOrMP0bbqat6RuigYI,2135
121
+ pymammotion/proto/luba_mul_pb2.py,sha256=MDZotppPPglKfTuBuWNjw6iHXbUVAH_PXPyl9VVF7sc,5724
122
+ pymammotion/proto/luba_mul_pb2.pyi,sha256=KsTOSGRTvcO1qO7wxuu827zRT7Eb7xnUN-KRd7dgm6s,7713
123
+ pymammotion/proto/mctrl_driver.proto,sha256=35U29NukN3ZT4davrrwOWtszmMX8R_8D39sWVMgixnY,2181
124
+ pymammotion/proto/mctrl_driver_pb2.py,sha256=gDk7woW1L3yyNx_Yufxa0_cjJnDIMW7EMqXBwhNsXKk,5512
125
+ pymammotion/proto/mctrl_driver_pb2.pyi,sha256=yVKNGzAWaQTFI1DQ6ytnHKofUmGqDmLqmNq_9TXofMQ,8494
126
+ pymammotion/proto/mctrl_nav.proto,sha256=qIhKkmP5yLCc85LmFq6OCC2cE_-S_CYoV0fHHWE4ohc,12804
127
+ pymammotion/proto/mctrl_nav_pb2.py,sha256=h7orPnijActaK0WAZF5LNeB3EDI7yqEPL_hWzmnEWVU,26271
128
+ pymammotion/proto/mctrl_nav_pb2.pyi,sha256=3u3yZ-H5TdKWAJh4bjuGNKXALVGotyfzKekK-eQZ5Xk,55825
129
+ pymammotion/proto/mctrl_ota.proto,sha256=feIooPeE-FgkLpjd0pWp6maAMaJOUIjIlbXk_FHDrD4,1337
130
+ pymammotion/proto/mctrl_ota_pb2.py,sha256=Fs5IQbGBZSvLqxertw1JRaYOGd2EhNI41lgSHkrGWPs,3762
131
+ pymammotion/proto/mctrl_ota_pb2.pyi,sha256=sXX19_q1SfLKMKzdPnmcy6eIslt1NASlD0hlMNNYCQY,5913
132
+ pymammotion/proto/mctrl_pept.proto,sha256=E-kp3dLPTbnrnRz4x1hFHfIbv4IYs2lHL8Nhs73qla4,807
133
+ pymammotion/proto/mctrl_pept_pb2.py,sha256=7rM3ZSn2XyPD0k2FUhL0zDrHmyC15ZUJgMXqx0biptg,2436
134
+ pymammotion/proto/mctrl_pept_pb2.pyi,sha256=rYmmllXOmHqz7PRn7IWGSkGjKmJRHI4HNA7ZkYipK_g,3308
135
+ pymammotion/proto/mctrl_sys.proto,sha256=XdmmJTkVmy7M93--tQIhM7w2B0YZdsTjSXqmD6kbd1g,15938
136
+ pymammotion/proto/mctrl_sys_pb2.py,sha256=N12eEXmpJZh5VvjN7QdNZAwWLABKtfHR5VGTzA-kxDY,33162
137
+ pymammotion/proto/mctrl_sys_pb2.pyi,sha256=N1sJJMx7qWsj1kKYoQJ4JEZanZetLZ5JThs1IXCChUE,61557
138
+ pymammotion/proto/message_pool.py,sha256=4-cRhhiM6bmfpUJZ8qxc8LEyqHBHpLCcotjbyZxl7JM,71
139
+ pymammotion/proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
+ pymammotion/utility/conversions.py,sha256=v3YICy0zZwwBBzrUZgabI7GRfiDBnkiAX2qdtk3NxOY,89
141
+ pymammotion/utility/datatype_converter.py,sha256=A9qHBTbnq2PniAyBKxx3Qrk08aF5SIXGK1lDIY1siPU,4424
142
+ pymammotion/utility/device_config.py,sha256=65Jl73-dQDs4yMXwYXZW_bsgSvnwpFBZDu8OQPEIgx8,27877
143
+ pymammotion/utility/device_type.py,sha256=RdxBdkqzd03Q0MCCkbfqLj_CKrks8nNV4ji50UvJbH8,17024
144
+ pymammotion/utility/map.py,sha256=1SdHmysJPSsQPd69QHm-xPkkN452iBF4TRZa2FAtyro,9372
145
+ pymammotion/utility/movement.py,sha256=N75oAoAgFydqoaOedYIxGUHmuTCtPzAOtb-d_29tpfI,615
146
+ pymammotion/utility/mur_mur_hash.py,sha256=5h2qew1eY3a1PrCzgQLsHeo_Q33ropgG1E23uzmZ72o,5864
147
+ pymammotion/utility/periodic.py,sha256=MbeSb9cfhxzYmdT_RiE0dZe3H9IfbQW_zSqhmSX2RUc,3321
148
+ pymammotion/utility/rocker_util.py,sha256=6tX7sS87qoQC_tsxbx3NLL-HgS08wtzXiZkhDiz7uo0,7179
149
+ pymammotion/utility/constant/__init__.py,sha256=tcY0LDeD-qDDHx2LKt55KOyv9ZI0UfCNM6fknLCmm8s,110
150
+ pymammotion/utility/constant/device_constant.py,sha256=X27pgHJaz9ljhepz-m0p6Dvpylg6ASB8om2PlFOd_nU,8250
151
+ pymammotion-0.5.69.dist-info/METADATA,sha256=TaA8SHmjCGdsesnNHlPwWFdB_qpJu5lJVCX4TlT_upY,3512
152
+ pymammotion-0.5.69.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
153
+ pymammotion-0.5.69.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
154
+ pymammotion-0.5.69.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any