latitudesh-python-sdk 1.0.0__py3-none-any.whl → 2.0.0__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 latitudesh-python-sdk might be problematic. Click here for more details.

Files changed (96) hide show
  1. latitudesh_python_sdk/_hooks/types.py +7 -0
  2. latitudesh_python_sdk/_version.py +6 -4
  3. latitudesh_python_sdk/apikeys.py +22 -18
  4. latitudesh_python_sdk/basesdk.py +12 -20
  5. latitudesh_python_sdk/billing.py +2 -0
  6. latitudesh_python_sdk/events_sdk.py +86 -5
  7. latitudesh_python_sdk/firewalls_sdk.py +146 -9
  8. latitudesh_python_sdk/httpclient.py +6 -16
  9. latitudesh_python_sdk/ipaddresses_sdk.py +82 -5
  10. latitudesh_python_sdk/models/__init__.py +2597 -1071
  11. latitudesh_python_sdk/models/assign_server_virtual_networkop.py +2 -2
  12. latitudesh_python_sdk/models/{bandwidth_plan.py → bandwidth_plan_data.py} +9 -9
  13. latitudesh_python_sdk/models/bandwidth_plans.py +14 -3
  14. latitudesh_python_sdk/models/billing_usage.py +3 -0
  15. latitudesh_python_sdk/models/custom_tag.py +15 -0
  16. latitudesh_python_sdk/models/custom_tag_data.py +54 -0
  17. latitudesh_python_sdk/models/custom_tags.py +26 -0
  18. latitudesh_python_sdk/models/delete_ssh_keyop.py +16 -0
  19. latitudesh_python_sdk/models/delete_user_dataop.py +16 -0
  20. latitudesh_python_sdk/models/event_data.py +98 -0
  21. latitudesh_python_sdk/models/events.py +16 -1
  22. latitudesh_python_sdk/models/filesystem_data.py +4 -0
  23. latitudesh_python_sdk/models/firewall.py +15 -0
  24. latitudesh_python_sdk/models/firewall_assignment_data.py +50 -0
  25. latitudesh_python_sdk/models/firewall_assignments.py +29 -0
  26. latitudesh_python_sdk/models/firewall_data.py +71 -0
  27. latitudesh_python_sdk/models/firewall_server.py +4 -1
  28. latitudesh_python_sdk/models/firewalls.py +7 -7
  29. latitudesh_python_sdk/models/get_bandwidth_plansop.py +30 -1
  30. latitudesh_python_sdk/models/get_eventsop.py +29 -1
  31. latitudesh_python_sdk/models/get_firewall_assignmentsop.py +37 -2
  32. latitudesh_python_sdk/models/get_ipsop.py +30 -1
  33. latitudesh_python_sdk/models/get_plans_operating_systemop.py +37 -2
  34. latitudesh_python_sdk/models/get_projectsop.py +30 -1
  35. latitudesh_python_sdk/models/get_regionsop.py +42 -0
  36. latitudesh_python_sdk/models/get_rolesop.py +37 -2
  37. latitudesh_python_sdk/models/get_serversop.py +30 -1
  38. latitudesh_python_sdk/models/get_ssh_keyop.py +30 -0
  39. latitudesh_python_sdk/models/get_ssh_keysop.py +22 -0
  40. latitudesh_python_sdk/models/get_team_membersop.py +42 -0
  41. latitudesh_python_sdk/models/get_traffic_consumptionop.py +8 -4
  42. latitudesh_python_sdk/models/get_user_dataop.py +31 -0
  43. latitudesh_python_sdk/models/get_users_dataop.py +35 -0
  44. latitudesh_python_sdk/models/get_virtual_networks_assignmentsop.py +33 -1
  45. latitudesh_python_sdk/models/get_virtual_networksop.py +30 -1
  46. latitudesh_python_sdk/models/list_firewallsop.py +30 -1
  47. latitudesh_python_sdk/models/operating_system_data.py +65 -0
  48. latitudesh_python_sdk/models/operating_systems.py +15 -0
  49. latitudesh_python_sdk/models/out_of_band_connection.py +4 -4
  50. latitudesh_python_sdk/models/patch_user_dataop.py +69 -0
  51. latitudesh_python_sdk/models/post_ssh_keyop.py +58 -0
  52. latitudesh_python_sdk/models/post_user_dataop.py +45 -0
  53. latitudesh_python_sdk/models/project_include.py +3 -0
  54. latitudesh_python_sdk/models/put_ssh_keyop.py +80 -0
  55. latitudesh_python_sdk/models/role.py +11 -0
  56. latitudesh_python_sdk/models/server_data.py +8 -0
  57. latitudesh_python_sdk/models/{ssh_key.py → ssh_keys.py} +13 -2
  58. latitudesh_python_sdk/models/storage_plan_data.py +47 -0
  59. latitudesh_python_sdk/models/storage_plans.py +14 -3
  60. latitudesh_python_sdk/models/update_serverop.py +60 -10
  61. latitudesh_python_sdk/models/user_data.py +11 -0
  62. latitudesh_python_sdk/models/virtual_network.py +19 -1
  63. latitudesh_python_sdk/models/virtual_network1.py +15 -0
  64. latitudesh_python_sdk/models/virtual_network_assignment.py +41 -0
  65. latitudesh_python_sdk/models/virtual_network_assignment_data.py +68 -0
  66. latitudesh_python_sdk/models/virtual_network_assignments.py +5 -5
  67. latitudesh_python_sdk/models/virtual_network_data.py +88 -0
  68. latitudesh_python_sdk/models/virtual_networks.py +3 -3
  69. latitudesh_python_sdk/operatingsystems_sdk.py +78 -9
  70. latitudesh_python_sdk/plans.py +109 -30
  71. latitudesh_python_sdk/privatenetworks.py +185 -36
  72. latitudesh_python_sdk/projects_sdk.py +113 -32
  73. latitudesh_python_sdk/regions_sdk.py +78 -7
  74. latitudesh_python_sdk/roles.py +78 -7
  75. latitudesh_python_sdk/sdk.py +110 -73
  76. latitudesh_python_sdk/sdkconfiguration.py +0 -7
  77. latitudesh_python_sdk/servers_sdk.py +195 -50
  78. latitudesh_python_sdk/{sshkeys.py → sshkeys_sdk.py} +1030 -5
  79. latitudesh_python_sdk/storage.py +8 -0
  80. latitudesh_python_sdk/tags.py +30 -22
  81. latitudesh_python_sdk/teams_sdk.py +6 -0
  82. latitudesh_python_sdk/teamsmembers.py +80 -7
  83. latitudesh_python_sdk/traffic_sdk.py +12 -8
  84. latitudesh_python_sdk/userdata_sdk.py +1029 -0
  85. latitudesh_python_sdk/userprofile.py +6 -0
  86. latitudesh_python_sdk/utils/__init__.py +131 -45
  87. latitudesh_python_sdk/utils/datetimes.py +23 -0
  88. latitudesh_python_sdk/utils/forms.py +49 -28
  89. latitudesh_python_sdk/utils/serializers.py +32 -3
  90. latitudesh_python_sdk/virtualmachines.py +36 -18
  91. latitudesh_python_sdk/vpnsessions.py +38 -26
  92. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/METADATA +58 -22
  93. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/RECORD +95 -73
  94. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/WHEEL +1 -1
  95. latitudesh_python_sdk/models/storage_plan.py +0 -36
  96. {latitudesh_python_sdk-1.0.0.dist-info → latitudesh_python_sdk-2.0.0.dist-info}/LICENSE +0 -0
@@ -1,11 +1,12 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from .basesdk import BaseSDK
4
+ from jsonpath import JSONPath
4
5
  from latitudesh_python_sdk import models, utils
5
6
  from latitudesh_python_sdk._hooks import HookContext
6
7
  from latitudesh_python_sdk.types import OptionalNullable, UNSET
7
8
  from latitudesh_python_sdk.utils import get_security_from_env
8
- from typing import Any, Mapping, Optional, Union
9
+ from typing import Any, Dict, List, Mapping, Optional, Union
9
10
 
10
11
 
11
12
  class FirewallsSDK(BaseSDK):
@@ -74,6 +75,7 @@ class FirewallsSDK(BaseSDK):
74
75
 
75
76
  http_res = self.do_request(
76
77
  hook_ctx=HookContext(
78
+ config=self.sdk_configuration,
77
79
  base_url=base_url or "",
78
80
  operation_id="create-firewall",
79
81
  oauth2_scopes=[],
@@ -177,6 +179,7 @@ class FirewallsSDK(BaseSDK):
177
179
 
178
180
  http_res = await self.do_request_async(
179
181
  hook_ctx=HookContext(
182
+ config=self.sdk_configuration,
180
183
  base_url=base_url or "",
181
184
  operation_id="create-firewall",
182
185
  oauth2_scopes=[],
@@ -219,16 +222,20 @@ class FirewallsSDK(BaseSDK):
219
222
  self,
220
223
  *,
221
224
  filter_project: Optional[str] = None,
225
+ page_size: Optional[int] = 20,
226
+ page_number: Optional[int] = 1,
222
227
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
223
228
  server_url: Optional[str] = None,
224
229
  timeout_ms: Optional[int] = None,
225
230
  http_headers: Optional[Mapping[str, str]] = None,
226
- ) -> models.Firewalls:
231
+ ) -> Optional[models.ListFirewallsResponse]:
227
232
  r"""List firewalls
228
233
 
229
234
  List firewalls
230
235
 
231
236
  :param filter_project:
237
+ :param page_size: Number of items to return per page
238
+ :param page_number: Page number to return (starts at 1)
232
239
  :param retries: Override the default retry configuration for this method
233
240
  :param server_url: Override the default server URL for this method
234
241
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -246,6 +253,8 @@ class FirewallsSDK(BaseSDK):
246
253
 
247
254
  request = models.ListFirewallsRequest(
248
255
  filter_project=filter_project,
256
+ page_size=page_size,
257
+ page_number=page_number,
249
258
  )
250
259
 
251
260
  req = self._build_request(
@@ -274,6 +283,7 @@ class FirewallsSDK(BaseSDK):
274
283
 
275
284
  http_res = self.do_request(
276
285
  hook_ctx=HookContext(
286
+ config=self.sdk_configuration,
277
287
  base_url=base_url or "",
278
288
  operation_id="list-firewalls",
279
289
  oauth2_scopes=[],
@@ -286,8 +296,32 @@ class FirewallsSDK(BaseSDK):
286
296
  retry_config=retry_config,
287
297
  )
288
298
 
299
+ def next_func() -> Optional[models.ListFirewallsResponse]:
300
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
301
+ page = request.page_number if not request.page_number is None else 1
302
+ next_page = page + 1
303
+
304
+ if not http_res.text:
305
+ return None
306
+ results = JSONPath("$.data").parse(body)
307
+ if len(results) == 0 or len(results[0]) == 0:
308
+ return None
309
+ limit = request.page_size if not request.page_size is None else 20
310
+ if len(results[0]) < limit:
311
+ return None
312
+
313
+ return self.list(
314
+ filter_project=filter_project,
315
+ page_size=page_size,
316
+ page_number=next_page,
317
+ retries=retries,
318
+ )
319
+
289
320
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
290
- return utils.unmarshal_json(http_res.text, models.Firewalls)
321
+ return models.ListFirewallsResponse(
322
+ result=utils.unmarshal_json(http_res.text, models.Firewalls),
323
+ next=next_func,
324
+ )
291
325
  if utils.match_response(http_res, "4XX", "*"):
292
326
  http_res_text = utils.stream_to_text(http_res)
293
327
  raise models.APIError(
@@ -312,16 +346,20 @@ class FirewallsSDK(BaseSDK):
312
346
  self,
313
347
  *,
314
348
  filter_project: Optional[str] = None,
349
+ page_size: Optional[int] = 20,
350
+ page_number: Optional[int] = 1,
315
351
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
316
352
  server_url: Optional[str] = None,
317
353
  timeout_ms: Optional[int] = None,
318
354
  http_headers: Optional[Mapping[str, str]] = None,
319
- ) -> models.Firewalls:
355
+ ) -> Optional[models.ListFirewallsResponse]:
320
356
  r"""List firewalls
321
357
 
322
358
  List firewalls
323
359
 
324
360
  :param filter_project:
361
+ :param page_size: Number of items to return per page
362
+ :param page_number: Page number to return (starts at 1)
325
363
  :param retries: Override the default retry configuration for this method
326
364
  :param server_url: Override the default server URL for this method
327
365
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -339,6 +377,8 @@ class FirewallsSDK(BaseSDK):
339
377
 
340
378
  request = models.ListFirewallsRequest(
341
379
  filter_project=filter_project,
380
+ page_size=page_size,
381
+ page_number=page_number,
342
382
  )
343
383
 
344
384
  req = self._build_request_async(
@@ -367,6 +407,7 @@ class FirewallsSDK(BaseSDK):
367
407
 
368
408
  http_res = await self.do_request_async(
369
409
  hook_ctx=HookContext(
410
+ config=self.sdk_configuration,
370
411
  base_url=base_url or "",
371
412
  operation_id="list-firewalls",
372
413
  oauth2_scopes=[],
@@ -379,8 +420,32 @@ class FirewallsSDK(BaseSDK):
379
420
  retry_config=retry_config,
380
421
  )
381
422
 
423
+ def next_func() -> Optional[models.ListFirewallsResponse]:
424
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
425
+ page = request.page_number if not request.page_number is None else 1
426
+ next_page = page + 1
427
+
428
+ if not http_res.text:
429
+ return None
430
+ results = JSONPath("$.data").parse(body)
431
+ if len(results) == 0 or len(results[0]) == 0:
432
+ return None
433
+ limit = request.page_size if not request.page_size is None else 20
434
+ if len(results[0]) < limit:
435
+ return None
436
+
437
+ return self.list(
438
+ filter_project=filter_project,
439
+ page_size=page_size,
440
+ page_number=next_page,
441
+ retries=retries,
442
+ )
443
+
382
444
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
383
- return utils.unmarshal_json(http_res.text, models.Firewalls)
445
+ return models.ListFirewallsResponse(
446
+ result=utils.unmarshal_json(http_res.text, models.Firewalls),
447
+ next=next_func,
448
+ )
384
449
  if utils.match_response(http_res, "4XX", "*"):
385
450
  http_res_text = await utils.stream_to_text_async(http_res)
386
451
  raise models.APIError(
@@ -460,6 +525,7 @@ class FirewallsSDK(BaseSDK):
460
525
 
461
526
  http_res = self.do_request(
462
527
  hook_ctx=HookContext(
528
+ config=self.sdk_configuration,
463
529
  base_url=base_url or "",
464
530
  operation_id="get-firewall",
465
531
  oauth2_scopes=[],
@@ -557,6 +623,7 @@ class FirewallsSDK(BaseSDK):
557
623
 
558
624
  http_res = await self.do_request_async(
559
625
  hook_ctx=HookContext(
626
+ config=self.sdk_configuration,
560
627
  base_url=base_url or "",
561
628
  operation_id="get-firewall",
562
629
  oauth2_scopes=[],
@@ -669,6 +736,7 @@ class FirewallsSDK(BaseSDK):
669
736
 
670
737
  http_res = self.do_request(
671
738
  hook_ctx=HookContext(
739
+ config=self.sdk_configuration,
672
740
  base_url=base_url or "",
673
741
  operation_id="update-firewall",
674
742
  oauth2_scopes=[],
@@ -781,6 +849,7 @@ class FirewallsSDK(BaseSDK):
781
849
 
782
850
  http_res = await self.do_request_async(
783
851
  hook_ctx=HookContext(
852
+ config=self.sdk_configuration,
784
853
  base_url=base_url or "",
785
854
  operation_id="update-firewall",
786
855
  oauth2_scopes=[],
@@ -878,6 +947,7 @@ class FirewallsSDK(BaseSDK):
878
947
 
879
948
  http_res = self.do_request(
880
949
  hook_ctx=HookContext(
950
+ config=self.sdk_configuration,
881
951
  base_url=base_url or "",
882
952
  operation_id="delete-firewall",
883
953
  oauth2_scopes=[],
@@ -975,6 +1045,7 @@ class FirewallsSDK(BaseSDK):
975
1045
 
976
1046
  http_res = await self.do_request_async(
977
1047
  hook_ctx=HookContext(
1048
+ config=self.sdk_configuration,
978
1049
  base_url=base_url or "",
979
1050
  operation_id="delete-firewall",
980
1051
  oauth2_scopes=[],
@@ -1089,6 +1160,7 @@ class FirewallsSDK(BaseSDK):
1089
1160
 
1090
1161
  http_res = self.do_request(
1091
1162
  hook_ctx=HookContext(
1163
+ config=self.sdk_configuration,
1092
1164
  base_url=base_url or "",
1093
1165
  operation_id="create-firewall-assignment",
1094
1166
  oauth2_scopes=[],
@@ -1205,6 +1277,7 @@ class FirewallsSDK(BaseSDK):
1205
1277
 
1206
1278
  http_res = await self.do_request_async(
1207
1279
  hook_ctx=HookContext(
1280
+ config=self.sdk_configuration,
1208
1281
  base_url=base_url or "",
1209
1282
  operation_id="create-firewall-assignment",
1210
1283
  oauth2_scopes=[],
@@ -1249,16 +1322,20 @@ class FirewallsSDK(BaseSDK):
1249
1322
  self,
1250
1323
  *,
1251
1324
  firewall_id: str,
1325
+ page_size: Optional[int] = 20,
1326
+ page_number: Optional[int] = 1,
1252
1327
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
1253
1328
  server_url: Optional[str] = None,
1254
1329
  timeout_ms: Optional[int] = None,
1255
1330
  http_headers: Optional[Mapping[str, str]] = None,
1256
- ) -> models.FirewallServer:
1331
+ ) -> Optional[models.GetFirewallAssignmentsResponse]:
1257
1332
  r"""Firewall Assignments
1258
1333
 
1259
1334
  List servers assigned to a firewall
1260
1335
 
1261
1336
  :param firewall_id: The Firewall ID
1337
+ :param page_size: Number of items to return per page
1338
+ :param page_number: Page number to return (starts at 1)
1262
1339
  :param retries: Override the default retry configuration for this method
1263
1340
  :param server_url: Override the default server URL for this method
1264
1341
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -1276,6 +1353,8 @@ class FirewallsSDK(BaseSDK):
1276
1353
 
1277
1354
  request = models.GetFirewallAssignmentsRequest(
1278
1355
  firewall_id=firewall_id,
1356
+ page_size=page_size,
1357
+ page_number=page_number,
1279
1358
  )
1280
1359
 
1281
1360
  req = self._build_request(
@@ -1304,6 +1383,7 @@ class FirewallsSDK(BaseSDK):
1304
1383
 
1305
1384
  http_res = self.do_request(
1306
1385
  hook_ctx=HookContext(
1386
+ config=self.sdk_configuration,
1307
1387
  base_url=base_url or "",
1308
1388
  operation_id="get-firewall-assignments",
1309
1389
  oauth2_scopes=[],
@@ -1316,9 +1396,33 @@ class FirewallsSDK(BaseSDK):
1316
1396
  retry_config=retry_config,
1317
1397
  )
1318
1398
 
1399
+ def next_func() -> Optional[models.GetFirewallAssignmentsResponse]:
1400
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1401
+ page = request.page_number if not request.page_number is None else 1
1402
+ next_page = page + 1
1403
+
1404
+ if not http_res.text:
1405
+ return None
1406
+ results = JSONPath("$.data").parse(body)
1407
+ if len(results) == 0 or len(results[0]) == 0:
1408
+ return None
1409
+ limit = request.page_size if not request.page_size is None else 20
1410
+ if len(results[0]) < limit:
1411
+ return None
1412
+
1413
+ return self.list_assignments(
1414
+ firewall_id=firewall_id,
1415
+ page_size=page_size,
1416
+ page_number=next_page,
1417
+ retries=retries,
1418
+ )
1419
+
1319
1420
  response_data: Any = None
1320
1421
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
1321
- return utils.unmarshal_json(http_res.text, models.FirewallServer)
1422
+ return models.GetFirewallAssignmentsResponse(
1423
+ result=utils.unmarshal_json(http_res.text, models.FirewallAssignments),
1424
+ next=next_func,
1425
+ )
1322
1426
  if utils.match_response(http_res, "404", "application/vnd.api+json"):
1323
1427
  response_data = utils.unmarshal_json(http_res.text, models.ErrorObjectData)
1324
1428
  raise models.ErrorObject(data=response_data)
@@ -1346,16 +1450,20 @@ class FirewallsSDK(BaseSDK):
1346
1450
  self,
1347
1451
  *,
1348
1452
  firewall_id: str,
1453
+ page_size: Optional[int] = 20,
1454
+ page_number: Optional[int] = 1,
1349
1455
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
1350
1456
  server_url: Optional[str] = None,
1351
1457
  timeout_ms: Optional[int] = None,
1352
1458
  http_headers: Optional[Mapping[str, str]] = None,
1353
- ) -> models.FirewallServer:
1459
+ ) -> Optional[models.GetFirewallAssignmentsResponse]:
1354
1460
  r"""Firewall Assignments
1355
1461
 
1356
1462
  List servers assigned to a firewall
1357
1463
 
1358
1464
  :param firewall_id: The Firewall ID
1465
+ :param page_size: Number of items to return per page
1466
+ :param page_number: Page number to return (starts at 1)
1359
1467
  :param retries: Override the default retry configuration for this method
1360
1468
  :param server_url: Override the default server URL for this method
1361
1469
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -1373,6 +1481,8 @@ class FirewallsSDK(BaseSDK):
1373
1481
 
1374
1482
  request = models.GetFirewallAssignmentsRequest(
1375
1483
  firewall_id=firewall_id,
1484
+ page_size=page_size,
1485
+ page_number=page_number,
1376
1486
  )
1377
1487
 
1378
1488
  req = self._build_request_async(
@@ -1401,6 +1511,7 @@ class FirewallsSDK(BaseSDK):
1401
1511
 
1402
1512
  http_res = await self.do_request_async(
1403
1513
  hook_ctx=HookContext(
1514
+ config=self.sdk_configuration,
1404
1515
  base_url=base_url or "",
1405
1516
  operation_id="get-firewall-assignments",
1406
1517
  oauth2_scopes=[],
@@ -1413,9 +1524,33 @@ class FirewallsSDK(BaseSDK):
1413
1524
  retry_config=retry_config,
1414
1525
  )
1415
1526
 
1527
+ def next_func() -> Optional[models.GetFirewallAssignmentsResponse]:
1528
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
1529
+ page = request.page_number if not request.page_number is None else 1
1530
+ next_page = page + 1
1531
+
1532
+ if not http_res.text:
1533
+ return None
1534
+ results = JSONPath("$.data").parse(body)
1535
+ if len(results) == 0 or len(results[0]) == 0:
1536
+ return None
1537
+ limit = request.page_size if not request.page_size is None else 20
1538
+ if len(results[0]) < limit:
1539
+ return None
1540
+
1541
+ return self.list_assignments(
1542
+ firewall_id=firewall_id,
1543
+ page_size=page_size,
1544
+ page_number=next_page,
1545
+ retries=retries,
1546
+ )
1547
+
1416
1548
  response_data: Any = None
1417
1549
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
1418
- return utils.unmarshal_json(http_res.text, models.FirewallServer)
1550
+ return models.GetFirewallAssignmentsResponse(
1551
+ result=utils.unmarshal_json(http_res.text, models.FirewallAssignments),
1552
+ next=next_func,
1553
+ )
1419
1554
  if utils.match_response(http_res, "404", "application/vnd.api+json"):
1420
1555
  response_data = utils.unmarshal_json(http_res.text, models.ErrorObjectData)
1421
1556
  raise models.ErrorObject(data=response_data)
@@ -1501,6 +1636,7 @@ class FirewallsSDK(BaseSDK):
1501
1636
 
1502
1637
  http_res = self.do_request(
1503
1638
  hook_ctx=HookContext(
1639
+ config=self.sdk_configuration,
1504
1640
  base_url=base_url or "",
1505
1641
  operation_id="delete-firewall-assignment",
1506
1642
  oauth2_scopes=[],
@@ -1601,6 +1737,7 @@ class FirewallsSDK(BaseSDK):
1601
1737
 
1602
1738
  http_res = await self.do_request_async(
1603
1739
  hook_ctx=HookContext(
1740
+ config=self.sdk_configuration,
1604
1741
  base_url=base_url or "",
1605
1742
  operation_id="delete-firewall-assignment",
1606
1743
  oauth2_scopes=[],
@@ -2,7 +2,6 @@
2
2
 
3
3
  # pyright: reportReturnType = false
4
4
  import asyncio
5
- from concurrent.futures import ThreadPoolExecutor
6
5
  from typing_extensions import Protocol, runtime_checkable
7
6
  import httpx
8
7
  from typing import Any, Optional, Union
@@ -116,21 +115,12 @@ def close_clients(
116
115
  pass
117
116
 
118
117
  if async_client is not None and not async_client_supplied:
119
- is_async = False
120
118
  try:
121
- asyncio.get_running_loop()
122
- is_async = True
119
+ loop = asyncio.get_running_loop()
120
+ asyncio.run_coroutine_threadsafe(async_client.aclose(), loop)
123
121
  except RuntimeError:
124
- pass
125
-
126
- try:
127
- # If this function is called in an async loop then start another
128
- # loop in a separate thread to close the async http client.
129
- if is_async:
130
- with ThreadPoolExecutor(max_workers=1) as executor:
131
- future = executor.submit(asyncio.run, async_client.aclose())
132
- future.result()
133
- else:
122
+ try:
134
123
  asyncio.run(async_client.aclose())
135
- except Exception:
136
- pass
124
+ except RuntimeError:
125
+ # best effort
126
+ pass
@@ -1,11 +1,12 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from .basesdk import BaseSDK
4
+ from jsonpath import JSONPath
4
5
  from latitudesh_python_sdk import models, utils
5
6
  from latitudesh_python_sdk._hooks import HookContext
6
7
  from latitudesh_python_sdk.types import OptionalNullable, UNSET
7
8
  from latitudesh_python_sdk.utils import get_security_from_env
8
- from typing import Any, Mapping, Optional
9
+ from typing import Any, Dict, List, Mapping, Optional, Union
9
10
 
10
11
 
11
12
  class IPAddressesSDK(BaseSDK):
@@ -19,11 +20,13 @@ class IPAddressesSDK(BaseSDK):
19
20
  filter_location: Optional[str] = None,
20
21
  filter_address: Optional[str] = None,
21
22
  extra_fields_ip_addresses: Optional[str] = None,
23
+ page_size: Optional[int] = 20,
24
+ page_number: Optional[int] = 1,
22
25
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
23
26
  server_url: Optional[str] = None,
24
27
  timeout_ms: Optional[int] = None,
25
28
  http_headers: Optional[Mapping[str, str]] = None,
26
- ) -> models.IPAddresses:
29
+ ) -> Optional[models.GetIpsResponse]:
27
30
  r"""List IPs
28
31
 
29
32
  List all Management and Additional IP Addresses.
@@ -39,6 +42,8 @@ class IPAddressesSDK(BaseSDK):
39
42
  :param filter_location: The site slug to filter by
40
43
  :param filter_address: The address of IP to filter by starts_with
41
44
  :param extra_fields_ip_addresses: The `region` and `server` are provided as extra attributes that is lazy loaded. To request it, just set `extra_fields[ip_addresses]=region,server` in the query string.
45
+ :param page_size: Number of items to return per page
46
+ :param page_number: Page number to return (starts at 1)
42
47
  :param retries: Override the default retry configuration for this method
43
48
  :param server_url: Override the default server URL for this method
44
49
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -62,6 +67,8 @@ class IPAddressesSDK(BaseSDK):
62
67
  filter_location=filter_location,
63
68
  filter_address=filter_address,
64
69
  extra_fields_ip_addresses=extra_fields_ip_addresses,
70
+ page_size=page_size,
71
+ page_number=page_number,
65
72
  )
66
73
 
67
74
  req = self._build_request(
@@ -90,6 +97,7 @@ class IPAddressesSDK(BaseSDK):
90
97
 
91
98
  http_res = self.do_request(
92
99
  hook_ctx=HookContext(
100
+ config=self.sdk_configuration,
93
101
  base_url=base_url or "",
94
102
  operation_id="get-ips",
95
103
  oauth2_scopes=[],
@@ -102,9 +110,39 @@ class IPAddressesSDK(BaseSDK):
102
110
  retry_config=retry_config,
103
111
  )
104
112
 
113
+ def next_func() -> Optional[models.GetIpsResponse]:
114
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
115
+ page = request.page_number if not request.page_number is None else 1
116
+ next_page = page + 1
117
+
118
+ if not http_res.text:
119
+ return None
120
+ results = JSONPath("$.data").parse(body)
121
+ if len(results) == 0 or len(results[0]) == 0:
122
+ return None
123
+ limit = request.page_size if not request.page_size is None else 20
124
+ if len(results[0]) < limit:
125
+ return None
126
+
127
+ return self.list(
128
+ filter_server=filter_server,
129
+ filter_project=filter_project,
130
+ filter_family=filter_family,
131
+ filter_type=filter_type,
132
+ filter_location=filter_location,
133
+ filter_address=filter_address,
134
+ extra_fields_ip_addresses=extra_fields_ip_addresses,
135
+ page_size=page_size,
136
+ page_number=next_page,
137
+ retries=retries,
138
+ )
139
+
105
140
  response_data: Any = None
106
141
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
107
- return utils.unmarshal_json(http_res.text, models.IPAddresses)
142
+ return models.GetIpsResponse(
143
+ result=utils.unmarshal_json(http_res.text, models.IPAddresses),
144
+ next=next_func,
145
+ )
108
146
  if utils.match_response(http_res, "422", "application/vnd.api+json"):
109
147
  response_data = utils.unmarshal_json(http_res.text, models.ErrorObjectData)
110
148
  raise models.ErrorObject(data=response_data)
@@ -138,11 +176,13 @@ class IPAddressesSDK(BaseSDK):
138
176
  filter_location: Optional[str] = None,
139
177
  filter_address: Optional[str] = None,
140
178
  extra_fields_ip_addresses: Optional[str] = None,
179
+ page_size: Optional[int] = 20,
180
+ page_number: Optional[int] = 1,
141
181
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
142
182
  server_url: Optional[str] = None,
143
183
  timeout_ms: Optional[int] = None,
144
184
  http_headers: Optional[Mapping[str, str]] = None,
145
- ) -> models.IPAddresses:
185
+ ) -> Optional[models.GetIpsResponse]:
146
186
  r"""List IPs
147
187
 
148
188
  List all Management and Additional IP Addresses.
@@ -158,6 +198,8 @@ class IPAddressesSDK(BaseSDK):
158
198
  :param filter_location: The site slug to filter by
159
199
  :param filter_address: The address of IP to filter by starts_with
160
200
  :param extra_fields_ip_addresses: The `region` and `server` are provided as extra attributes that is lazy loaded. To request it, just set `extra_fields[ip_addresses]=region,server` in the query string.
201
+ :param page_size: Number of items to return per page
202
+ :param page_number: Page number to return (starts at 1)
161
203
  :param retries: Override the default retry configuration for this method
162
204
  :param server_url: Override the default server URL for this method
163
205
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -181,6 +223,8 @@ class IPAddressesSDK(BaseSDK):
181
223
  filter_location=filter_location,
182
224
  filter_address=filter_address,
183
225
  extra_fields_ip_addresses=extra_fields_ip_addresses,
226
+ page_size=page_size,
227
+ page_number=page_number,
184
228
  )
185
229
 
186
230
  req = self._build_request_async(
@@ -209,6 +253,7 @@ class IPAddressesSDK(BaseSDK):
209
253
 
210
254
  http_res = await self.do_request_async(
211
255
  hook_ctx=HookContext(
256
+ config=self.sdk_configuration,
212
257
  base_url=base_url or "",
213
258
  operation_id="get-ips",
214
259
  oauth2_scopes=[],
@@ -221,9 +266,39 @@ class IPAddressesSDK(BaseSDK):
221
266
  retry_config=retry_config,
222
267
  )
223
268
 
269
+ def next_func() -> Optional[models.GetIpsResponse]:
270
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
271
+ page = request.page_number if not request.page_number is None else 1
272
+ next_page = page + 1
273
+
274
+ if not http_res.text:
275
+ return None
276
+ results = JSONPath("$.data").parse(body)
277
+ if len(results) == 0 or len(results[0]) == 0:
278
+ return None
279
+ limit = request.page_size if not request.page_size is None else 20
280
+ if len(results[0]) < limit:
281
+ return None
282
+
283
+ return self.list(
284
+ filter_server=filter_server,
285
+ filter_project=filter_project,
286
+ filter_family=filter_family,
287
+ filter_type=filter_type,
288
+ filter_location=filter_location,
289
+ filter_address=filter_address,
290
+ extra_fields_ip_addresses=extra_fields_ip_addresses,
291
+ page_size=page_size,
292
+ page_number=next_page,
293
+ retries=retries,
294
+ )
295
+
224
296
  response_data: Any = None
225
297
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
226
- return utils.unmarshal_json(http_res.text, models.IPAddresses)
298
+ return models.GetIpsResponse(
299
+ result=utils.unmarshal_json(http_res.text, models.IPAddresses),
300
+ next=next_func,
301
+ )
227
302
  if utils.match_response(http_res, "422", "application/vnd.api+json"):
228
303
  response_data = utils.unmarshal_json(http_res.text, models.ErrorObjectData)
229
304
  raise models.ErrorObject(data=response_data)
@@ -309,6 +384,7 @@ class IPAddressesSDK(BaseSDK):
309
384
 
310
385
  http_res = self.do_request(
311
386
  hook_ctx=HookContext(
387
+ config=self.sdk_configuration,
312
388
  base_url=base_url or "",
313
389
  operation_id="get-ip",
314
390
  oauth2_scopes=[],
@@ -409,6 +485,7 @@ class IPAddressesSDK(BaseSDK):
409
485
 
410
486
  http_res = await self.do_request_async(
411
487
  hook_ctx=HookContext(
488
+ config=self.sdk_configuration,
412
489
  base_url=base_url or "",
413
490
  operation_id="get-ip",
414
491
  oauth2_scopes=[],