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.
- latitudesh_python_sdk/_version.py +3 -3
- latitudesh_python_sdk/events_sdk.py +84 -5
- latitudesh_python_sdk/firewalls_sdk.py +130 -9
- latitudesh_python_sdk/ipaddresses_sdk.py +78 -5
- latitudesh_python_sdk/models/__init__.py +108 -19
- latitudesh_python_sdk/models/billing_usage.py +3 -0
- latitudesh_python_sdk/models/get_bandwidth_plansop.py +30 -1
- latitudesh_python_sdk/models/get_eventsop.py +29 -1
- latitudesh_python_sdk/models/get_firewall_assignmentsop.py +37 -2
- latitudesh_python_sdk/models/get_ipsop.py +30 -1
- latitudesh_python_sdk/models/get_plans_operating_systemop.py +37 -2
- latitudesh_python_sdk/models/get_projectsop.py +30 -1
- latitudesh_python_sdk/models/get_regionsop.py +42 -0
- latitudesh_python_sdk/models/get_rolesop.py +37 -2
- latitudesh_python_sdk/models/get_serversop.py +30 -1
- latitudesh_python_sdk/models/get_team_membersop.py +42 -0
- latitudesh_python_sdk/models/get_virtual_networks_assignmentsop.py +33 -1
- latitudesh_python_sdk/models/get_virtual_networksop.py +30 -1
- latitudesh_python_sdk/models/list_firewallsop.py +30 -1
- latitudesh_python_sdk/models/server.py +11 -11
- latitudesh_python_sdk/models/virtual_networks.py +1 -1
- latitudesh_python_sdk/operatingsystems_sdk.py +76 -9
- latitudesh_python_sdk/plans.py +68 -5
- latitudesh_python_sdk/privatenetworks.py +142 -9
- latitudesh_python_sdk/projects_sdk.py +78 -5
- latitudesh_python_sdk/regions_sdk.py +74 -7
- latitudesh_python_sdk/roles.py +74 -7
- latitudesh_python_sdk/servers_sdk.py +94 -5
- latitudesh_python_sdk/teamsmembers.py +74 -7
- latitudesh_python_sdk/utils/__init__.py +1 -0
- latitudesh_python_sdk/utils/datetimes.py +23 -0
- latitudesh_python_sdk/utils/serializers.py +32 -3
- {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/METADATA +31 -5
- {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/RECORD +38 -35
- latitudesh_python_sdk/models/{deploy_config_error.py → deploy_config.py} +8 -8
- latitudesh_python_sdk/models/{virtual_network_error.py → virtual_network.py} +14 -14
- {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/LICENSE +0 -0
- {latitudesh_python_sdk-0.0.8.dist-info → latitudesh_python_sdk-1.1.0.dist-info}/WHEEL +0 -0
latitudesh_python_sdk/roles.py
CHANGED
|
@@ -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 Any, Mapping, Optional
|
|
9
|
+
from typing import Any, Dict, List, Mapping, Optional, Union
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class Roles(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.
|
|
22
|
+
) -> Optional[models.GetRolesResponse]:
|
|
20
23
|
r"""List all Roles
|
|
21
24
|
|
|
22
25
|
Returns a list of all roles that can be assigned to users
|
|
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 Roles(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.GetRolesRequest(
|
|
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="/roles",
|
|
42
53
|
base_url=base_url,
|
|
43
54
|
url_variables=url_variables,
|
|
44
|
-
request=
|
|
55
|
+
request=request,
|
|
45
56
|
request_body_required=False,
|
|
46
57
|
request_has_path_params=False,
|
|
47
58
|
request_has_query_params=True,
|
|
@@ -74,8 +85,31 @@ class Roles(BaseSDK):
|
|
|
74
85
|
retry_config=retry_config,
|
|
75
86
|
)
|
|
76
87
|
|
|
88
|
+
def next_func() -> Optional[models.GetRolesResponse]:
|
|
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
|
|
109
|
+
return models.GetRolesResponse(
|
|
110
|
+
result=utils.unmarshal_json(http_res.text, models.GetRolesResponseBody),
|
|
111
|
+
next=next_func,
|
|
112
|
+
)
|
|
79
113
|
if utils.match_response(http_res, "4XX", "*"):
|
|
80
114
|
http_res_text = utils.stream_to_text(http_res)
|
|
81
115
|
raise models.APIError(
|
|
@@ -99,16 +133,20 @@ class Roles(BaseSDK):
|
|
|
99
133
|
async def list_async(
|
|
100
134
|
self,
|
|
101
135
|
*,
|
|
136
|
+
page_size: Optional[int] = 20,
|
|
137
|
+
page_number: Optional[int] = 1,
|
|
102
138
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
103
139
|
server_url: Optional[str] = None,
|
|
104
140
|
timeout_ms: Optional[int] = None,
|
|
105
141
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
106
|
-
) -> models.
|
|
142
|
+
) -> Optional[models.GetRolesResponse]:
|
|
107
143
|
r"""List all Roles
|
|
108
144
|
|
|
109
145
|
Returns a list of all roles that can be assigned to users
|
|
110
146
|
|
|
111
147
|
|
|
148
|
+
:param page_size: Number of items to return per page
|
|
149
|
+
:param page_number: Page number to return (starts at 1)
|
|
112
150
|
:param retries: Override the default retry configuration for this method
|
|
113
151
|
:param server_url: Override the default server URL for this method
|
|
114
152
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
@@ -123,12 +161,18 @@ class Roles(BaseSDK):
|
|
|
123
161
|
base_url = server_url
|
|
124
162
|
else:
|
|
125
163
|
base_url = self._get_url(base_url, url_variables)
|
|
164
|
+
|
|
165
|
+
request = models.GetRolesRequest(
|
|
166
|
+
page_size=page_size,
|
|
167
|
+
page_number=page_number,
|
|
168
|
+
)
|
|
169
|
+
|
|
126
170
|
req = self._build_request_async(
|
|
127
171
|
method="GET",
|
|
128
172
|
path="/roles",
|
|
129
173
|
base_url=base_url,
|
|
130
174
|
url_variables=url_variables,
|
|
131
|
-
request=
|
|
175
|
+
request=request,
|
|
132
176
|
request_body_required=False,
|
|
133
177
|
request_has_path_params=False,
|
|
134
178
|
request_has_query_params=True,
|
|
@@ -161,8 +205,31 @@ class Roles(BaseSDK):
|
|
|
161
205
|
retry_config=retry_config,
|
|
162
206
|
)
|
|
163
207
|
|
|
208
|
+
def next_func() -> Optional[models.GetRolesResponse]:
|
|
209
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
210
|
+
page = request.page_number if not request.page_number is None else 1
|
|
211
|
+
next_page = page + 1
|
|
212
|
+
|
|
213
|
+
if not http_res.text:
|
|
214
|
+
return None
|
|
215
|
+
results = JSONPath("$.data").parse(body)
|
|
216
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
217
|
+
return None
|
|
218
|
+
limit = request.page_size if not request.page_size is None else 20
|
|
219
|
+
if len(results[0]) < limit:
|
|
220
|
+
return None
|
|
221
|
+
|
|
222
|
+
return self.list(
|
|
223
|
+
page_size=page_size,
|
|
224
|
+
page_number=next_page,
|
|
225
|
+
retries=retries,
|
|
226
|
+
)
|
|
227
|
+
|
|
164
228
|
if utils.match_response(http_res, "200", "application/vnd.api+json"):
|
|
165
|
-
return
|
|
229
|
+
return models.GetRolesResponse(
|
|
230
|
+
result=utils.unmarshal_json(http_res.text, models.GetRolesResponseBody),
|
|
231
|
+
next=next_func,
|
|
232
|
+
)
|
|
166
233
|
if utils.match_response(http_res, "4XX", "*"):
|
|
167
234
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
168
235
|
raise models.APIError(
|
|
@@ -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 ServersSDK(BaseSDK):
|
|
@@ -27,11 +28,13 @@ class ServersSDK(BaseSDK):
|
|
|
27
28
|
filter_disk: Optional[int] = None,
|
|
28
29
|
filter_tags: Optional[str] = None,
|
|
29
30
|
extra_fields_servers: Optional[str] = None,
|
|
31
|
+
page_size: Optional[int] = 20,
|
|
32
|
+
page_number: Optional[int] = 1,
|
|
30
33
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
31
34
|
server_url: Optional[str] = None,
|
|
32
35
|
timeout_ms: Optional[int] = None,
|
|
33
36
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
34
|
-
) -> models.
|
|
37
|
+
) -> Optional[models.GetServersResponse]:
|
|
35
38
|
r"""List all Servers
|
|
36
39
|
|
|
37
40
|
Returns a list of all servers belonging to the team.
|
|
@@ -52,6 +55,8 @@ class ServersSDK(BaseSDK):
|
|
|
52
55
|
:param filter_disk: The disk size in Gigabytes to filter by, should be used with the following options: [eql] to filter for values equal to the provided value. [gte] to filter for values greater or equal to the provided value. [lte] to filter by values lower or equal to the provided value.
|
|
53
56
|
:param filter_tags: 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`
|
|
54
57
|
:param extra_fields_servers: The `credentials` are provided as extra attributes that is lazy loaded. To request it, just set `extra_fields[servers]=credentials` in the query string.
|
|
58
|
+
:param page_size: Number of items to return per page
|
|
59
|
+
:param page_number: Page number to return (starts at 1)
|
|
55
60
|
:param retries: Override the default retry configuration for this method
|
|
56
61
|
:param server_url: Override the default server URL for this method
|
|
57
62
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
@@ -83,6 +88,8 @@ class ServersSDK(BaseSDK):
|
|
|
83
88
|
filter_disk=filter_disk,
|
|
84
89
|
filter_tags=filter_tags,
|
|
85
90
|
extra_fields_servers=extra_fields_servers,
|
|
91
|
+
page_size=page_size,
|
|
92
|
+
page_number=page_number,
|
|
86
93
|
)
|
|
87
94
|
|
|
88
95
|
req = self._build_request(
|
|
@@ -123,8 +130,46 @@ class ServersSDK(BaseSDK):
|
|
|
123
130
|
retry_config=retry_config,
|
|
124
131
|
)
|
|
125
132
|
|
|
133
|
+
def next_func() -> Optional[models.GetServersResponse]:
|
|
134
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
135
|
+
page = request.page_number if not request.page_number is None else 1
|
|
136
|
+
next_page = page + 1
|
|
137
|
+
|
|
138
|
+
if not http_res.text:
|
|
139
|
+
return None
|
|
140
|
+
results = JSONPath("$.data").parse(body)
|
|
141
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
142
|
+
return None
|
|
143
|
+
limit = request.page_size if not request.page_size is None else 20
|
|
144
|
+
if len(results[0]) < limit:
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
return self.list(
|
|
148
|
+
filter_project=filter_project,
|
|
149
|
+
filter_region=filter_region,
|
|
150
|
+
filter_hostname=filter_hostname,
|
|
151
|
+
filter_created_at_gte=filter_created_at_gte,
|
|
152
|
+
filter_created_at_lte=filter_created_at_lte,
|
|
153
|
+
filter_label=filter_label,
|
|
154
|
+
filter_status=filter_status,
|
|
155
|
+
filter_plan=filter_plan,
|
|
156
|
+
filter_gpu=filter_gpu,
|
|
157
|
+
filter_ram_eql=filter_ram_eql,
|
|
158
|
+
filter_ram_gte=filter_ram_gte,
|
|
159
|
+
filter_ram_lte=filter_ram_lte,
|
|
160
|
+
filter_disk=filter_disk,
|
|
161
|
+
filter_tags=filter_tags,
|
|
162
|
+
extra_fields_servers=extra_fields_servers,
|
|
163
|
+
page_size=page_size,
|
|
164
|
+
page_number=next_page,
|
|
165
|
+
retries=retries,
|
|
166
|
+
)
|
|
167
|
+
|
|
126
168
|
if utils.match_response(http_res, "200", "application/vnd.api+json"):
|
|
127
|
-
return
|
|
169
|
+
return models.GetServersResponse(
|
|
170
|
+
result=utils.unmarshal_json(http_res.text, models.Servers),
|
|
171
|
+
next=next_func,
|
|
172
|
+
)
|
|
128
173
|
if utils.match_response(http_res, "4XX", "*"):
|
|
129
174
|
http_res_text = utils.stream_to_text(http_res)
|
|
130
175
|
raise models.APIError(
|
|
@@ -163,11 +208,13 @@ class ServersSDK(BaseSDK):
|
|
|
163
208
|
filter_disk: Optional[int] = None,
|
|
164
209
|
filter_tags: Optional[str] = None,
|
|
165
210
|
extra_fields_servers: Optional[str] = None,
|
|
211
|
+
page_size: Optional[int] = 20,
|
|
212
|
+
page_number: Optional[int] = 1,
|
|
166
213
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
167
214
|
server_url: Optional[str] = None,
|
|
168
215
|
timeout_ms: Optional[int] = None,
|
|
169
216
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
170
|
-
) -> models.
|
|
217
|
+
) -> Optional[models.GetServersResponse]:
|
|
171
218
|
r"""List all Servers
|
|
172
219
|
|
|
173
220
|
Returns a list of all servers belonging to the team.
|
|
@@ -188,6 +235,8 @@ class ServersSDK(BaseSDK):
|
|
|
188
235
|
:param filter_disk: The disk size in Gigabytes to filter by, should be used with the following options: [eql] to filter for values equal to the provided value. [gte] to filter for values greater or equal to the provided value. [lte] to filter by values lower or equal to the provided value.
|
|
189
236
|
:param filter_tags: 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`
|
|
190
237
|
:param extra_fields_servers: The `credentials` are provided as extra attributes that is lazy loaded. To request it, just set `extra_fields[servers]=credentials` in the query string.
|
|
238
|
+
:param page_size: Number of items to return per page
|
|
239
|
+
:param page_number: Page number to return (starts at 1)
|
|
191
240
|
:param retries: Override the default retry configuration for this method
|
|
192
241
|
:param server_url: Override the default server URL for this method
|
|
193
242
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
@@ -219,6 +268,8 @@ class ServersSDK(BaseSDK):
|
|
|
219
268
|
filter_disk=filter_disk,
|
|
220
269
|
filter_tags=filter_tags,
|
|
221
270
|
extra_fields_servers=extra_fields_servers,
|
|
271
|
+
page_size=page_size,
|
|
272
|
+
page_number=page_number,
|
|
222
273
|
)
|
|
223
274
|
|
|
224
275
|
req = self._build_request_async(
|
|
@@ -259,8 +310,46 @@ class ServersSDK(BaseSDK):
|
|
|
259
310
|
retry_config=retry_config,
|
|
260
311
|
)
|
|
261
312
|
|
|
313
|
+
def next_func() -> Optional[models.GetServersResponse]:
|
|
314
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
315
|
+
page = request.page_number if not request.page_number is None else 1
|
|
316
|
+
next_page = page + 1
|
|
317
|
+
|
|
318
|
+
if not http_res.text:
|
|
319
|
+
return None
|
|
320
|
+
results = JSONPath("$.data").parse(body)
|
|
321
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
322
|
+
return None
|
|
323
|
+
limit = request.page_size if not request.page_size is None else 20
|
|
324
|
+
if len(results[0]) < limit:
|
|
325
|
+
return None
|
|
326
|
+
|
|
327
|
+
return self.list(
|
|
328
|
+
filter_project=filter_project,
|
|
329
|
+
filter_region=filter_region,
|
|
330
|
+
filter_hostname=filter_hostname,
|
|
331
|
+
filter_created_at_gte=filter_created_at_gte,
|
|
332
|
+
filter_created_at_lte=filter_created_at_lte,
|
|
333
|
+
filter_label=filter_label,
|
|
334
|
+
filter_status=filter_status,
|
|
335
|
+
filter_plan=filter_plan,
|
|
336
|
+
filter_gpu=filter_gpu,
|
|
337
|
+
filter_ram_eql=filter_ram_eql,
|
|
338
|
+
filter_ram_gte=filter_ram_gte,
|
|
339
|
+
filter_ram_lte=filter_ram_lte,
|
|
340
|
+
filter_disk=filter_disk,
|
|
341
|
+
filter_tags=filter_tags,
|
|
342
|
+
extra_fields_servers=extra_fields_servers,
|
|
343
|
+
page_size=page_size,
|
|
344
|
+
page_number=next_page,
|
|
345
|
+
retries=retries,
|
|
346
|
+
)
|
|
347
|
+
|
|
262
348
|
if utils.match_response(http_res, "200", "application/vnd.api+json"):
|
|
263
|
-
return
|
|
349
|
+
return models.GetServersResponse(
|
|
350
|
+
result=utils.unmarshal_json(http_res.text, models.Servers),
|
|
351
|
+
next=next_func,
|
|
352
|
+
)
|
|
264
353
|
if utils.match_response(http_res, "4XX", "*"):
|
|
265
354
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
266
355
|
raise models.APIError(
|
|
@@ -1,24 +1,29 @@
|
|
|
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 TeamsMembers(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.
|
|
22
|
+
) -> Optional[models.GetTeamMembersResponse]:
|
|
20
23
|
r"""List all Team Members
|
|
21
24
|
|
|
25
|
+
:param page_size: Number of items to return per page
|
|
26
|
+
:param page_number: Page number to return (starts at 1)
|
|
22
27
|
:param retries: Override the default retry configuration for this method
|
|
23
28
|
:param server_url: Override the default server URL for this method
|
|
24
29
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
@@ -33,12 +38,18 @@ class TeamsMembers(BaseSDK):
|
|
|
33
38
|
base_url = server_url
|
|
34
39
|
else:
|
|
35
40
|
base_url = self._get_url(base_url, url_variables)
|
|
41
|
+
|
|
42
|
+
request = models.GetTeamMembersRequest(
|
|
43
|
+
page_size=page_size,
|
|
44
|
+
page_number=page_number,
|
|
45
|
+
)
|
|
46
|
+
|
|
36
47
|
req = self._build_request(
|
|
37
48
|
method="GET",
|
|
38
49
|
path="/team/members",
|
|
39
50
|
base_url=base_url,
|
|
40
51
|
url_variables=url_variables,
|
|
41
|
-
request=
|
|
52
|
+
request=request,
|
|
42
53
|
request_body_required=False,
|
|
43
54
|
request_has_path_params=False,
|
|
44
55
|
request_has_query_params=True,
|
|
@@ -71,8 +82,31 @@ class TeamsMembers(BaseSDK):
|
|
|
71
82
|
retry_config=retry_config,
|
|
72
83
|
)
|
|
73
84
|
|
|
85
|
+
def next_func() -> Optional[models.GetTeamMembersResponse]:
|
|
86
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
87
|
+
page = request.page_number if not request.page_number is None else 1
|
|
88
|
+
next_page = page + 1
|
|
89
|
+
|
|
90
|
+
if not http_res.text:
|
|
91
|
+
return None
|
|
92
|
+
results = JSONPath("$.data").parse(body)
|
|
93
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
94
|
+
return None
|
|
95
|
+
limit = request.page_size if not request.page_size is None else 20
|
|
96
|
+
if len(results[0]) < limit:
|
|
97
|
+
return None
|
|
98
|
+
|
|
99
|
+
return self.list(
|
|
100
|
+
page_size=page_size,
|
|
101
|
+
page_number=next_page,
|
|
102
|
+
retries=retries,
|
|
103
|
+
)
|
|
104
|
+
|
|
74
105
|
if utils.match_response(http_res, "200", "application/vnd.api+json"):
|
|
75
|
-
return
|
|
106
|
+
return models.GetTeamMembersResponse(
|
|
107
|
+
result=utils.unmarshal_json(http_res.text, models.TeamMembers),
|
|
108
|
+
next=next_func,
|
|
109
|
+
)
|
|
76
110
|
if utils.match_response(http_res, "4XX", "*"):
|
|
77
111
|
http_res_text = utils.stream_to_text(http_res)
|
|
78
112
|
raise models.APIError(
|
|
@@ -96,13 +130,17 @@ class TeamsMembers(BaseSDK):
|
|
|
96
130
|
async def list_async(
|
|
97
131
|
self,
|
|
98
132
|
*,
|
|
133
|
+
page_size: Optional[int] = 20,
|
|
134
|
+
page_number: Optional[int] = 1,
|
|
99
135
|
retries: OptionalNullable[utils.RetryConfig] = UNSET,
|
|
100
136
|
server_url: Optional[str] = None,
|
|
101
137
|
timeout_ms: Optional[int] = None,
|
|
102
138
|
http_headers: Optional[Mapping[str, str]] = None,
|
|
103
|
-
) -> models.
|
|
139
|
+
) -> Optional[models.GetTeamMembersResponse]:
|
|
104
140
|
r"""List all Team Members
|
|
105
141
|
|
|
142
|
+
:param page_size: Number of items to return per page
|
|
143
|
+
:param page_number: Page number to return (starts at 1)
|
|
106
144
|
:param retries: Override the default retry configuration for this method
|
|
107
145
|
:param server_url: Override the default server URL for this method
|
|
108
146
|
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
|
|
@@ -117,12 +155,18 @@ class TeamsMembers(BaseSDK):
|
|
|
117
155
|
base_url = server_url
|
|
118
156
|
else:
|
|
119
157
|
base_url = self._get_url(base_url, url_variables)
|
|
158
|
+
|
|
159
|
+
request = models.GetTeamMembersRequest(
|
|
160
|
+
page_size=page_size,
|
|
161
|
+
page_number=page_number,
|
|
162
|
+
)
|
|
163
|
+
|
|
120
164
|
req = self._build_request_async(
|
|
121
165
|
method="GET",
|
|
122
166
|
path="/team/members",
|
|
123
167
|
base_url=base_url,
|
|
124
168
|
url_variables=url_variables,
|
|
125
|
-
request=
|
|
169
|
+
request=request,
|
|
126
170
|
request_body_required=False,
|
|
127
171
|
request_has_path_params=False,
|
|
128
172
|
request_has_query_params=True,
|
|
@@ -155,8 +199,31 @@ class TeamsMembers(BaseSDK):
|
|
|
155
199
|
retry_config=retry_config,
|
|
156
200
|
)
|
|
157
201
|
|
|
202
|
+
def next_func() -> Optional[models.GetTeamMembersResponse]:
|
|
203
|
+
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
|
|
204
|
+
page = request.page_number if not request.page_number is None else 1
|
|
205
|
+
next_page = page + 1
|
|
206
|
+
|
|
207
|
+
if not http_res.text:
|
|
208
|
+
return None
|
|
209
|
+
results = JSONPath("$.data").parse(body)
|
|
210
|
+
if len(results) == 0 or len(results[0]) == 0:
|
|
211
|
+
return None
|
|
212
|
+
limit = request.page_size if not request.page_size is None else 20
|
|
213
|
+
if len(results[0]) < limit:
|
|
214
|
+
return None
|
|
215
|
+
|
|
216
|
+
return self.list(
|
|
217
|
+
page_size=page_size,
|
|
218
|
+
page_number=next_page,
|
|
219
|
+
retries=retries,
|
|
220
|
+
)
|
|
221
|
+
|
|
158
222
|
if utils.match_response(http_res, "200", "application/vnd.api+json"):
|
|
159
|
-
return
|
|
223
|
+
return models.GetTeamMembersResponse(
|
|
224
|
+
result=utils.unmarshal_json(http_res.text, models.TeamMembers),
|
|
225
|
+
next=next_func,
|
|
226
|
+
)
|
|
160
227
|
if utils.match_response(http_res, "4XX", "*"):
|
|
161
228
|
http_res_text = await utils.stream_to_text_async(http_res)
|
|
162
229
|
raise models.APIError(
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
3
|
from .annotations import get_discriminator
|
|
4
|
+
from .datetimes import parse_datetime
|
|
4
5
|
from .enums import OpenEnumMeta
|
|
5
6
|
from .headers import get_headers, get_response_headers
|
|
6
7
|
from .metadata import (
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def parse_datetime(datetime_string: str) -> datetime:
|
|
8
|
+
"""
|
|
9
|
+
Convert a RFC 3339 / ISO 8601 formatted string into a datetime object.
|
|
10
|
+
Python versions 3.11 and later support parsing RFC 3339 directly with
|
|
11
|
+
datetime.fromisoformat(), but for earlier versions, this function
|
|
12
|
+
encapsulates the necessary extra logic.
|
|
13
|
+
"""
|
|
14
|
+
# Python 3.11 and later can parse RFC 3339 directly
|
|
15
|
+
if sys.version_info >= (3, 11):
|
|
16
|
+
return datetime.fromisoformat(datetime_string)
|
|
17
|
+
|
|
18
|
+
# For Python 3.10 and earlier, a common ValueError is trailing 'Z' suffix,
|
|
19
|
+
# so fix that upfront.
|
|
20
|
+
if datetime_string.endswith("Z"):
|
|
21
|
+
datetime_string = datetime_string[:-1] + "+00:00"
|
|
22
|
+
|
|
23
|
+
return datetime.fromisoformat(datetime_string)
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
2
2
|
|
|
3
3
|
from decimal import Decimal
|
|
4
|
+
import functools
|
|
4
5
|
import json
|
|
5
|
-
|
|
6
|
-
import
|
|
6
|
+
import typing
|
|
7
|
+
from typing import Any, Dict, List, Tuple, Union, get_args
|
|
8
|
+
import typing_extensions
|
|
7
9
|
from typing_extensions import get_origin
|
|
10
|
+
|
|
11
|
+
import httpx
|
|
8
12
|
from pydantic import ConfigDict, create_model
|
|
9
13
|
from pydantic_core import from_json
|
|
10
|
-
from typing_inspection.typing_objects import is_union
|
|
11
14
|
|
|
12
15
|
from ..types.basemodel import BaseModel, Nullable, OptionalNullable, Unset
|
|
13
16
|
|
|
@@ -185,6 +188,13 @@ def is_nullable(field):
|
|
|
185
188
|
return False
|
|
186
189
|
|
|
187
190
|
|
|
191
|
+
def is_union(obj: object) -> bool:
|
|
192
|
+
"""
|
|
193
|
+
Returns True if the given object is a typing.Union or typing_extensions.Union.
|
|
194
|
+
"""
|
|
195
|
+
return any(obj is typing_obj for typing_obj in _get_typing_objects_by_name_of("Union"))
|
|
196
|
+
|
|
197
|
+
|
|
188
198
|
def stream_to_text(stream: httpx.Response) -> str:
|
|
189
199
|
return "".join(stream.iter_text())
|
|
190
200
|
|
|
@@ -217,3 +227,22 @@ def _contains_pydantic_model(data: Any) -> bool:
|
|
|
217
227
|
return any(_contains_pydantic_model(value) for value in data.values())
|
|
218
228
|
|
|
219
229
|
return False
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
@functools.cache
|
|
233
|
+
def _get_typing_objects_by_name_of(name: str) -> Tuple[Any, ...]:
|
|
234
|
+
"""
|
|
235
|
+
Get typing objects by name from typing and typing_extensions.
|
|
236
|
+
Reference: https://typing-extensions.readthedocs.io/en/latest/#runtime-use-of-types
|
|
237
|
+
"""
|
|
238
|
+
result = tuple(
|
|
239
|
+
getattr(module, name)
|
|
240
|
+
for module in (typing, typing_extensions)
|
|
241
|
+
if hasattr(module, name)
|
|
242
|
+
)
|
|
243
|
+
if not result:
|
|
244
|
+
raise ValueError(
|
|
245
|
+
f"Neither typing nor typing_extensions has an object called {name!r}"
|
|
246
|
+
)
|
|
247
|
+
return result
|
|
248
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: latitudesh-python-sdk
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Python Client SDK Generated by Speakeasy.
|
|
5
5
|
Author: Speakeasy
|
|
6
6
|
Requires-Python: >=3.9
|
|
@@ -10,11 +10,9 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
-
Requires-Dist: eval-type-backport (>=0.2.0)
|
|
14
13
|
Requires-Dist: httpx (>=0.28.1)
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
17
|
-
Requires-Dist: typing-inspection (>=0.4.0)
|
|
14
|
+
Requires-Dist: jsonpath-python (>=1.0.6)
|
|
15
|
+
Requires-Dist: pydantic (>=2.11.2)
|
|
18
16
|
Project-URL: Repository, https://github.com/latitudesh/latitudesh-python-sdk.git
|
|
19
17
|
Description-Content-Type: text/markdown
|
|
20
18
|
|
|
@@ -45,6 +43,7 @@ Latitude.sh API: The Latitude.sh API is a RESTful API to manage your Latitude.sh
|
|
|
45
43
|
* [SDK Example Usage](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#sdk-example-usage)
|
|
46
44
|
* [Authentication](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#authentication)
|
|
47
45
|
* [Available Resources and Operations](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#available-resources-and-operations)
|
|
46
|
+
* [Pagination](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#pagination)
|
|
48
47
|
* [Retries](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#retries)
|
|
49
48
|
* [Error Handling](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#error-handling)
|
|
50
49
|
* [Server Selection](https://github.com/latitudesh/latitudesh-python-sdk/blob/master/#server-selection)
|
|
@@ -424,6 +423,33 @@ with Latitudesh(
|
|
|
424
423
|
</details>
|
|
425
424
|
<!-- End Available Resources and Operations [operations] -->
|
|
426
425
|
|
|
426
|
+
<!-- Start Pagination [pagination] -->
|
|
427
|
+
## Pagination
|
|
428
|
+
|
|
429
|
+
Some of the endpoints in this SDK support pagination. To use pagination, you make your SDK calls as usual, but the
|
|
430
|
+
returned response object will have a `Next` method that can be called to pull down the next group of results. If the
|
|
431
|
+
return value of `Next` is `None`, then there are no more pages to be fetched.
|
|
432
|
+
|
|
433
|
+
Here's an example of one such pagination call:
|
|
434
|
+
```python
|
|
435
|
+
from latitudesh_python_sdk import Latitudesh
|
|
436
|
+
import os
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
with Latitudesh(
|
|
440
|
+
bearer=os.getenv("LATITUDESH_BEARER", ""),
|
|
441
|
+
) as latitudesh:
|
|
442
|
+
|
|
443
|
+
res = latitudesh.events.list()
|
|
444
|
+
|
|
445
|
+
while res is not None:
|
|
446
|
+
# Handle items
|
|
447
|
+
|
|
448
|
+
res = res.next()
|
|
449
|
+
|
|
450
|
+
```
|
|
451
|
+
<!-- End Pagination [pagination] -->
|
|
452
|
+
|
|
427
453
|
<!-- Start Retries [retries] -->
|
|
428
454
|
## Retries
|
|
429
455
|
|