python-unifi-client 1.2.6__tar.gz → 1.2.7__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.
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/PKG-INFO +1 -1
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client/client.py +76 -102
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client.egg-info/PKG-INFO +1 -1
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/setup.py +1 -1
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/README.md +0 -0
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client/__init__.py +0 -0
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client.egg-info/SOURCES.txt +0 -0
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client.egg-info/dependency_links.txt +0 -0
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client.egg-info/top_level.txt +0 -0
- {python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/setup.cfg +0 -0
|
@@ -10,8 +10,6 @@ import http.client as http_client
|
|
|
10
10
|
import logging
|
|
11
11
|
import base64
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
13
|
# Custom exceptions mirroring PHP equivalents
|
|
16
14
|
class CurlExtensionNotLoadedException(Exception):
|
|
17
15
|
def __init__(self):
|
|
@@ -266,13 +264,13 @@ class Client:
|
|
|
266
264
|
return self.fetch_results(f"/api/s/{self._site}/stat/sta", prefix_path=True)
|
|
267
265
|
|
|
268
266
|
def block_client(self, mac):
|
|
269
|
-
return self.
|
|
267
|
+
return self.fetch_results(f"/api/s/{self._site}/cmd/stamgr", method='POST', payload={'cmd': 'block-sta', 'mac': mac})
|
|
270
268
|
|
|
271
269
|
def unblock_client(self, mac):
|
|
272
|
-
return self.
|
|
270
|
+
return self.fetch_results(f"/api/s/{self._site}/cmd/stamgr", method='POST', payload={'cmd': 'unblock-sta', 'mac': mac})
|
|
273
271
|
|
|
274
272
|
def reconnect_client(self, mac):
|
|
275
|
-
return self.
|
|
273
|
+
return self.fetch_results(f"/api/s/{self._site}/cmd/stamgr", method='POST', payload={'cmd': 'kick-sta', 'mac': mac})
|
|
276
274
|
|
|
277
275
|
def authorize_guest(self, mac, minutes, up=None, down=None, megabytes=None, ap_mac=None):
|
|
278
276
|
payload = {
|
|
@@ -284,7 +282,7 @@ class Client:
|
|
|
284
282
|
if down is not None: payload['down'] = down
|
|
285
283
|
if megabytes is not None: payload['bytes'] = megabytes
|
|
286
284
|
if ap_mac is not None: payload['ap_mac'] = ap_mac.lower()
|
|
287
|
-
return self.
|
|
285
|
+
return self.fetch_results(f"/api/s/{self._site}/cmd/stamgr", payload=payload)
|
|
288
286
|
|
|
289
287
|
"""
|
|
290
288
|
Unauthorize a client device.
|
|
@@ -294,37 +292,32 @@ class Client:
|
|
|
294
292
|
throws Exception
|
|
295
293
|
"""
|
|
296
294
|
def unauthorize_guest(self, mac):
|
|
297
|
-
return self.
|
|
295
|
+
return self.fetch_results(
|
|
298
296
|
f"/api/s/{self._site}/cmd/stamgr",
|
|
299
|
-
method='POST',
|
|
300
297
|
payload={'cmd': 'unauthorize-guest', 'mac': mac}
|
|
301
298
|
)
|
|
302
299
|
|
|
303
300
|
def reconnect_sta(self, mac):
|
|
304
|
-
return self.
|
|
301
|
+
return self.fetch_results(
|
|
305
302
|
f"/api/s/{self._site}/cmd/stamgr",
|
|
306
|
-
method='POST',
|
|
307
303
|
payload={'cmd': 'kick-sta', 'mac': mac.lower()}
|
|
308
304
|
)
|
|
309
305
|
|
|
310
306
|
def block_sta(self, mac):
|
|
311
|
-
return self.
|
|
307
|
+
return self.fetch_results(
|
|
312
308
|
f"/api/s/{self._site}/cmd/stamgr",
|
|
313
|
-
method='POST',
|
|
314
309
|
payload={'cmd': 'block-sta', 'mac': mac.lower()}
|
|
315
310
|
)
|
|
316
311
|
|
|
317
312
|
def unblock_sta(self, mac):
|
|
318
|
-
return self.
|
|
313
|
+
return self.fetch_results(
|
|
319
314
|
f"/api/s/{self._site}/cmd/stamgr",
|
|
320
|
-
method='POST',
|
|
321
315
|
payload={'cmd': 'unblock-sta', 'mac': mac.lower()}
|
|
322
316
|
)
|
|
323
317
|
|
|
324
318
|
def forget_sta(self, mac):
|
|
325
|
-
return self.
|
|
319
|
+
return self.fetch_results(
|
|
326
320
|
f"/api/s/{self._site}/cmd/stamgr",
|
|
327
|
-
method='POST',
|
|
328
321
|
payload={'cmd': 'forget-sta', 'mac': mac}
|
|
329
322
|
)
|
|
330
323
|
|
|
@@ -375,7 +368,7 @@ class Client:
|
|
|
375
368
|
"""
|
|
376
369
|
Remove a user by ID
|
|
377
370
|
"""
|
|
378
|
-
return self.
|
|
371
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/user/{user_id}",)
|
|
379
372
|
|
|
380
373
|
def get_user(self, user_id: str):
|
|
381
374
|
"""
|
|
@@ -410,9 +403,8 @@ class Client:
|
|
|
410
403
|
"""
|
|
411
404
|
Forget (remove) any record of a client's MAC from the site.
|
|
412
405
|
"""
|
|
413
|
-
return self.
|
|
406
|
+
return self.fetch_results(
|
|
414
407
|
f"/api/s/{self._site}/cmd/sitemgr",
|
|
415
|
-
method='POST',
|
|
416
408
|
payload={'cmd': 'forget-sta', 'mac': mac}
|
|
417
409
|
)
|
|
418
410
|
|
|
@@ -420,13 +412,13 @@ class Client:
|
|
|
420
412
|
|
|
421
413
|
## ------------- Make sure these are included in the PHP files ------
|
|
422
414
|
def get_clients_summary(self):
|
|
423
|
-
return self.
|
|
415
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/summary/client")
|
|
424
416
|
|
|
425
417
|
def get_user_groups(self):
|
|
426
|
-
return self.
|
|
418
|
+
return self.fetch_results(f"/api/s/{self._site}/list/usergroup")
|
|
427
419
|
|
|
428
420
|
def get_user_group(self, group_id):
|
|
429
|
-
return self.
|
|
421
|
+
return self.fetch_results(f"/api/s/{self._site}/list/usergroup/{group_id}")
|
|
430
422
|
|
|
431
423
|
def create_user_group(self, group_name: str, group_dn: int = -1, group_up: int = -1):
|
|
432
424
|
"""
|
|
@@ -457,16 +449,14 @@ class Client:
|
|
|
457
449
|
'qos_rate_max_up': group_up,
|
|
458
450
|
'site_id': site_id,
|
|
459
451
|
}
|
|
460
|
-
return self.
|
|
452
|
+
return self.fetch_results(
|
|
461
453
|
f"/api/s/{self._site}/rest/usergroup",
|
|
462
|
-
method='PUT',
|
|
463
454
|
payload=payload
|
|
464
455
|
)
|
|
465
456
|
|
|
466
457
|
def delete_user_group(self, group_id):
|
|
467
|
-
return self.
|
|
458
|
+
return self.fetch_results(
|
|
468
459
|
f"/api/s/{self._site}/cmd/usergroup/{group_id}",
|
|
469
|
-
method='DELETE'
|
|
470
460
|
)
|
|
471
461
|
|
|
472
462
|
|
|
@@ -477,7 +467,7 @@ class Client:
|
|
|
477
467
|
"""
|
|
478
468
|
Fetch AP groups for the current site.
|
|
479
469
|
"""
|
|
480
|
-
return self.
|
|
470
|
+
return self.fetch_results(f"/v2/api/site/{self._site}/apgroups")
|
|
481
471
|
|
|
482
472
|
def create_apgroup(self, name: str, description: str = None) -> dict:
|
|
483
473
|
"""Create a new AP group with optional description."""
|
|
@@ -542,7 +532,7 @@ class Client:
|
|
|
542
532
|
return self.fetch_results(f"/api/s/{self._site}/rest/rogueknown")
|
|
543
533
|
|
|
544
534
|
def get_site(self, site_id) -> str:
|
|
545
|
-
return self.
|
|
535
|
+
return self.fetch_results(f"/api/s/{site_id}/self")
|
|
546
536
|
|
|
547
537
|
def create_site(self, description: str):
|
|
548
538
|
"""
|
|
@@ -571,9 +561,8 @@ class Client:
|
|
|
571
561
|
self._curl_method = "GET"
|
|
572
562
|
|
|
573
563
|
def delete_site(self, site_id):
|
|
574
|
-
return self.
|
|
564
|
+
return self.fetch_results(
|
|
575
565
|
f"/api/s/{site_id}",
|
|
576
|
-
method='DELETE',
|
|
577
566
|
payload={'site': site_id, 'cmd': 'delete-site'}
|
|
578
567
|
)
|
|
579
568
|
|
|
@@ -761,13 +750,13 @@ class Client:
|
|
|
761
750
|
"""
|
|
762
751
|
Retrieve WLAN configuration by ID
|
|
763
752
|
"""
|
|
764
|
-
return self.
|
|
753
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/wlanconf/{wlan_id}")
|
|
765
754
|
|
|
766
755
|
def list_wlanconf(self):
|
|
767
756
|
"""
|
|
768
757
|
List all WLAN configurations on the site.
|
|
769
758
|
"""
|
|
770
|
-
return self.
|
|
759
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/wlanconf")
|
|
771
760
|
|
|
772
761
|
def create_wlan(
|
|
773
762
|
self,
|
|
@@ -816,9 +805,8 @@ class Client:
|
|
|
816
805
|
data['ap_group_ids'] = ap_group_ids
|
|
817
806
|
|
|
818
807
|
# Perform the request and return True on HTTP 200
|
|
819
|
-
self.
|
|
808
|
+
self.fetch_results(
|
|
820
809
|
f"/api/s/{self._site}/add/wlanconf",
|
|
821
|
-
method='POST',
|
|
822
810
|
payload=data
|
|
823
811
|
)
|
|
824
812
|
return self._last_response_code == 200
|
|
@@ -861,9 +849,8 @@ class Client:
|
|
|
861
849
|
data['x_passphrase'] = x_passphrase.strip()
|
|
862
850
|
if name is not None:
|
|
863
851
|
data['name'] = name.strip()
|
|
864
|
-
return self.
|
|
852
|
+
return self.fetch_results(
|
|
865
853
|
f"/api/s/{self._site}/rest/wlanconf/{wlan_id}",
|
|
866
|
-
method='PUT',
|
|
867
854
|
payload=data
|
|
868
855
|
)
|
|
869
856
|
|
|
@@ -871,7 +858,7 @@ class Client:
|
|
|
871
858
|
"""
|
|
872
859
|
Delete a WLAN configuration by ID
|
|
873
860
|
"""
|
|
874
|
-
return self.
|
|
861
|
+
return self.fetch_results(
|
|
875
862
|
f"/api/s/{self._site}/rest/wlanconf/{wlan_id.strip()}"
|
|
876
863
|
)
|
|
877
864
|
|
|
@@ -947,9 +934,8 @@ class Client:
|
|
|
947
934
|
"""
|
|
948
935
|
Expire (unauthorize) a guest session immedietely
|
|
949
936
|
"""
|
|
950
|
-
return self.
|
|
937
|
+
return self.fetch_results(
|
|
951
938
|
f"/api/s/{self._site}/cmd/stamgr",
|
|
952
|
-
method='POST',
|
|
953
939
|
payload={'cmd': 'unauthorize-guest', 'mac': mac}
|
|
954
940
|
)
|
|
955
941
|
|
|
@@ -957,7 +943,7 @@ class Client:
|
|
|
957
943
|
"""
|
|
958
944
|
List all hotspot vouchers on the site.
|
|
959
945
|
"""
|
|
960
|
-
return self.
|
|
946
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/voucher")
|
|
961
947
|
|
|
962
948
|
def create_voucher(
|
|
963
949
|
self,
|
|
@@ -995,9 +981,8 @@ class Client:
|
|
|
995
981
|
if megabytes is not None:
|
|
996
982
|
payload['bytes'] = megabytes
|
|
997
983
|
|
|
998
|
-
return self.
|
|
984
|
+
return self.fetch_results(
|
|
999
985
|
f"/api/s/{self._site}/cmd/hotspot",
|
|
1000
|
-
method='POST',
|
|
1001
986
|
payload=payload
|
|
1002
987
|
)
|
|
1003
988
|
|
|
@@ -1009,9 +994,8 @@ class Client:
|
|
|
1009
994
|
"""
|
|
1010
995
|
payload = {'_id': voucher_id, 'cmd': 'delete-voucher'}
|
|
1011
996
|
|
|
1012
|
-
return self.
|
|
997
|
+
return self.fetch_results(
|
|
1013
998
|
f"/api/s/{self._site}/cmd/hotspot",
|
|
1014
|
-
method='POST',
|
|
1015
999
|
payload=payload
|
|
1016
1000
|
)
|
|
1017
1001
|
|
|
@@ -1019,7 +1003,7 @@ class Client:
|
|
|
1019
1003
|
"""
|
|
1020
1004
|
List all client sessions (stat/session) for the site
|
|
1021
1005
|
"""
|
|
1022
|
-
return self.
|
|
1006
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/session")
|
|
1023
1007
|
|
|
1024
1008
|
def stat_hourly_site(self, start: int = None, end: int = None, attribs: list = None):
|
|
1025
1009
|
"""
|
|
@@ -1040,9 +1024,8 @@ class Client:
|
|
|
1040
1024
|
'end': end
|
|
1041
1025
|
}
|
|
1042
1026
|
|
|
1043
|
-
return self.
|
|
1027
|
+
return self.fetch_results(
|
|
1044
1028
|
f"/api/s/{self._site}/stat/report/hourly.site",
|
|
1045
|
-
method='GET',
|
|
1046
1029
|
payload=payload
|
|
1047
1030
|
)
|
|
1048
1031
|
|
|
@@ -1172,10 +1155,10 @@ class Client:
|
|
|
1172
1155
|
return self.fetch_results(f"/api/s/{self._site}/stat/report/monthly.gw", payload=payload)
|
|
1173
1156
|
|
|
1174
1157
|
def list_network(self, network_id: str = ''):
|
|
1175
|
-
return self.
|
|
1158
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/networkconf{network_id.strip()}")
|
|
1176
1159
|
|
|
1177
1160
|
def list_networkconf(self, network_id: str = ''):
|
|
1178
|
-
return self.
|
|
1161
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/networkconf{network_id.strip()}")
|
|
1179
1162
|
|
|
1180
1163
|
def list_backups(self):
|
|
1181
1164
|
payload = {'cmd': 'list-backups'}
|
|
@@ -1186,15 +1169,14 @@ class Client:
|
|
|
1186
1169
|
"""
|
|
1187
1170
|
Get a specific network configuration by ID
|
|
1188
1171
|
"""
|
|
1189
|
-
return self.
|
|
1172
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/networkconf/{network_id}")
|
|
1190
1173
|
|
|
1191
1174
|
def create_network(self, payload: dict):
|
|
1192
1175
|
"""
|
|
1193
1176
|
Create a new network configuration
|
|
1194
1177
|
"""
|
|
1195
|
-
return self.
|
|
1178
|
+
return self.fetch_results(
|
|
1196
1179
|
f"/api/s/{self._site}/rest/networkconf",
|
|
1197
|
-
method='POST',
|
|
1198
1180
|
payload=payload
|
|
1199
1181
|
)
|
|
1200
1182
|
|
|
@@ -1202,9 +1184,8 @@ class Client:
|
|
|
1202
1184
|
"""
|
|
1203
1185
|
Update an existing network configuration
|
|
1204
1186
|
"""
|
|
1205
|
-
return self.
|
|
1187
|
+
return self.fetch_results(
|
|
1206
1188
|
f"/api/s/{self._site}/rest/networkconf/{network_id}",
|
|
1207
|
-
method='PUT',
|
|
1208
1189
|
payload=update_fields
|
|
1209
1190
|
)
|
|
1210
1191
|
|
|
@@ -1212,9 +1193,8 @@ class Client:
|
|
|
1212
1193
|
"""
|
|
1213
1194
|
Delete a network configuration by ID
|
|
1214
1195
|
"""
|
|
1215
|
-
return self.
|
|
1196
|
+
return self.fetch_results(
|
|
1216
1197
|
f"/api/s/{self._site}/rest/networkconf{network_id.strip()}",
|
|
1217
|
-
method='DELETE'
|
|
1218
1198
|
)
|
|
1219
1199
|
|
|
1220
1200
|
def list_portconf(self):
|
|
@@ -1227,15 +1207,14 @@ class Client:
|
|
|
1227
1207
|
"""
|
|
1228
1208
|
Retrieve port configuration by ID
|
|
1229
1209
|
"""
|
|
1230
|
-
return self.
|
|
1210
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/portconf/{portconf_id}")
|
|
1231
1211
|
|
|
1232
1212
|
def create_portconf(self, config: dict):
|
|
1233
1213
|
"""
|
|
1234
1214
|
Create a new port configuration.
|
|
1235
1215
|
"""
|
|
1236
|
-
return self.
|
|
1216
|
+
return self.fetch_results(
|
|
1237
1217
|
f"/api/s/{self._site}/rest/portconf",
|
|
1238
|
-
method='POST',
|
|
1239
1218
|
payload=config
|
|
1240
1219
|
)
|
|
1241
1220
|
|
|
@@ -1243,9 +1222,8 @@ class Client:
|
|
|
1243
1222
|
"""
|
|
1244
1223
|
Update an existing port configuration.
|
|
1245
1224
|
"""
|
|
1246
|
-
return self.
|
|
1225
|
+
return self.fetch_results(
|
|
1247
1226
|
f"/api/s/{self._site}/rest/portconf/{portconf_id}",
|
|
1248
|
-
method='PUT',
|
|
1249
1227
|
payload=config
|
|
1250
1228
|
)
|
|
1251
1229
|
|
|
@@ -1253,9 +1231,8 @@ class Client:
|
|
|
1253
1231
|
"""
|
|
1254
1232
|
Delete a port configuration by ID.
|
|
1255
1233
|
"""
|
|
1256
|
-
return self.
|
|
1234
|
+
return self.fetch_results(
|
|
1257
1235
|
f"/api/s/{self._site}/rest/portconf/{portconf_id}",
|
|
1258
|
-
method='DELETE'
|
|
1259
1236
|
)
|
|
1260
1237
|
|
|
1261
1238
|
def stat_ips_events(self, start: int = None, end: int = None, limit: int = None):
|
|
@@ -1273,7 +1250,7 @@ class Client:
|
|
|
1273
1250
|
end = end if end is not None else int(time.time() * 1000)
|
|
1274
1251
|
start = start if start is not None else end - (7 * 24 * 3600 * 1000)
|
|
1275
1252
|
payload = {'mac': mac, 'start': start, 'end': end}
|
|
1276
|
-
return self.
|
|
1253
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/session", payload=payload)
|
|
1277
1254
|
|
|
1278
1255
|
def stat_sta_sessions_latest(self, mac: str, limit: int = None):
|
|
1279
1256
|
"""Fetch latest 'n' login sessions for a client (defaults to 5)."""
|
|
@@ -1288,7 +1265,7 @@ class Client:
|
|
|
1288
1265
|
end = end if end is not None else int(time.time() * 1000)
|
|
1289
1266
|
start = start if start is not None else end - (7 * 24 * 3600 * 1000)
|
|
1290
1267
|
payload = {'mac': mac, 'start': start, 'end': end}
|
|
1291
|
-
return self.
|
|
1268
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/user", payload=payload)
|
|
1292
1269
|
|
|
1293
1270
|
def stat_all_user(self, start: int = None, end: int = None):
|
|
1294
1271
|
"""
|
|
@@ -1297,7 +1274,7 @@ class Client:
|
|
|
1297
1274
|
end = end if end is not None else int(time.time() * 1000)
|
|
1298
1275
|
start = start if start is not None else end - (7 * 24 * 3600 * 1000)
|
|
1299
1276
|
payload = {'start': start, 'end': end}
|
|
1300
|
-
return self.
|
|
1277
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/alluser", payload=payload)
|
|
1301
1278
|
|
|
1302
1279
|
def stat_allusers(self, historyhours: int = 8760):
|
|
1303
1280
|
"""Fetch clients seen within the past N hours (all-time totals)."""
|
|
@@ -1312,7 +1289,7 @@ class Client:
|
|
|
1312
1289
|
start = start if start is not None else end - (7 * 24 * 3600 * 1000)
|
|
1313
1290
|
attribs = ['time'] + attribs if attribs else ['time'] + self.default_site_stats_attribs
|
|
1314
1291
|
payload = {'attrs': attribs, 'start': start, 'end': end}
|
|
1315
|
-
return self.
|
|
1292
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/report/daily.site", payload=payload)
|
|
1316
1293
|
|
|
1317
1294
|
def stat_monthly_site(self, start: int = None, end: int = None, attribs: list = None):
|
|
1318
1295
|
"""
|
|
@@ -1322,33 +1299,33 @@ class Client:
|
|
|
1322
1299
|
start = start if start is not None else end - (30 * 24 * 3600 * 1000)
|
|
1323
1300
|
attribs = ['time'] + attribs if attribs else ['time'] + self.default_site_stats_attribs
|
|
1324
1301
|
payload = {'attrs': attribs, 'start': start, 'end': end}
|
|
1325
|
-
return self.
|
|
1302
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/report/monthly.site", payload=payload)
|
|
1326
1303
|
|
|
1327
1304
|
def stat_current_user(self):
|
|
1328
1305
|
"""
|
|
1329
1306
|
Get stats for currently connected users.
|
|
1330
1307
|
"""
|
|
1331
|
-
return self.
|
|
1308
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/sta")
|
|
1332
1309
|
|
|
1333
1310
|
def stat_all_users(self):
|
|
1334
1311
|
"""
|
|
1335
1312
|
Get usage stats for all known users.
|
|
1336
1313
|
"""
|
|
1337
|
-
return self.
|
|
1314
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/alluser")
|
|
1338
1315
|
|
|
1339
1316
|
def stat_voucher(self, create_time: int = None):
|
|
1340
1317
|
"""
|
|
1341
1318
|
Fetch statistics about vouchers, optionally filtering by creation time
|
|
1342
1319
|
"""
|
|
1343
1320
|
payload = {'create_time': create_time} if create_time is not None else {}
|
|
1344
|
-
return self.
|
|
1321
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/voucher", payload=payload)
|
|
1345
1322
|
|
|
1346
1323
|
def stat_payment(self, within: int=None):
|
|
1347
1324
|
"""
|
|
1348
1325
|
Fetch statistics about payments, optionally filtering by time window
|
|
1349
1326
|
"""
|
|
1350
1327
|
path_suffix = f"?within={within}" if within is not None else ""
|
|
1351
|
-
return self.
|
|
1328
|
+
return self.fetch_results(f"api/s/{self._site}/stat/payment{path_suffix}")
|
|
1352
1329
|
|
|
1353
1330
|
def create_hotspotop(self, name: str, x_password: str, note: str = '') -> bool:
|
|
1354
1331
|
"""Create hotspot operator user"""
|
|
@@ -1370,7 +1347,7 @@ class Client:
|
|
|
1370
1347
|
end = end if end is not None else int(time.time())
|
|
1371
1348
|
start = start if start is not None else end - (7 * 24 * 3600)
|
|
1372
1349
|
payload = {'start': start, 'end': end}
|
|
1373
|
-
return self.
|
|
1350
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/authorization", payload=payload)
|
|
1374
1351
|
|
|
1375
1352
|
def stat_sessions(self, start: int = None, end: int = None, mac: str = None, type: str = 'all'):
|
|
1376
1353
|
"""
|
|
@@ -1386,7 +1363,7 @@ class Client:
|
|
|
1386
1363
|
if mac:
|
|
1387
1364
|
payload['mac'] = mac.lower()
|
|
1388
1365
|
|
|
1389
|
-
return self.
|
|
1366
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/session", payload=payload)
|
|
1390
1367
|
|
|
1391
1368
|
def stat_client(self, mac: str):
|
|
1392
1369
|
"""Fetch details for a single client device."""
|
|
@@ -1459,26 +1436,26 @@ class Client:
|
|
|
1459
1436
|
Retrieve list of alarms with optional filtering payload
|
|
1460
1437
|
"""
|
|
1461
1438
|
payload = payload or {}
|
|
1462
|
-
return self.
|
|
1439
|
+
return self.fetch_results(f"/api/s/{self._site}/list/alarm", payload=payload)
|
|
1463
1440
|
|
|
1464
1441
|
def list_events(self, historyhours: int = 720, start: int = 0, limit: int = 3000):
|
|
1465
1442
|
payload = {
|
|
1466
1443
|
'_sort': '-time',
|
|
1467
1444
|
'within': historyhours,
|
|
1468
|
-
'type':
|
|
1445
|
+
'type': None,
|
|
1469
1446
|
'_start': start,
|
|
1470
1447
|
'_limit': limit
|
|
1471
1448
|
}
|
|
1472
|
-
return self.
|
|
1449
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/event", payload=payload)
|
|
1473
1450
|
|
|
1474
1451
|
def list_tags(self):
|
|
1475
|
-
return self.
|
|
1452
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/tag")
|
|
1476
1453
|
|
|
1477
1454
|
def list_dpi_stats(self):
|
|
1478
1455
|
"""
|
|
1479
1456
|
List DPI stats.
|
|
1480
1457
|
"""
|
|
1481
|
-
return self.
|
|
1458
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/dpi")
|
|
1482
1459
|
|
|
1483
1460
|
def list_dpi_stats_filtered(self, type: str = 'by_cat', cat_filter: list = None):
|
|
1484
1461
|
"""
|
|
@@ -1492,7 +1469,7 @@ class Client:
|
|
|
1492
1469
|
if isinstance(cat_filter, list) and type == 'by_app':
|
|
1493
1470
|
payload['cats'] = cat_filter
|
|
1494
1471
|
|
|
1495
|
-
return self.
|
|
1472
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/sitedpi", payload=payload)
|
|
1496
1473
|
|
|
1497
1474
|
def list_dpi_app_categories(self):
|
|
1498
1475
|
"""Fetch DPI application categories."""
|
|
@@ -1513,7 +1490,7 @@ class Client:
|
|
|
1513
1490
|
return self.fetch_results(f"/api/s/{self._site}/stat/ccode")
|
|
1514
1491
|
|
|
1515
1492
|
def list_radius_accounts(self):
|
|
1516
|
-
return self.
|
|
1493
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/account")
|
|
1517
1494
|
|
|
1518
1495
|
def list_radius_profiles(self):
|
|
1519
1496
|
"""Fetch RADIUS profiles"""
|
|
@@ -1595,17 +1572,17 @@ class Client:
|
|
|
1595
1572
|
return result
|
|
1596
1573
|
|
|
1597
1574
|
def list_readius_profiles(self):
|
|
1598
|
-
return self.
|
|
1575
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/radiusprofile")
|
|
1599
1576
|
|
|
1600
1577
|
def list_hotspot_operators(self):
|
|
1601
|
-
return self.
|
|
1578
|
+
return self.fetch_results(f"api/s/{self._site}/rest/hotspotop")
|
|
1602
1579
|
|
|
1603
1580
|
def count_alarms(self, archived: bool = None):
|
|
1604
1581
|
"""
|
|
1605
1582
|
Count alarms; if archived=False counts only non-archived
|
|
1606
1583
|
"""
|
|
1607
1584
|
suffix = '?archived=false' if archived is False else ''
|
|
1608
|
-
return self.
|
|
1585
|
+
return self.fetch_results(f"/api/s/{self._site}/cnt/alarm{suffix}")
|
|
1609
1586
|
|
|
1610
1587
|
def archive_alarm(self, alarm_id: str = '') -> bool:
|
|
1611
1588
|
"""
|
|
@@ -1615,7 +1592,7 @@ class Client:
|
|
|
1615
1592
|
payload = {'_id': alarm_id, 'cmd': 'archive-alarm'}
|
|
1616
1593
|
else:
|
|
1617
1594
|
payload = {'cmd': 'archive-all-alarms'}
|
|
1618
|
-
self.
|
|
1595
|
+
self.fetch_results(f"/api/s/{self._site}/cmd/evtmgr", payload=payload)
|
|
1619
1596
|
return self._last_response_code == 200
|
|
1620
1597
|
|
|
1621
1598
|
def stat_speedtest_results(self, start: int = None, end: int = None):
|
|
@@ -1629,22 +1606,22 @@ class Client:
|
|
|
1629
1606
|
'start': start,
|
|
1630
1607
|
'end': end
|
|
1631
1608
|
}
|
|
1632
|
-
return self.
|
|
1609
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/report/archive.speedtest", payload=payload)
|
|
1633
1610
|
|
|
1634
1611
|
def list_health(self):
|
|
1635
|
-
return self.
|
|
1612
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/heatlh")
|
|
1636
1613
|
|
|
1637
1614
|
def stat_user_devices(self):
|
|
1638
1615
|
"""
|
|
1639
1616
|
Retrieve statistics on user devices.
|
|
1640
1617
|
"""
|
|
1641
|
-
return self.
|
|
1618
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/user/devices")
|
|
1642
1619
|
|
|
1643
1620
|
def stat_sites(self):
|
|
1644
1621
|
"""
|
|
1645
1622
|
Retrieve statistics for all available sites.
|
|
1646
1623
|
"""
|
|
1647
|
-
return self.
|
|
1624
|
+
return self.fetch_results("/api/stat/sites")
|
|
1648
1625
|
|
|
1649
1626
|
def list_devices(self, macs: list[str] = []):
|
|
1650
1627
|
"""
|
|
@@ -1660,7 +1637,7 @@ class Client:
|
|
|
1660
1637
|
"""
|
|
1661
1638
|
Fetch latest known controller version info
|
|
1662
1639
|
"""
|
|
1663
|
-
return self.
|
|
1640
|
+
return self.fetch_results(f"/api/s/{self._site}/stat/fwupdate/latest-version")
|
|
1664
1641
|
|
|
1665
1642
|
def get_update_os_console(self):
|
|
1666
1643
|
"""
|
|
@@ -1668,7 +1645,7 @@ class Client:
|
|
|
1668
1645
|
"""
|
|
1669
1646
|
if not self._unifi_os:
|
|
1670
1647
|
raise NotAUnifiOsConsoleException()
|
|
1671
|
-
return self.
|
|
1648
|
+
return self.fetch_results('/api/firmware/update')
|
|
1672
1649
|
|
|
1673
1650
|
def update_os_console(self) -> bool:
|
|
1674
1651
|
"""
|
|
@@ -1677,7 +1654,7 @@ class Client:
|
|
|
1677
1654
|
if not self._unifi_os:
|
|
1678
1655
|
raise NotAUnifiOsConsoleException()
|
|
1679
1656
|
payload = {'persistFullData': True}
|
|
1680
|
-
self.
|
|
1657
|
+
self.fetch_results(f"/api/s/{self._site}/cmd/firmware/update", payload=payload)
|
|
1681
1658
|
return self._last_response_code == 200
|
|
1682
1659
|
|
|
1683
1660
|
|
|
@@ -2097,7 +2074,7 @@ class Client:
|
|
|
2097
2074
|
pass
|
|
2098
2075
|
|
|
2099
2076
|
def list_firewallgroups(self, group_id: str = ''):
|
|
2100
|
-
return self.fetch_results(f"/api/s/{self._site}/rest/firewallgroup/{group_id.strip()}")
|
|
2077
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/firewallgroup/{group_id.strip()}", prefix_path=True)
|
|
2101
2078
|
|
|
2102
2079
|
def create_firewallgroup(self, group_name: str, group_type: str, group_members: list = []) -> bool:
|
|
2103
2080
|
"""Create a new firewall group"""
|
|
@@ -2109,11 +2086,7 @@ class Client:
|
|
|
2109
2086
|
'group_type': group_type,
|
|
2110
2087
|
'group_members': group_members
|
|
2111
2088
|
}
|
|
2112
|
-
return self.
|
|
2113
|
-
f"/api/s/{self._site}/rest/firewallgroup",
|
|
2114
|
-
method='POST',
|
|
2115
|
-
payload=payload
|
|
2116
|
-
)
|
|
2089
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/firewallgroup", payload=payload, prefix_path=True)
|
|
2117
2090
|
|
|
2118
2091
|
def edit_firewallgroup(self, group_id: str, site_id: str, group_name: str, group_type: str, group_members: list = []) -> bool:
|
|
2119
2092
|
"""Edit an existing firewall group"""
|
|
@@ -2128,10 +2101,11 @@ class Client:
|
|
|
2128
2101
|
'group_members': group_members,
|
|
2129
2102
|
'site_id': site_id
|
|
2130
2103
|
}
|
|
2131
|
-
|
|
2104
|
+
self._curl_method = 'PUT'
|
|
2105
|
+
return self.fetch_results(
|
|
2132
2106
|
f"/api/s/{self._site}/rest/firewallgroup/{group_id.strip()}",
|
|
2133
|
-
|
|
2134
|
-
|
|
2107
|
+
payload=payload,
|
|
2108
|
+
prefix_path=True
|
|
2135
2109
|
)
|
|
2136
2110
|
|
|
2137
2111
|
def delete_firewallgroup(self, group_id: str) -> bool:
|
|
@@ -2140,7 +2114,7 @@ class Client:
|
|
|
2140
2114
|
self._curl_method = "GET"
|
|
2141
2115
|
|
|
2142
2116
|
def list_firewallrules(self):
|
|
2143
|
-
return self.
|
|
2117
|
+
return self.fetch_results(f"/api/s/{self._site}/rest/firewallrule")
|
|
2144
2118
|
|
|
2145
2119
|
def list_routing(self, route_id: str = ''):
|
|
2146
2120
|
return self.fetch_results(f"/api/s/{self._site}/rest/routing/{route_id.strip()}")
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setuptools.setup(
|
|
7
7
|
name="python_unifi_client",
|
|
8
|
-
version="1.2.
|
|
8
|
+
version="1.2.7",
|
|
9
9
|
author="Michael Lapinski",
|
|
10
10
|
author_email="michaellapinski787@gmail.com",
|
|
11
11
|
descripton="A python version of a github Art-of-Wifi/Unifi-API-Client",
|
|
File without changes
|
|
File without changes
|
{python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{python_unifi_client-1.2.6 → python_unifi_client-1.2.7}/python_unifi_client.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|