tplinkrouterc6u 5.9.1__tar.gz → 5.9.3__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.
Files changed (39) hide show
  1. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/PKG-INFO +4 -1
  2. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/README.md +3 -0
  3. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/setup.py +1 -1
  4. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_ex.py +82 -0
  5. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/ex.py +3 -3
  6. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/mr.py +4 -2
  7. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u.egg-info/PKG-INFO +4 -1
  8. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/LICENSE +0 -0
  9. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/setup.cfg +0 -0
  10. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/__init__.py +0 -0
  11. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_c1200.py +0 -0
  12. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_c6u.py +0 -0
  13. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_c80.py +0 -0
  14. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_deco.py +0 -0
  15. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_mr.py +0 -0
  16. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_wdr.py +0 -0
  17. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/test/test_client_xdr.py +0 -0
  18. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/__init__.py +0 -0
  19. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/__init__.py +0 -0
  20. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/c1200.py +0 -0
  21. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/c5400x.py +0 -0
  22. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/c6u.py +0 -0
  23. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/c80.py +0 -0
  24. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/deco.py +0 -0
  25. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/vr.py +0 -0
  26. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/wdr.py +0 -0
  27. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client/xdr.py +0 -0
  28. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/client_abstract.py +0 -0
  29. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/common/__init__.py +0 -0
  30. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/common/dataclass.py +0 -0
  31. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/common/encryption.py +0 -0
  32. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/common/exception.py +0 -0
  33. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/common/helper.py +0 -0
  34. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/common/package_enum.py +0 -0
  35. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u/provider.py +0 -0
  36. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u.egg-info/SOURCES.txt +0 -0
  37. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u.egg-info/dependency_links.txt +0 -0
  38. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u.egg-info/requires.txt +0 -0
  39. {tplinkrouterc6u-5.9.1 → tplinkrouterc6u-5.9.3}/tplinkrouterc6u.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tplinkrouterc6u
3
- Version: 5.9.1
3
+ Version: 5.9.3
4
4
  Summary: TP-Link Router API (supports also Mercusys Router)
5
5
  Home-page: https://github.com/AlexandrErohin/TP-Link-Archer-C6U
6
6
  Author: Alex Erohin
@@ -314,6 +314,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
314
314
  - Archer AX3000 V1
315
315
  - Archer AX6000 V1
316
316
  - Archer AX11000 V1
317
+ - Archer BE230 v1.0
317
318
  - Archer BE400 v1.0
318
319
  - Archer BE550 v1.0
319
320
  - Archer BE800 v1.0
@@ -358,6 +359,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
358
359
  - TD-W9960 (v1, V1.20)
359
360
  - TL-MR100 v2.0
360
361
  - TL-MR105
362
+ - TL-MR110-Outdoor v1.0
361
363
  - TL-MR6400 (v5, v5.3)
362
364
  - TL-MR6500v
363
365
  - TL-WA1201 3.0
@@ -370,6 +372,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
370
372
  - MR47BE v1.0
371
373
  - MR50G 1.0
372
374
  - H60XR 1.0
375
+ - Halo H80X 1.0
373
376
 
374
377
  Please let me know if you have tested integration with any other model. Open an issue with info about router's model, hardware and firmware versions.
375
378
 
@@ -282,6 +282,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
282
282
  - Archer AX3000 V1
283
283
  - Archer AX6000 V1
284
284
  - Archer AX11000 V1
285
+ - Archer BE230 v1.0
285
286
  - Archer BE400 v1.0
286
287
  - Archer BE550 v1.0
287
288
  - Archer BE800 v1.0
@@ -326,6 +327,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
326
327
  - TD-W9960 (v1, V1.20)
327
328
  - TL-MR100 v2.0
328
329
  - TL-MR105
330
+ - TL-MR110-Outdoor v1.0
329
331
  - TL-MR6400 (v5, v5.3)
330
332
  - TL-MR6500v
331
333
  - TL-WA1201 3.0
@@ -338,6 +340,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
338
340
  - MR47BE v1.0
339
341
  - MR50G 1.0
340
342
  - H60XR 1.0
343
+ - Halo H80X 1.0
341
344
 
342
345
  Please let me know if you have tested integration with any other model. Open an issue with info about router's model, hardware and firmware versions.
343
346
 
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="tplinkrouterc6u",
8
- version="5.9.1",
8
+ version="5.9.3",
9
9
  author="Alex Erohin",
10
10
  author_email="alexanderErohin@yandex.ru",
11
11
  description="TP-Link Router API (supports also Mercusys Router)",
@@ -122,6 +122,88 @@ class TestTPLinkEXClient(TestCase):
122
122
  self.assertEqual(status.devices[1].packets_sent, None) # TODO
123
123
  self.assertEqual(status.devices[1].packets_received, None) # TODO
124
124
 
125
+ def test_get_status(self) -> None:
126
+
127
+ DEV2_ADT_LAN = ('{"data":[{"MACAddress":"a0:28:84:de:dd:5c","IPAddress":"192.168.4.1","stack":"1,0,0,0,0,0"}],'
128
+ '"operation":"gl","oid":"DEV2_ADT_LAN","success":true}')
129
+ DEV2_ADT_WAN = ('{"data":[{"enable":"1","stack":"1,0,0,0,0,0"}],"operation":"gl",'
130
+ '"oid":"DEV2_ADT_WAN","success":true}')
131
+ DEV2_ADT_WIFI_COMMON = ('{"data":[{"primaryEnable":"1","guestEnable":"0","stack":"1,0,0,0,0,0"},'
132
+ '{"primaryEnable":"0","guestEnable":"1","stack":"2,0,0,0,0,0"}],"operation":"gl",'
133
+ '"oid":"DEV2_ADT_WIFI_COMMON","success":true}')
134
+ DEV2_HOST_ENTRY = ('{"data":[{"active":"1","X_TP_LanConnType":"0","physAddress":"66-E2-02-BD-B5-1B",'
135
+ '"IPAddress":"192.168.30.10","hostName":"host1","stack":"1,0,0,0,0,0"},'
136
+ '{"active":"1","X_TP_LanConnType":"1","physAddress":"F4-A3-86-2D-41-B5",'
137
+ '"IPAddress":"192.168.30.11","hostName":"host2","stack":"2,0,0,0,0,0"}],"operation":"gl",'
138
+ '"oid":"DEV2_HOST_ENTRY","success":true}')
139
+ DEV2_MEM_STATUS = ('{"data":{"total":"192780","free":"78400","stack":"0,0,0,0,0,0"},"operation":"go",'
140
+ '"oid":"DEV2_MEM_STATUS","success":true}')
141
+ DEV2_PROC_STATUS = ('{"data":{"CPUUsage":"47","stack":"0,0,0,0,0,0"},"operation":"go",'
142
+ '"oid":"DEV2_PROC_STATUS","success":true}')
143
+
144
+ class TPLinkEXClientTest(TPLinkEXClient):
145
+ self._token = True
146
+
147
+ def _request(self, url, method='POST', data_str=None, encrypt=False):
148
+ if 'DEV2_ADT_LAN' in data_str:
149
+ return 200, DEV2_ADT_LAN
150
+ elif 'DEV2_ADT_WAN' in data_str:
151
+ return 200, DEV2_ADT_WAN
152
+ elif 'DEV2_ADT_WIFI_COMMON' in data_str:
153
+ return 200, DEV2_ADT_WIFI_COMMON
154
+ elif 'DEV2_HOST_ENTRY' in data_str:
155
+ return 200, DEV2_HOST_ENTRY
156
+ elif 'DEV2_MEM_STATUS' in data_str:
157
+ return 200, DEV2_MEM_STATUS
158
+ elif 'DEV2_PROC_STATUS' in data_str:
159
+ return 200, DEV2_PROC_STATUS
160
+ raise ClientException()
161
+
162
+ client = TPLinkEXClientTest('', '')
163
+ status = client.get_status()
164
+
165
+ self.assertIsInstance(status, Status)
166
+ self.assertEqual(status.wan_macaddr, None)
167
+ self.assertEqual(status.lan_macaddr, 'A0-28-84-DE-DD-5C')
168
+ self.assertIsInstance(status.lan_macaddress, EUI48)
169
+ self.assertEqual(status.wan_ipv4_addr, None)
170
+ self.assertEqual(status.lan_ipv4_addr, '192.168.4.1')
171
+ self.assertEqual(status.wan_ipv4_gateway, None)
172
+ self.assertEqual(status.wired_total, 1)
173
+ self.assertEqual(status.wifi_clients_total, 1)
174
+ self.assertEqual(status.guest_clients_total, 0)
175
+ self.assertEqual(status.clients_total, 2)
176
+ self.assertEqual(status.guest_2g_enable, False)
177
+ self.assertEqual(status.guest_5g_enable, True)
178
+ self.assertEqual(status.iot_2g_enable, None)
179
+ self.assertEqual(status.iot_5g_enable, None)
180
+ self.assertEqual(status.wifi_2g_enable, True)
181
+ self.assertEqual(status.wifi_5g_enable, False)
182
+ self.assertEqual(status.wan_ipv4_uptime, None)
183
+ self.assertGreaterEqual(status.mem_usage, 0)
184
+ self.assertLessEqual(status.mem_usage, 1)
185
+ self.assertGreaterEqual(status.cpu_usage, 0)
186
+ self.assertLessEqual(status.cpu_usage, 1)
187
+ self.assertEqual(len(status.devices), 2)
188
+ self.assertIsInstance(status.devices[0], Device)
189
+ self.assertEqual(status.devices[0].type, Connection.WIRED)
190
+ self.assertEqual(status.devices[0].macaddr, '66-E2-02-BD-B5-1B')
191
+ self.assertIsInstance(status.devices[0].macaddress, EUI48)
192
+ self.assertEqual(status.devices[0].ipaddr, '192.168.30.10')
193
+ self.assertIsInstance(status.devices[0].ipaddress, IPv4Address)
194
+ self.assertEqual(status.devices[0].hostname, 'host1')
195
+ self.assertEqual(status.devices[0].packets_sent, None)
196
+ self.assertEqual(status.devices[0].packets_received, None)
197
+ self.assertIsInstance(status.devices[1], Device)
198
+ self.assertEqual(status.devices[1].type, Connection.HOST_2G)
199
+ self.assertEqual(status.devices[1].macaddr, 'F4-A3-86-2D-41-B5')
200
+ self.assertIsInstance(status.devices[1].macaddress, EUI48)
201
+ self.assertEqual(status.devices[1].ipaddr, '192.168.30.11')
202
+ self.assertIsInstance(status.devices[1].ipaddress, IPv4Address)
203
+ self.assertEqual(status.devices[1].hostname, 'host2')
204
+ self.assertEqual(status.devices[1].packets_sent, None) # TODO
205
+ self.assertEqual(status.devices[1].packets_received, None) # TODO
206
+
125
207
  def test_get_ipv4_reservations(self) -> None:
126
208
 
127
209
  response = ('{"data":[{"enable":"1","chaddr":"bf:75:44:4c:dc:9e","yiaddr":"192.168.8.21",'
@@ -109,9 +109,9 @@ class TPLinkEXClient(TPLinkMRClientBase):
109
109
  for item in values[1]:
110
110
  if int(item['enable']) == 0 and values[1].__class__ == list:
111
111
  continue
112
- status._wan_macaddr = EUI48(item['MACAddr']) if item['MACAddr'] else None
113
- status._wan_ipv4_addr = IPv4Address(item['connIPv4Address'])
114
- status._wan_ipv4_gateway = IPv4Address(item['connIPv4Gateway'])
112
+ status._wan_macaddr = EUI48(item['MACAddr']) if item.get('MACAddr') else None
113
+ status._wan_ipv4_addr = IPv4Address(item['connIPv4Address']) if item.get('connIPv4Address') else None
114
+ status._wan_ipv4_gateway = IPv4Address(item['connIPv4Gateway']) if item.get('connIPv4Address') else None
115
115
 
116
116
  if values[2].__class__ != list:
117
117
  status.wifi_2g_enable = bool(int(values[2]['primaryEnable']))
@@ -550,10 +550,12 @@ class TPLinkMRClientBase(AbstractRouter):
550
550
  raise Exception('Unsupported method ' + str(method))
551
551
 
552
552
  # sometimes we get 500 here, not sure why... just retry the request
553
- if r.status_code != 500 and '<title>500 Internal Server Error</title>' not in r.text:
553
+ if (r.status_code not in [500, 406]
554
+ and '<title>500 Internal Server Error</title>' not in r.text
555
+ and '<title>406 Not Acceptable</title>' not in r.text):
554
556
  break
555
557
 
556
- sleep(0.05)
558
+ sleep(0.1)
557
559
  retry += 1
558
560
 
559
561
  # decrypt the response, if needed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tplinkrouterc6u
3
- Version: 5.9.1
3
+ Version: 5.9.3
4
4
  Summary: TP-Link Router API (supports also Mercusys Router)
5
5
  Home-page: https://github.com/AlexandrErohin/TP-Link-Archer-C6U
6
6
  Author: Alex Erohin
@@ -314,6 +314,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
314
314
  - Archer AX3000 V1
315
315
  - Archer AX6000 V1
316
316
  - Archer AX11000 V1
317
+ - Archer BE230 v1.0
317
318
  - Archer BE400 v1.0
318
319
  - Archer BE550 v1.0
319
320
  - Archer BE800 v1.0
@@ -358,6 +359,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
358
359
  - TD-W9960 (v1, V1.20)
359
360
  - TL-MR100 v2.0
360
361
  - TL-MR105
362
+ - TL-MR110-Outdoor v1.0
361
363
  - TL-MR6400 (v5, v5.3)
362
364
  - TL-MR6500v
363
365
  - TL-WA1201 3.0
@@ -370,6 +372,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
370
372
  - MR47BE v1.0
371
373
  - MR50G 1.0
372
374
  - H60XR 1.0
375
+ - Halo H80X 1.0
373
376
 
374
377
  Please let me know if you have tested integration with any other model. Open an issue with info about router's model, hardware and firmware versions.
375
378
 
File without changes