latitudesh-python-sdk 0.0.8__py3-none-any.whl → 1.1.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 (38) hide show
  1. latitudesh_python_sdk/_version.py +3 -3
  2. latitudesh_python_sdk/events_sdk.py +84 -5
  3. latitudesh_python_sdk/firewalls_sdk.py +130 -9
  4. latitudesh_python_sdk/ipaddresses_sdk.py +78 -5
  5. latitudesh_python_sdk/models/__init__.py +108 -19
  6. latitudesh_python_sdk/models/billing_usage.py +3 -0
  7. latitudesh_python_sdk/models/get_bandwidth_plansop.py +30 -1
  8. latitudesh_python_sdk/models/get_eventsop.py +29 -1
  9. latitudesh_python_sdk/models/get_firewall_assignmentsop.py +37 -2
  10. latitudesh_python_sdk/models/get_ipsop.py +30 -1
  11. latitudesh_python_sdk/models/get_plans_operating_systemop.py +37 -2
  12. latitudesh_python_sdk/models/get_projectsop.py +30 -1
  13. latitudesh_python_sdk/models/get_regionsop.py +42 -0
  14. latitudesh_python_sdk/models/get_rolesop.py +37 -2
  15. latitudesh_python_sdk/models/get_serversop.py +30 -1
  16. latitudesh_python_sdk/models/get_team_membersop.py +42 -0
  17. latitudesh_python_sdk/models/get_virtual_networks_assignmentsop.py +33 -1
  18. latitudesh_python_sdk/models/get_virtual_networksop.py +30 -1
  19. latitudesh_python_sdk/models/list_firewallsop.py +30 -1
  20. latitudesh_python_sdk/models/server.py +11 -11
  21. latitudesh_python_sdk/models/virtual_networks.py +1 -1
  22. latitudesh_python_sdk/operatingsystems_sdk.py +76 -9
  23. latitudesh_python_sdk/plans.py +68 -5
  24. latitudesh_python_sdk/privatenetworks.py +142 -9
  25. latitudesh_python_sdk/projects_sdk.py +78 -5
  26. latitudesh_python_sdk/regions_sdk.py +74 -7
  27. latitudesh_python_sdk/roles.py +74 -7
  28. latitudesh_python_sdk/servers_sdk.py +94 -5
  29. latitudesh_python_sdk/teamsmembers.py +74 -7
  30. latitudesh_python_sdk/utils/__init__.py +1 -0
  31. latitudesh_python_sdk/utils/datetimes.py +23 -0
  32. latitudesh_python_sdk/utils/serializers.py +32 -3
  33. {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/METADATA +31 -5
  34. {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/RECORD +38 -35
  35. latitudesh_python_sdk/models/{deploy_config_error.py → deploy_config.py} +8 -8
  36. latitudesh_python_sdk/models/{virtual_network_error.py → virtual_network.py} +14 -14
  37. {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/LICENSE +0 -0
  38. {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/WHEEL +0 -0
@@ -3,8 +3,33 @@
3
3
  from __future__ import annotations
4
4
  from .role_data import RoleData, RoleDataTypedDict
5
5
  from latitudesh_python_sdk.types import BaseModel
6
- from typing import List, Optional
7
- from typing_extensions import NotRequired, TypedDict
6
+ from latitudesh_python_sdk.utils import FieldMetadata, QueryParamMetadata
7
+ import pydantic
8
+ from typing import Callable, List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class GetRolesRequestTypedDict(TypedDict):
13
+ page_size: NotRequired[int]
14
+ r"""Number of items to return per page"""
15
+ page_number: NotRequired[int]
16
+ r"""Page number to return (starts at 1)"""
17
+
18
+
19
+ class GetRolesRequest(BaseModel):
20
+ page_size: Annotated[
21
+ Optional[int],
22
+ pydantic.Field(alias="page[size]"),
23
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
24
+ ] = 20
25
+ r"""Number of items to return per page"""
26
+
27
+ page_number: Annotated[
28
+ Optional[int],
29
+ pydantic.Field(alias="page[number]"),
30
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
31
+ ] = 1
32
+ r"""Page number to return (starts at 1)"""
8
33
 
9
34
 
10
35
  class GetRolesResponseBodyTypedDict(TypedDict):
@@ -17,3 +42,13 @@ class GetRolesResponseBody(BaseModel):
17
42
  r"""Success"""
18
43
 
19
44
  data: Optional[List[RoleData]] = None
45
+
46
+
47
+ class GetRolesResponseTypedDict(TypedDict):
48
+ result: GetRolesResponseBodyTypedDict
49
+
50
+
51
+ class GetRolesResponse(BaseModel):
52
+ next: Callable[[], Optional[GetRolesResponse]]
53
+
54
+ result: GetRolesResponseBody
@@ -1,10 +1,11 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .servers import Servers, ServersTypedDict
4
5
  from latitudesh_python_sdk.types import BaseModel
5
6
  from latitudesh_python_sdk.utils import FieldMetadata, QueryParamMetadata
6
7
  import pydantic
7
- from typing import Optional
8
+ from typing import Callable, Optional
8
9
  from typing_extensions import Annotated, NotRequired, TypedDict
9
10
 
10
11
 
@@ -43,6 +44,10 @@ class GetServersRequestTypedDict(TypedDict):
43
44
  r"""The tags ids to filter by, separated by comma, e.g. `filter[tags]=tag_1,tag_2`will return servers with `tag_1` AND `tag_2`"""
44
45
  extra_fields_servers: NotRequired[str]
45
46
  r"""The `credentials` are provided as extra attributes that is lazy loaded. To request it, just set `extra_fields[servers]=credentials` in the query string."""
47
+ page_size: NotRequired[int]
48
+ r"""Number of items to return per page"""
49
+ page_number: NotRequired[int]
50
+ r"""Page number to return (starts at 1)"""
46
51
 
47
52
 
48
53
  class GetServersRequest(BaseModel):
@@ -154,3 +159,27 @@ class GetServersRequest(BaseModel):
154
159
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
155
160
  ] = None
156
161
  r"""The `credentials` are provided as extra attributes that is lazy loaded. To request it, just set `extra_fields[servers]=credentials` in the query string."""
162
+
163
+ page_size: Annotated[
164
+ Optional[int],
165
+ pydantic.Field(alias="page[size]"),
166
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
167
+ ] = 20
168
+ r"""Number of items to return per page"""
169
+
170
+ page_number: Annotated[
171
+ Optional[int],
172
+ pydantic.Field(alias="page[number]"),
173
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
174
+ ] = 1
175
+ r"""Page number to return (starts at 1)"""
176
+
177
+
178
+ class GetServersResponseTypedDict(TypedDict):
179
+ result: ServersTypedDict
180
+
181
+
182
+ class GetServersResponse(BaseModel):
183
+ next: Callable[[], Optional[GetServersResponse]]
184
+
185
+ result: Servers
@@ -0,0 +1,42 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .team_members import TeamMembers, TeamMembersTypedDict
5
+ from latitudesh_python_sdk.types import BaseModel
6
+ from latitudesh_python_sdk.utils import FieldMetadata, QueryParamMetadata
7
+ import pydantic
8
+ from typing import Callable, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class GetTeamMembersRequestTypedDict(TypedDict):
13
+ page_size: NotRequired[int]
14
+ r"""Number of items to return per page"""
15
+ page_number: NotRequired[int]
16
+ r"""Page number to return (starts at 1)"""
17
+
18
+
19
+ class GetTeamMembersRequest(BaseModel):
20
+ page_size: Annotated[
21
+ Optional[int],
22
+ pydantic.Field(alias="page[size]"),
23
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
24
+ ] = 20
25
+ r"""Number of items to return per page"""
26
+
27
+ page_number: Annotated[
28
+ Optional[int],
29
+ pydantic.Field(alias="page[number]"),
30
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
31
+ ] = 1
32
+ r"""Page number to return (starts at 1)"""
33
+
34
+
35
+ class GetTeamMembersResponseTypedDict(TypedDict):
36
+ result: TeamMembersTypedDict
37
+
38
+
39
+ class GetTeamMembersResponse(BaseModel):
40
+ next: Callable[[], Optional[GetTeamMembersResponse]]
41
+
42
+ result: TeamMembers
@@ -1,10 +1,14 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .virtual_network_assignments import (
5
+ VirtualNetworkAssignments,
6
+ VirtualNetworkAssignmentsTypedDict,
7
+ )
4
8
  from latitudesh_python_sdk.types import BaseModel
5
9
  from latitudesh_python_sdk.utils import FieldMetadata, QueryParamMetadata
6
10
  import pydantic
7
- from typing import Optional
11
+ from typing import Callable, Optional
8
12
  from typing_extensions import Annotated, NotRequired, TypedDict
9
13
 
10
14
 
@@ -15,6 +19,10 @@ class GetVirtualNetworksAssignmentsRequestTypedDict(TypedDict):
15
19
  r"""The vlan ID to filter by"""
16
20
  filter_virtual_network_id: NotRequired[str]
17
21
  r"""The virtual network ID to filter by"""
22
+ page_size: NotRequired[int]
23
+ r"""Number of items to return per page"""
24
+ page_number: NotRequired[int]
25
+ r"""Page number to return (starts at 1)"""
18
26
 
19
27
 
20
28
  class GetVirtualNetworksAssignmentsRequest(BaseModel):
@@ -38,3 +46,27 @@ class GetVirtualNetworksAssignmentsRequest(BaseModel):
38
46
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
39
47
  ] = None
40
48
  r"""The virtual network ID to filter by"""
49
+
50
+ page_size: Annotated[
51
+ Optional[int],
52
+ pydantic.Field(alias="page[size]"),
53
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
54
+ ] = 20
55
+ r"""Number of items to return per page"""
56
+
57
+ page_number: Annotated[
58
+ Optional[int],
59
+ pydantic.Field(alias="page[number]"),
60
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
61
+ ] = 1
62
+ r"""Page number to return (starts at 1)"""
63
+
64
+
65
+ class GetVirtualNetworksAssignmentsResponseTypedDict(TypedDict):
66
+ result: VirtualNetworkAssignmentsTypedDict
67
+
68
+
69
+ class GetVirtualNetworksAssignmentsResponse(BaseModel):
70
+ next: Callable[[], Optional[GetVirtualNetworksAssignmentsResponse]]
71
+
72
+ result: VirtualNetworkAssignments
@@ -1,10 +1,11 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .virtual_networks import VirtualNetworks, VirtualNetworksTypedDict
4
5
  from latitudesh_python_sdk.types import BaseModel
5
6
  from latitudesh_python_sdk.utils import FieldMetadata, QueryParamMetadata
6
7
  import pydantic
7
- from typing import Optional
8
+ from typing import Callable, Optional
8
9
  from typing_extensions import Annotated, NotRequired, TypedDict
9
10
 
10
11
 
@@ -15,6 +16,10 @@ class GetVirtualNetworksRequestTypedDict(TypedDict):
15
16
  r"""The project id or slug to filter by"""
16
17
  filter_tags: NotRequired[str]
17
18
  r"""The tags ids to filter by, separated by comma, e.g. `filter[tags]=tag_1,tag_2`will return ssh keys with `tag_1` AND `tag_2`"""
19
+ page_size: NotRequired[int]
20
+ r"""Number of items to return per page"""
21
+ page_number: NotRequired[int]
22
+ r"""Page number to return (starts at 1)"""
18
23
 
19
24
 
20
25
  class GetVirtualNetworksRequest(BaseModel):
@@ -38,3 +43,27 @@ class GetVirtualNetworksRequest(BaseModel):
38
43
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
39
44
  ] = None
40
45
  r"""The tags ids to filter by, separated by comma, e.g. `filter[tags]=tag_1,tag_2`will return ssh keys with `tag_1` AND `tag_2`"""
46
+
47
+ page_size: Annotated[
48
+ Optional[int],
49
+ pydantic.Field(alias="page[size]"),
50
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
51
+ ] = 20
52
+ r"""Number of items to return per page"""
53
+
54
+ page_number: Annotated[
55
+ Optional[int],
56
+ pydantic.Field(alias="page[number]"),
57
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
58
+ ] = 1
59
+ r"""Page number to return (starts at 1)"""
60
+
61
+
62
+ class GetVirtualNetworksResponseTypedDict(TypedDict):
63
+ result: VirtualNetworksTypedDict
64
+
65
+
66
+ class GetVirtualNetworksResponse(BaseModel):
67
+ next: Callable[[], Optional[GetVirtualNetworksResponse]]
68
+
69
+ result: VirtualNetworks
@@ -1,15 +1,20 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
+ from .firewalls import Firewalls, FirewallsTypedDict
4
5
  from latitudesh_python_sdk.types import BaseModel
5
6
  from latitudesh_python_sdk.utils import FieldMetadata, QueryParamMetadata
6
7
  import pydantic
7
- from typing import Optional
8
+ from typing import Callable, Optional
8
9
  from typing_extensions import Annotated, NotRequired, TypedDict
9
10
 
10
11
 
11
12
  class ListFirewallsRequestTypedDict(TypedDict):
12
13
  filter_project: NotRequired[str]
14
+ page_size: NotRequired[int]
15
+ r"""Number of items to return per page"""
16
+ page_number: NotRequired[int]
17
+ r"""Page number to return (starts at 1)"""
13
18
 
14
19
 
15
20
  class ListFirewallsRequest(BaseModel):
@@ -18,3 +23,27 @@ class ListFirewallsRequest(BaseModel):
18
23
  pydantic.Field(alias="filter[project]"),
19
24
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
20
25
  ] = None
26
+
27
+ page_size: Annotated[
28
+ Optional[int],
29
+ pydantic.Field(alias="page[size]"),
30
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
31
+ ] = 20
32
+ r"""Number of items to return per page"""
33
+
34
+ page_number: Annotated[
35
+ Optional[int],
36
+ pydantic.Field(alias="page[number]"),
37
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
38
+ ] = 1
39
+ r"""Page number to return (starts at 1)"""
40
+
41
+
42
+ class ListFirewallsResponseTypedDict(TypedDict):
43
+ result: FirewallsTypedDict
44
+
45
+
46
+ class ListFirewallsResponse(BaseModel):
47
+ next: Callable[[], Optional[ListFirewallsResponse]]
48
+
49
+ result: Firewalls
@@ -27,17 +27,6 @@ class Server(BaseModel):
27
27
  meta: Optional[ServerMeta] = None
28
28
 
29
29
 
30
- class Server1TypedDict(TypedDict):
31
- data: NotRequired[ServerDataTypedDict]
32
- meta: NotRequired[ServerMetaTypedDict]
33
-
34
-
35
- class Server1(BaseModel):
36
- data: Optional[ServerData] = None
37
-
38
- meta: Optional[ServerMeta] = None
39
-
40
-
41
30
  class ServerErrorData(BaseModel):
42
31
  data: Optional[ServerData] = None
43
32
 
@@ -52,3 +41,14 @@ class ServerError(Exception):
52
41
 
53
42
  def __str__(self) -> str:
54
43
  return utils.marshal_json(self.data, ServerErrorData)
44
+
45
+
46
+ class Server1TypedDict(TypedDict):
47
+ data: NotRequired[ServerDataTypedDict]
48
+ meta: NotRequired[ServerMetaTypedDict]
49
+
50
+
51
+ class Server1(BaseModel):
52
+ data: Optional[ServerData] = None
53
+
54
+ meta: Optional[ServerMeta] = None
@@ -1,7 +1,7 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from .virtual_network_error import VirtualNetwork, VirtualNetworkTypedDict
4
+ from .virtual_network import VirtualNetwork, VirtualNetworkTypedDict
5
5
  from latitudesh_python_sdk.types import BaseModel
6
6
  from typing import List, Optional
7
7
  from typing_extensions import NotRequired, TypedDict
@@ -1,27 +1,32 @@
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 Mapping, Optional
9
+ from typing import Any, Dict, List, Mapping, Optional, Union
9
10
 
10
11
 
11
12
  class OperatingSystemsSDK(BaseSDK):
12
13
  def list(
13
14
  self,
14
15
  *,
16
+ page_size: Optional[int] = 20,
17
+ page_number: Optional[int] = 1,
15
18
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
16
19
  server_url: Optional[str] = None,
17
20
  timeout_ms: Optional[int] = None,
18
21
  http_headers: Optional[Mapping[str, str]] = None,
19
- ) -> models.GetPlansOperatingSystemResponseBody:
22
+ ) -> Optional[models.GetPlansOperatingSystemResponse]:
20
23
  r"""List all operating systems available
21
24
 
22
25
  Lists all operating systems available to deploy and reinstall.
23
26
 
24
27
 
28
+ :param page_size: Number of items to return per page
29
+ :param page_number: Page number to return (starts at 1)
25
30
  :param retries: Override the default retry configuration for this method
26
31
  :param server_url: Override the default server URL for this method
27
32
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -36,12 +41,18 @@ class OperatingSystemsSDK(BaseSDK):
36
41
  base_url = server_url
37
42
  else:
38
43
  base_url = self._get_url(base_url, url_variables)
44
+
45
+ request = models.GetPlansOperatingSystemRequest(
46
+ page_size=page_size,
47
+ page_number=page_number,
48
+ )
49
+
39
50
  req = self._build_request(
40
51
  method="GET",
41
52
  path="/plans/operating_systems",
42
53
  base_url=base_url,
43
54
  url_variables=url_variables,
44
- request=None,
55
+ request=request,
45
56
  request_body_required=False,
46
57
  request_has_path_params=False,
47
58
  request_has_query_params=True,
@@ -74,9 +85,32 @@ class OperatingSystemsSDK(BaseSDK):
74
85
  retry_config=retry_config,
75
86
  )
76
87
 
88
+ def next_func() -> Optional[models.GetPlansOperatingSystemResponse]:
89
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
90
+ page = request.page_number if not request.page_number is None else 1
91
+ next_page = page + 1
92
+
93
+ if not http_res.text:
94
+ return None
95
+ results = JSONPath("$.data").parse(body)
96
+ if len(results) == 0 or len(results[0]) == 0:
97
+ return None
98
+ limit = request.page_size if not request.page_size is None else 20
99
+ if len(results[0]) < limit:
100
+ return None
101
+
102
+ return self.list(
103
+ page_size=page_size,
104
+ page_number=next_page,
105
+ retries=retries,
106
+ )
107
+
77
108
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
78
- return utils.unmarshal_json(
79
- http_res.text, models.GetPlansOperatingSystemResponseBody
109
+ return models.GetPlansOperatingSystemResponse(
110
+ result=utils.unmarshal_json(
111
+ http_res.text, models.GetPlansOperatingSystemResponseBody
112
+ ),
113
+ next=next_func,
80
114
  )
81
115
  if utils.match_response(http_res, "4XX", "*"):
82
116
  http_res_text = utils.stream_to_text(http_res)
@@ -101,16 +135,20 @@ class OperatingSystemsSDK(BaseSDK):
101
135
  async def list_async(
102
136
  self,
103
137
  *,
138
+ page_size: Optional[int] = 20,
139
+ page_number: Optional[int] = 1,
104
140
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
105
141
  server_url: Optional[str] = None,
106
142
  timeout_ms: Optional[int] = None,
107
143
  http_headers: Optional[Mapping[str, str]] = None,
108
- ) -> models.GetPlansOperatingSystemResponseBody:
144
+ ) -> Optional[models.GetPlansOperatingSystemResponse]:
109
145
  r"""List all operating systems available
110
146
 
111
147
  Lists all operating systems available to deploy and reinstall.
112
148
 
113
149
 
150
+ :param page_size: Number of items to return per page
151
+ :param page_number: Page number to return (starts at 1)
114
152
  :param retries: Override the default retry configuration for this method
115
153
  :param server_url: Override the default server URL for this method
116
154
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -125,12 +163,18 @@ class OperatingSystemsSDK(BaseSDK):
125
163
  base_url = server_url
126
164
  else:
127
165
  base_url = self._get_url(base_url, url_variables)
166
+
167
+ request = models.GetPlansOperatingSystemRequest(
168
+ page_size=page_size,
169
+ page_number=page_number,
170
+ )
171
+
128
172
  req = self._build_request_async(
129
173
  method="GET",
130
174
  path="/plans/operating_systems",
131
175
  base_url=base_url,
132
176
  url_variables=url_variables,
133
- request=None,
177
+ request=request,
134
178
  request_body_required=False,
135
179
  request_has_path_params=False,
136
180
  request_has_query_params=True,
@@ -163,9 +207,32 @@ class OperatingSystemsSDK(BaseSDK):
163
207
  retry_config=retry_config,
164
208
  )
165
209
 
210
+ def next_func() -> Optional[models.GetPlansOperatingSystemResponse]:
211
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
212
+ page = request.page_number if not request.page_number is None else 1
213
+ next_page = page + 1
214
+
215
+ if not http_res.text:
216
+ return None
217
+ results = JSONPath("$.data").parse(body)
218
+ if len(results) == 0 or len(results[0]) == 0:
219
+ return None
220
+ limit = request.page_size if not request.page_size is None else 20
221
+ if len(results[0]) < limit:
222
+ return None
223
+
224
+ return self.list(
225
+ page_size=page_size,
226
+ page_number=next_page,
227
+ retries=retries,
228
+ )
229
+
166
230
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
167
- return utils.unmarshal_json(
168
- http_res.text, models.GetPlansOperatingSystemResponseBody
231
+ return models.GetPlansOperatingSystemResponse(
232
+ result=utils.unmarshal_json(
233
+ http_res.text, models.GetPlansOperatingSystemResponseBody
234
+ ),
235
+ next=next_func,
169
236
  )
170
237
  if utils.match_response(http_res, "4XX", "*"):
171
238
  http_res_text = await utils.stream_to_text_async(http_res)
@@ -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 BaseModel, OptionalNullable, UNSET
7
8
  from latitudesh_python_sdk.utils import get_security_from_env
8
- from typing import Any, Mapping, Optional, Union, cast
9
+ from typing import Any, Dict, List, Mapping, Optional, Union, cast
9
10
 
10
11
 
11
12
  class Plans(BaseSDK):
@@ -434,17 +435,21 @@ class Plans(BaseSDK):
434
435
  *,
435
436
  api_version: Optional[str] = "2023-06-01",
436
437
  filter_id: Optional[str] = None,
438
+ page_size: Optional[int] = 20,
439
+ page_number: Optional[int] = 1,
437
440
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
438
441
  server_url: Optional[str] = None,
439
442
  timeout_ms: Optional[int] = None,
440
443
  http_headers: Optional[Mapping[str, str]] = None,
441
- ) -> models.BandwidthPlans:
444
+ ) -> Optional[models.GetBandwidthPlansResponse]:
442
445
  r"""List all bandwidth plans
443
446
 
444
447
  Lists all bandwidth plans.
445
448
 
446
449
  :param api_version:
447
450
  :param filter_id: The plan ID to filter by
451
+ :param page_size: Number of items to return per page
452
+ :param page_number: Page number to return (starts at 1)
448
453
  :param retries: Override the default retry configuration for this method
449
454
  :param server_url: Override the default server URL for this method
450
455
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -463,6 +468,8 @@ class Plans(BaseSDK):
463
468
  request = models.GetBandwidthPlansRequest(
464
469
  api_version=api_version,
465
470
  filter_id=filter_id,
471
+ page_size=page_size,
472
+ page_number=page_number,
466
473
  )
467
474
 
468
475
  req = self._build_request(
@@ -503,8 +510,33 @@ class Plans(BaseSDK):
503
510
  retry_config=retry_config,
504
511
  )
505
512
 
513
+ def next_func() -> Optional[models.GetBandwidthPlansResponse]:
514
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
515
+ page = request.page_number if not request.page_number is None else 1
516
+ next_page = page + 1
517
+
518
+ if not http_res.text:
519
+ return None
520
+ results = JSONPath("$.data").parse(body)
521
+ if len(results) == 0 or len(results[0]) == 0:
522
+ return None
523
+ limit = request.page_size if not request.page_size is None else 20
524
+ if len(results[0]) < limit:
525
+ return None
526
+
527
+ return self.list_bandwidth(
528
+ api_version=api_version,
529
+ filter_id=filter_id,
530
+ page_size=page_size,
531
+ page_number=next_page,
532
+ retries=retries,
533
+ )
534
+
506
535
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
507
- return utils.unmarshal_json(http_res.text, models.BandwidthPlans)
536
+ return models.GetBandwidthPlansResponse(
537
+ result=utils.unmarshal_json(http_res.text, models.BandwidthPlans),
538
+ next=next_func,
539
+ )
508
540
  if utils.match_response(http_res, "4XX", "*"):
509
541
  http_res_text = utils.stream_to_text(http_res)
510
542
  raise models.APIError(
@@ -530,17 +562,21 @@ class Plans(BaseSDK):
530
562
  *,
531
563
  api_version: Optional[str] = "2023-06-01",
532
564
  filter_id: Optional[str] = None,
565
+ page_size: Optional[int] = 20,
566
+ page_number: Optional[int] = 1,
533
567
  retries: OptionalNullable[utils.RetryConfig] = UNSET,
534
568
  server_url: Optional[str] = None,
535
569
  timeout_ms: Optional[int] = None,
536
570
  http_headers: Optional[Mapping[str, str]] = None,
537
- ) -> models.BandwidthPlans:
571
+ ) -> Optional[models.GetBandwidthPlansResponse]:
538
572
  r"""List all bandwidth plans
539
573
 
540
574
  Lists all bandwidth plans.
541
575
 
542
576
  :param api_version:
543
577
  :param filter_id: The plan ID to filter by
578
+ :param page_size: Number of items to return per page
579
+ :param page_number: Page number to return (starts at 1)
544
580
  :param retries: Override the default retry configuration for this method
545
581
  :param server_url: Override the default server URL for this method
546
582
  :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
@@ -559,6 +595,8 @@ class Plans(BaseSDK):
559
595
  request = models.GetBandwidthPlansRequest(
560
596
  api_version=api_version,
561
597
  filter_id=filter_id,
598
+ page_size=page_size,
599
+ page_number=page_number,
562
600
  )
563
601
 
564
602
  req = self._build_request_async(
@@ -599,8 +637,33 @@ class Plans(BaseSDK):
599
637
  retry_config=retry_config,
600
638
  )
601
639
 
640
+ def next_func() -> Optional[models.GetBandwidthPlansResponse]:
641
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
642
+ page = request.page_number if not request.page_number is None else 1
643
+ next_page = page + 1
644
+
645
+ if not http_res.text:
646
+ return None
647
+ results = JSONPath("$.data").parse(body)
648
+ if len(results) == 0 or len(results[0]) == 0:
649
+ return None
650
+ limit = request.page_size if not request.page_size is None else 20
651
+ if len(results[0]) < limit:
652
+ return None
653
+
654
+ return self.list_bandwidth(
655
+ api_version=api_version,
656
+ filter_id=filter_id,
657
+ page_size=page_size,
658
+ page_number=next_page,
659
+ retries=retries,
660
+ )
661
+
602
662
  if utils.match_response(http_res, "200", "application/vnd.api+json"):
603
- return utils.unmarshal_json(http_res.text, models.BandwidthPlans)
663
+ return models.GetBandwidthPlansResponse(
664
+ result=utils.unmarshal_json(http_res.text, models.BandwidthPlans),
665
+ next=next_func,
666
+ )
604
667
  if utils.match_response(http_res, "4XX", "*"):
605
668
  http_res_text = await utils.stream_to_text_async(http_res)
606
669
  raise models.APIError(