autoassembler 0.3.1__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.
Files changed (198) hide show
  1. autoassembler/.fernignore +7 -0
  2. autoassembler/__init__.py +537 -0
  3. autoassembler/_custom/__init__.py +56 -0
  4. autoassembler/_custom/assemblies.py +226 -0
  5. autoassembler/_custom/assemblies_api.py +188 -0
  6. autoassembler/_custom/credentials.py +248 -0
  7. autoassembler/_custom/http.py +42 -0
  8. autoassembler/_custom/operations.py +258 -0
  9. autoassembler/_custom/planning.py +598 -0
  10. autoassembler/_custom/planning_api.py +225 -0
  11. autoassembler/_default_clients.py +32 -0
  12. autoassembler/_version.py +8 -0
  13. autoassembler/alpha/__init__.py +63 -0
  14. autoassembler/alpha/client.py +82 -0
  15. autoassembler/alpha/jobs/__init__.py +39 -0
  16. autoassembler/alpha/jobs/client.py +338 -0
  17. autoassembler/alpha/jobs/raw_client.py +641 -0
  18. autoassembler/alpha/jobs/types/__init__.py +42 -0
  19. autoassembler/alpha/jobs/types/cancel_job_jobs_response.py +12 -0
  20. autoassembler/alpha/jobs/types/list_jobs_jobs_response.py +30 -0
  21. autoassembler/alpha/jobs/types/list_jobs_jobs_response_pagination.py +22 -0
  22. autoassembler/alpha/jobs/types/retry_job_jobs_response.py +16 -0
  23. autoassembler/alpha/planning/__init__.py +49 -0
  24. autoassembler/alpha/planning/client.py +201 -0
  25. autoassembler/alpha/planning/raw_client.py +268 -0
  26. autoassembler/alpha/planning/types/__init__.py +47 -0
  27. autoassembler/alpha/planning/types/apply_ops_planning_request_namespace.py +5 -0
  28. autoassembler/alpha/planning/types/apply_ops_planning_request_ops_item.py +13 -0
  29. autoassembler/alpha/planning/types/apply_ops_planning_request_ops_item_op.py +58 -0
  30. autoassembler/alpha/planning/types/apply_ops_planning_response.py +13 -0
  31. autoassembler/alpha/raw_client.py +13 -0
  32. autoassembler/assemblies/__init__.py +73 -0
  33. autoassembler/assemblies/client.py +1177 -0
  34. autoassembler/assemblies/raw_client.py +1557 -0
  35. autoassembler/assemblies/types/__init__.py +71 -0
  36. autoassembler/assemblies/types/delete_assembly_response.py +12 -0
  37. autoassembler/assemblies/types/download_assembly_cad_request_namespace.py +5 -0
  38. autoassembler/assemblies/types/get_assembly_info_request_namespace.py +5 -0
  39. autoassembler/assemblies/types/get_status_request_namespace.py +5 -0
  40. autoassembler/assemblies/types/get_status_response.py +16 -0
  41. autoassembler/assemblies/types/get_status_response_progress.py +13 -0
  42. autoassembler/assemblies/types/get_status_response_status.py +7 -0
  43. autoassembler/assemblies/types/get_structure_request_namespace.py +5 -0
  44. autoassembler/assemblies/types/list_assembly_versions_request_namespace.py +5 -0
  45. autoassembler/assemblies/types/list_connections_request_namespace.py +5 -0
  46. autoassembler/assemblies/types/process_request_namespace.py +5 -0
  47. autoassembler/assemblies/types/update_assembly_info_request_namespace.py +5 -0
  48. autoassembler/auth/__init__.py +34 -0
  49. autoassembler/auth/client.py +282 -0
  50. autoassembler/auth/raw_client.py +413 -0
  51. autoassembler/auth/types/__init__.py +36 -0
  52. autoassembler/auth/types/create_access_token_request_grant_type.py +7 -0
  53. autoassembler/base_client.py +328 -0
  54. autoassembler/client.py +262 -0
  55. autoassembler/core/__init__.py +127 -0
  56. autoassembler/core/api_error.py +23 -0
  57. autoassembler/core/client_wrapper.py +147 -0
  58. autoassembler/core/datetime_utils.py +70 -0
  59. autoassembler/core/file.py +67 -0
  60. autoassembler/core/force_multipart.py +18 -0
  61. autoassembler/core/http_client.py +965 -0
  62. autoassembler/core/http_response.py +63 -0
  63. autoassembler/core/http_sse/__init__.py +42 -0
  64. autoassembler/core/http_sse/_api.py +455 -0
  65. autoassembler/core/http_sse/_decoders.py +74 -0
  66. autoassembler/core/http_sse/_exceptions.py +7 -0
  67. autoassembler/core/http_sse/_models.py +17 -0
  68. autoassembler/core/jsonable_encoder.py +133 -0
  69. autoassembler/core/logging.py +107 -0
  70. autoassembler/core/parse_error.py +36 -0
  71. autoassembler/core/pydantic_utilities.py +486 -0
  72. autoassembler/core/query_encoder.py +58 -0
  73. autoassembler/core/remove_none_from_dict.py +11 -0
  74. autoassembler/core/request_options.py +40 -0
  75. autoassembler/core/serialization.py +347 -0
  76. autoassembler/environment.py +7 -0
  77. autoassembler/errors/__init__.py +56 -0
  78. autoassembler/errors/bad_request_error.py +10 -0
  79. autoassembler/errors/conflict_error.py +10 -0
  80. autoassembler/errors/forbidden_error.py +11 -0
  81. autoassembler/errors/internal_server_error.py +11 -0
  82. autoassembler/errors/not_found_error.py +11 -0
  83. autoassembler/errors/unauthorized_error.py +10 -0
  84. autoassembler/errors/unprocessable_entity_error.py +11 -0
  85. autoassembler/operation.py +196 -0
  86. autoassembler/operations/__init__.py +4 -0
  87. autoassembler/operations/client.py +209 -0
  88. autoassembler/operations/raw_client.py +343 -0
  89. autoassembler/planning/__init__.py +70 -0
  90. autoassembler/planning/client.py +1174 -0
  91. autoassembler/planning/raw_client.py +1349 -0
  92. autoassembler/planning/types/__init__.py +68 -0
  93. autoassembler/planning/types/adapt_request_namespace.py +5 -0
  94. autoassembler/planning/types/create_mpp_request_body.py +8 -0
  95. autoassembler/planning/types/create_mpp_request_namespace.py +5 -0
  96. autoassembler/planning/types/delete_mpp_request_namespace.py +5 -0
  97. autoassembler/planning/types/delete_mpp_response.py +12 -0
  98. autoassembler/planning/types/evaluate_dfa_request_namespace.py +5 -0
  99. autoassembler/planning/types/get_mpp_request_namespace.py +5 -0
  100. autoassembler/planning/types/get_mpp_response.py +27 -0
  101. autoassembler/planning/types/list_mpps_request_namespace.py +5 -0
  102. autoassembler/planning/types/plan_request_namespace.py +5 -0
  103. autoassembler/planning/types/validate_request_namespace.py +5 -0
  104. autoassembler/py.typed +0 -0
  105. autoassembler/sessions/__init__.py +4 -0
  106. autoassembler/sessions/client.py +102 -0
  107. autoassembler/sessions/raw_client.py +126 -0
  108. autoassembler/types/__init__.py +344 -0
  109. autoassembler/types/access_token_response.py +14 -0
  110. autoassembler/types/active_session.py +25 -0
  111. autoassembler/types/active_session_namespace.py +5 -0
  112. autoassembler/types/adapt_mpp_accepted.py +26 -0
  113. autoassembler/types/assembly.py +30 -0
  114. autoassembler/types/assembly_connection.py +21 -0
  115. autoassembler/types/assembly_connection_relationship.py +5 -0
  116. autoassembler/types/assembly_connections_response.py +13 -0
  117. autoassembler/types/assembly_diff_metadata.py +35 -0
  118. autoassembler/types/assembly_diff_response.py +34 -0
  119. autoassembler/types/assembly_info.py +36 -0
  120. autoassembler/types/assembly_json_response.py +15 -0
  121. autoassembler/types/assembly_process_metadata.py +32 -0
  122. autoassembler/types/assembly_process_response.py +18 -0
  123. autoassembler/types/assembly_search_hit.py +31 -0
  124. autoassembler/types/assembly_version_summary.py +27 -0
  125. autoassembler/types/conflict_error_body.py +19 -0
  126. autoassembler/types/conflict_error_body_error.py +5 -0
  127. autoassembler/types/create_mpp_request.py +13 -0
  128. autoassembler/types/device_authorization_response.py +17 -0
  129. autoassembler/types/diff_accepted.py +42 -0
  130. autoassembler/types/diff_context_node.py +20 -0
  131. autoassembler/types/diff_details.py +73 -0
  132. autoassembler/types/diff_error_response.py +38 -0
  133. autoassembler/types/diff_flags.py +74 -0
  134. autoassembler/types/diff_ml_semantics.py +55 -0
  135. autoassembler/types/diff_node.py +26 -0
  136. autoassembler/types/diff_node_pair_with_parts.py +90 -0
  137. autoassembler/types/diff_node_with_parent.py +15 -0
  138. autoassembler/types/diff_reference_target_nodes.py +25 -0
  139. autoassembler/types/diff_report.py +24 -0
  140. autoassembler/types/diff_rigid_alignment.py +30 -0
  141. autoassembler/types/diff_summary.py +121 -0
  142. autoassembler/types/diff_summary_assembly_labels.py +44 -0
  143. autoassembler/types/diff_summary_geometric_diffs.py +24 -0
  144. autoassembler/types/diff_summary_persistent_edges_congruence.py +24 -0
  145. autoassembler/types/diff_summary_persistent_edges_congruence_pose.py +24 -0
  146. autoassembler/types/diff_summary_persistent_nodes_congruence.py +24 -0
  147. autoassembler/types/diff_summary_persistent_nodes_congruence_pose.py +24 -0
  148. autoassembler/types/diff_summary_total_parts.py +24 -0
  149. autoassembler/types/diff_swap.py +65 -0
  150. autoassembler/types/diff_swap_confidence.py +5 -0
  151. autoassembler/types/diff_swap_group.py +92 -0
  152. autoassembler/types/diff_validation_issue.py +38 -0
  153. autoassembler/types/diff_validation_issue_severity.py +5 -0
  154. autoassembler/types/diff_validation_result.py +35 -0
  155. autoassembler/types/diff_warning.py +79 -0
  156. autoassembler/types/diff_warning_reason.py +18 -0
  157. autoassembler/types/diff_warning_severity.py +5 -0
  158. autoassembler/types/error_response.py +30 -0
  159. autoassembler/types/filter.py +19 -0
  160. autoassembler/types/filter_field.py +7 -0
  161. autoassembler/types/filter_operator.py +5 -0
  162. autoassembler/types/job.py +123 -0
  163. autoassembler/types/job_progress.py +24 -0
  164. autoassembler/types/job_status.py +5 -0
  165. autoassembler/types/list_operations_response.py +25 -0
  166. autoassembler/types/manufacturing_process_plan.py +57 -0
  167. autoassembler/types/mpp_adapt_metadata.py +48 -0
  168. autoassembler/types/mpp_adapt_response.py +22 -0
  169. autoassembler/types/mpp_evaluate_dfa_metadata.py +47 -0
  170. autoassembler/types/mpp_evaluate_dfa_response.py +22 -0
  171. autoassembler/types/mpp_plan_metadata.py +47 -0
  172. autoassembler/types/mpp_plan_response.py +22 -0
  173. autoassembler/types/mpp_summary.py +20 -0
  174. autoassembler/types/mpp_validate_metadata.py +47 -0
  175. autoassembler/types/mpp_validate_response.py +22 -0
  176. autoassembler/types/o_auth_error_response.py +14 -0
  177. autoassembler/types/o_auth_error_response_error.py +18 -0
  178. autoassembler/types/operation.py +27 -0
  179. autoassembler/types/operation_error.py +21 -0
  180. autoassembler/types/operation_metadata.py +148 -0
  181. autoassembler/types/operation_response.py +94 -0
  182. autoassembler/types/process_assembly_accepted.py +14 -0
  183. autoassembler/types/process_assembly_response.py +55 -0
  184. autoassembler/types/process_assembly_skipped.py +14 -0
  185. autoassembler/types/search_assemblies_response.py +14 -0
  186. autoassembler/types/seq_plan_accepted.py +24 -0
  187. autoassembler/types/sever.py +33 -0
  188. autoassembler/types/sever_kind.py +5 -0
  189. autoassembler/types/sever_source.py +5 -0
  190. autoassembler/types/sort.py +8 -0
  191. autoassembler/types/upload_response.py +19 -0
  192. autoassembler/types/user_info.py +19 -0
  193. autoassembler/types/user_info_response.py +23 -0
  194. autoassembler/types/user_info_response_providers.py +14 -0
  195. autoassembler-0.3.1.dist-info/METADATA +209 -0
  196. autoassembler-0.3.1.dist-info/RECORD +198 -0
  197. autoassembler-0.3.1.dist-info/WHEEL +4 -0
  198. autoassembler-0.3.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,641 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ...core.api_error import ApiError
7
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ...core.jsonable_encoder import encode_path_param
10
+ from ...core.parse_error import ParsingError
11
+ from ...core.pydantic_utilities import parse_obj_as
12
+ from ...core.request_options import RequestOptions
13
+ from ...errors.bad_request_error import BadRequestError
14
+ from ...errors.conflict_error import ConflictError
15
+ from ...errors.forbidden_error import ForbiddenError
16
+ from ...errors.not_found_error import NotFoundError
17
+ from ...types.error_response import ErrorResponse
18
+ from ...types.job import Job
19
+ from .types.cancel_job_jobs_response import CancelJobJobsResponse
20
+ from .types.list_jobs_jobs_response import ListJobsJobsResponse
21
+ from .types.retry_job_jobs_response import RetryJobJobsResponse
22
+ from pydantic import ValidationError
23
+
24
+ # this is used as the default value for optional parameters
25
+ OMIT = typing.cast(typing.Any, ...)
26
+
27
+
28
+ class RawJobsClient:
29
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
30
+ self._client_wrapper = client_wrapper
31
+
32
+ def list_jobs(
33
+ self,
34
+ *,
35
+ page: typing.Optional[int] = None,
36
+ limit: typing.Optional[int] = None,
37
+ request_options: typing.Optional[RequestOptions] = None,
38
+ ) -> HttpResponse[ListJobsJobsResponse]:
39
+ """
40
+ Returns jobs visible to the current user. Admin users see all jobs; non-admin users see their own jobs.
41
+
42
+ Parameters
43
+ ----------
44
+ page : typing.Optional[int]
45
+ Page number for pagination.
46
+
47
+ limit : typing.Optional[int]
48
+ Number of jobs per page. 0 returns all jobs.
49
+
50
+ request_options : typing.Optional[RequestOptions]
51
+ Request-specific configuration.
52
+
53
+ Returns
54
+ -------
55
+ HttpResponse[ListJobsJobsResponse]
56
+ List of jobs
57
+ """
58
+ _response = self._client_wrapper.httpx_client.request(
59
+ "api/v4/jobs",
60
+ method="GET",
61
+ params={
62
+ "page": page,
63
+ "limit": limit,
64
+ },
65
+ request_options=request_options,
66
+ )
67
+ try:
68
+ if 200 <= _response.status_code < 300:
69
+ _data = typing.cast(
70
+ ListJobsJobsResponse,
71
+ parse_obj_as(
72
+ type_=ListJobsJobsResponse, # type: ignore
73
+ object_=_response.json(),
74
+ ),
75
+ )
76
+ return HttpResponse(response=_response, data=_data)
77
+ _response_json = _response.json()
78
+ except JSONDecodeError:
79
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
80
+ except ValidationError as e:
81
+ raise ParsingError(
82
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
83
+ )
84
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
85
+
86
+ def get_job(self, key: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Job]:
87
+ """
88
+ Parameters
89
+ ----------
90
+ key : str
91
+
92
+ request_options : typing.Optional[RequestOptions]
93
+ Request-specific configuration.
94
+
95
+ Returns
96
+ -------
97
+ HttpResponse[Job]
98
+ Job
99
+ """
100
+ _response = self._client_wrapper.httpx_client.request(
101
+ f"api/v4/jobs/{encode_path_param(key)}",
102
+ method="GET",
103
+ request_options=request_options,
104
+ )
105
+ try:
106
+ if 200 <= _response.status_code < 300:
107
+ _data = typing.cast(
108
+ Job,
109
+ parse_obj_as(
110
+ type_=Job, # type: ignore
111
+ object_=_response.json(),
112
+ ),
113
+ )
114
+ return HttpResponse(response=_response, data=_data)
115
+ if _response.status_code == 400:
116
+ raise BadRequestError(
117
+ headers=dict(_response.headers),
118
+ body=typing.cast(
119
+ typing.Any,
120
+ parse_obj_as(
121
+ type_=typing.Any, # type: ignore
122
+ object_=_response.json(),
123
+ ),
124
+ ),
125
+ )
126
+ if _response.status_code == 403:
127
+ raise ForbiddenError(
128
+ headers=dict(_response.headers),
129
+ body=typing.cast(
130
+ ErrorResponse,
131
+ parse_obj_as(
132
+ type_=ErrorResponse, # type: ignore
133
+ object_=_response.json(),
134
+ ),
135
+ ),
136
+ )
137
+ if _response.status_code == 404:
138
+ raise NotFoundError(
139
+ headers=dict(_response.headers),
140
+ body=typing.cast(
141
+ ErrorResponse,
142
+ parse_obj_as(
143
+ type_=ErrorResponse, # type: ignore
144
+ object_=_response.json(),
145
+ ),
146
+ ),
147
+ )
148
+ _response_json = _response.json()
149
+ except JSONDecodeError:
150
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
151
+ except ValidationError as e:
152
+ raise ParsingError(
153
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
154
+ )
155
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
156
+
157
+ def cancel_job(
158
+ self, *, key: str, request_options: typing.Optional[RequestOptions] = None
159
+ ) -> HttpResponse[CancelJobJobsResponse]:
160
+ """
161
+ Marks the specified job as cancelled and broadcasts a cancellation request.
162
+
163
+ Parameters
164
+ ----------
165
+ key : str
166
+ Unique key of the job to cancel.
167
+
168
+ request_options : typing.Optional[RequestOptions]
169
+ Request-specific configuration.
170
+
171
+ Returns
172
+ -------
173
+ HttpResponse[CancelJobJobsResponse]
174
+ Job cancelled successfully
175
+ """
176
+ _response = self._client_wrapper.httpx_client.request(
177
+ "api/v4/jobs/cancel",
178
+ method="POST",
179
+ json={
180
+ "key": key,
181
+ },
182
+ headers={
183
+ "content-type": "application/json",
184
+ },
185
+ request_options=request_options,
186
+ omit=OMIT,
187
+ )
188
+ try:
189
+ if 200 <= _response.status_code < 300:
190
+ _data = typing.cast(
191
+ CancelJobJobsResponse,
192
+ parse_obj_as(
193
+ type_=CancelJobJobsResponse, # type: ignore
194
+ object_=_response.json(),
195
+ ),
196
+ )
197
+ return HttpResponse(response=_response, data=_data)
198
+ if _response.status_code == 400:
199
+ raise BadRequestError(
200
+ headers=dict(_response.headers),
201
+ body=typing.cast(
202
+ typing.Any,
203
+ parse_obj_as(
204
+ type_=typing.Any, # type: ignore
205
+ object_=_response.json(),
206
+ ),
207
+ ),
208
+ )
209
+ if _response.status_code == 403:
210
+ raise ForbiddenError(
211
+ headers=dict(_response.headers),
212
+ body=typing.cast(
213
+ ErrorResponse,
214
+ parse_obj_as(
215
+ type_=ErrorResponse, # type: ignore
216
+ object_=_response.json(),
217
+ ),
218
+ ),
219
+ )
220
+ if _response.status_code == 404:
221
+ raise NotFoundError(
222
+ headers=dict(_response.headers),
223
+ body=typing.cast(
224
+ ErrorResponse,
225
+ parse_obj_as(
226
+ type_=ErrorResponse, # type: ignore
227
+ object_=_response.json(),
228
+ ),
229
+ ),
230
+ )
231
+ _response_json = _response.json()
232
+ except JSONDecodeError:
233
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
234
+ except ValidationError as e:
235
+ raise ParsingError(
236
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
237
+ )
238
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
239
+
240
+ def retry_job(
241
+ self, *, key: str, request_options: typing.Optional[RequestOptions] = None
242
+ ) -> HttpResponse[RetryJobJobsResponse]:
243
+ """
244
+ Re-enqueues a previously failed, cancelled, or aborted job as a new job.
245
+
246
+ Parameters
247
+ ----------
248
+ key : str
249
+ Unique key of the original job to retry.
250
+
251
+ request_options : typing.Optional[RequestOptions]
252
+ Request-specific configuration.
253
+
254
+ Returns
255
+ -------
256
+ HttpResponse[RetryJobJobsResponse]
257
+ Job re-enqueued successfully
258
+ """
259
+ _response = self._client_wrapper.httpx_client.request(
260
+ "api/v4/jobs/retry",
261
+ method="POST",
262
+ json={
263
+ "key": key,
264
+ },
265
+ headers={
266
+ "content-type": "application/json",
267
+ },
268
+ request_options=request_options,
269
+ omit=OMIT,
270
+ )
271
+ try:
272
+ if 200 <= _response.status_code < 300:
273
+ _data = typing.cast(
274
+ RetryJobJobsResponse,
275
+ parse_obj_as(
276
+ type_=RetryJobJobsResponse, # type: ignore
277
+ object_=_response.json(),
278
+ ),
279
+ )
280
+ return HttpResponse(response=_response, data=_data)
281
+ if _response.status_code == 400:
282
+ raise BadRequestError(
283
+ headers=dict(_response.headers),
284
+ body=typing.cast(
285
+ typing.Any,
286
+ parse_obj_as(
287
+ type_=typing.Any, # type: ignore
288
+ object_=_response.json(),
289
+ ),
290
+ ),
291
+ )
292
+ if _response.status_code == 403:
293
+ raise ForbiddenError(
294
+ headers=dict(_response.headers),
295
+ body=typing.cast(
296
+ ErrorResponse,
297
+ parse_obj_as(
298
+ type_=ErrorResponse, # type: ignore
299
+ object_=_response.json(),
300
+ ),
301
+ ),
302
+ )
303
+ if _response.status_code == 404:
304
+ raise NotFoundError(
305
+ headers=dict(_response.headers),
306
+ body=typing.cast(
307
+ ErrorResponse,
308
+ parse_obj_as(
309
+ type_=ErrorResponse, # type: ignore
310
+ object_=_response.json(),
311
+ ),
312
+ ),
313
+ )
314
+ if _response.status_code == 409:
315
+ raise ConflictError(
316
+ headers=dict(_response.headers),
317
+ body=typing.cast(
318
+ typing.Any,
319
+ parse_obj_as(
320
+ type_=typing.Any, # type: ignore
321
+ object_=_response.json(),
322
+ ),
323
+ ),
324
+ )
325
+ _response_json = _response.json()
326
+ except JSONDecodeError:
327
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
328
+ except ValidationError as e:
329
+ raise ParsingError(
330
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
331
+ )
332
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
333
+
334
+
335
+ class AsyncRawJobsClient:
336
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
337
+ self._client_wrapper = client_wrapper
338
+
339
+ async def list_jobs(
340
+ self,
341
+ *,
342
+ page: typing.Optional[int] = None,
343
+ limit: typing.Optional[int] = None,
344
+ request_options: typing.Optional[RequestOptions] = None,
345
+ ) -> AsyncHttpResponse[ListJobsJobsResponse]:
346
+ """
347
+ Returns jobs visible to the current user. Admin users see all jobs; non-admin users see their own jobs.
348
+
349
+ Parameters
350
+ ----------
351
+ page : typing.Optional[int]
352
+ Page number for pagination.
353
+
354
+ limit : typing.Optional[int]
355
+ Number of jobs per page. 0 returns all jobs.
356
+
357
+ request_options : typing.Optional[RequestOptions]
358
+ Request-specific configuration.
359
+
360
+ Returns
361
+ -------
362
+ AsyncHttpResponse[ListJobsJobsResponse]
363
+ List of jobs
364
+ """
365
+ _response = await self._client_wrapper.httpx_client.request(
366
+ "api/v4/jobs",
367
+ method="GET",
368
+ params={
369
+ "page": page,
370
+ "limit": limit,
371
+ },
372
+ request_options=request_options,
373
+ )
374
+ try:
375
+ if 200 <= _response.status_code < 300:
376
+ _data = typing.cast(
377
+ ListJobsJobsResponse,
378
+ parse_obj_as(
379
+ type_=ListJobsJobsResponse, # type: ignore
380
+ object_=_response.json(),
381
+ ),
382
+ )
383
+ return AsyncHttpResponse(response=_response, data=_data)
384
+ _response_json = _response.json()
385
+ except JSONDecodeError:
386
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
387
+ except ValidationError as e:
388
+ raise ParsingError(
389
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
390
+ )
391
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
392
+
393
+ async def get_job(
394
+ self, key: str, *, request_options: typing.Optional[RequestOptions] = None
395
+ ) -> AsyncHttpResponse[Job]:
396
+ """
397
+ Parameters
398
+ ----------
399
+ key : str
400
+
401
+ request_options : typing.Optional[RequestOptions]
402
+ Request-specific configuration.
403
+
404
+ Returns
405
+ -------
406
+ AsyncHttpResponse[Job]
407
+ Job
408
+ """
409
+ _response = await self._client_wrapper.httpx_client.request(
410
+ f"api/v4/jobs/{encode_path_param(key)}",
411
+ method="GET",
412
+ request_options=request_options,
413
+ )
414
+ try:
415
+ if 200 <= _response.status_code < 300:
416
+ _data = typing.cast(
417
+ Job,
418
+ parse_obj_as(
419
+ type_=Job, # type: ignore
420
+ object_=_response.json(),
421
+ ),
422
+ )
423
+ return AsyncHttpResponse(response=_response, data=_data)
424
+ if _response.status_code == 400:
425
+ raise BadRequestError(
426
+ headers=dict(_response.headers),
427
+ body=typing.cast(
428
+ typing.Any,
429
+ parse_obj_as(
430
+ type_=typing.Any, # type: ignore
431
+ object_=_response.json(),
432
+ ),
433
+ ),
434
+ )
435
+ if _response.status_code == 403:
436
+ raise ForbiddenError(
437
+ headers=dict(_response.headers),
438
+ body=typing.cast(
439
+ ErrorResponse,
440
+ parse_obj_as(
441
+ type_=ErrorResponse, # type: ignore
442
+ object_=_response.json(),
443
+ ),
444
+ ),
445
+ )
446
+ if _response.status_code == 404:
447
+ raise NotFoundError(
448
+ headers=dict(_response.headers),
449
+ body=typing.cast(
450
+ ErrorResponse,
451
+ parse_obj_as(
452
+ type_=ErrorResponse, # type: ignore
453
+ object_=_response.json(),
454
+ ),
455
+ ),
456
+ )
457
+ _response_json = _response.json()
458
+ except JSONDecodeError:
459
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
460
+ except ValidationError as e:
461
+ raise ParsingError(
462
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
463
+ )
464
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
465
+
466
+ async def cancel_job(
467
+ self, *, key: str, request_options: typing.Optional[RequestOptions] = None
468
+ ) -> AsyncHttpResponse[CancelJobJobsResponse]:
469
+ """
470
+ Marks the specified job as cancelled and broadcasts a cancellation request.
471
+
472
+ Parameters
473
+ ----------
474
+ key : str
475
+ Unique key of the job to cancel.
476
+
477
+ request_options : typing.Optional[RequestOptions]
478
+ Request-specific configuration.
479
+
480
+ Returns
481
+ -------
482
+ AsyncHttpResponse[CancelJobJobsResponse]
483
+ Job cancelled successfully
484
+ """
485
+ _response = await self._client_wrapper.httpx_client.request(
486
+ "api/v4/jobs/cancel",
487
+ method="POST",
488
+ json={
489
+ "key": key,
490
+ },
491
+ headers={
492
+ "content-type": "application/json",
493
+ },
494
+ request_options=request_options,
495
+ omit=OMIT,
496
+ )
497
+ try:
498
+ if 200 <= _response.status_code < 300:
499
+ _data = typing.cast(
500
+ CancelJobJobsResponse,
501
+ parse_obj_as(
502
+ type_=CancelJobJobsResponse, # type: ignore
503
+ object_=_response.json(),
504
+ ),
505
+ )
506
+ return AsyncHttpResponse(response=_response, data=_data)
507
+ if _response.status_code == 400:
508
+ raise BadRequestError(
509
+ headers=dict(_response.headers),
510
+ body=typing.cast(
511
+ typing.Any,
512
+ parse_obj_as(
513
+ type_=typing.Any, # type: ignore
514
+ object_=_response.json(),
515
+ ),
516
+ ),
517
+ )
518
+ if _response.status_code == 403:
519
+ raise ForbiddenError(
520
+ headers=dict(_response.headers),
521
+ body=typing.cast(
522
+ ErrorResponse,
523
+ parse_obj_as(
524
+ type_=ErrorResponse, # type: ignore
525
+ object_=_response.json(),
526
+ ),
527
+ ),
528
+ )
529
+ if _response.status_code == 404:
530
+ raise NotFoundError(
531
+ headers=dict(_response.headers),
532
+ body=typing.cast(
533
+ ErrorResponse,
534
+ parse_obj_as(
535
+ type_=ErrorResponse, # type: ignore
536
+ object_=_response.json(),
537
+ ),
538
+ ),
539
+ )
540
+ _response_json = _response.json()
541
+ except JSONDecodeError:
542
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
543
+ except ValidationError as e:
544
+ raise ParsingError(
545
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
546
+ )
547
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
548
+
549
+ async def retry_job(
550
+ self, *, key: str, request_options: typing.Optional[RequestOptions] = None
551
+ ) -> AsyncHttpResponse[RetryJobJobsResponse]:
552
+ """
553
+ Re-enqueues a previously failed, cancelled, or aborted job as a new job.
554
+
555
+ Parameters
556
+ ----------
557
+ key : str
558
+ Unique key of the original job to retry.
559
+
560
+ request_options : typing.Optional[RequestOptions]
561
+ Request-specific configuration.
562
+
563
+ Returns
564
+ -------
565
+ AsyncHttpResponse[RetryJobJobsResponse]
566
+ Job re-enqueued successfully
567
+ """
568
+ _response = await self._client_wrapper.httpx_client.request(
569
+ "api/v4/jobs/retry",
570
+ method="POST",
571
+ json={
572
+ "key": key,
573
+ },
574
+ headers={
575
+ "content-type": "application/json",
576
+ },
577
+ request_options=request_options,
578
+ omit=OMIT,
579
+ )
580
+ try:
581
+ if 200 <= _response.status_code < 300:
582
+ _data = typing.cast(
583
+ RetryJobJobsResponse,
584
+ parse_obj_as(
585
+ type_=RetryJobJobsResponse, # type: ignore
586
+ object_=_response.json(),
587
+ ),
588
+ )
589
+ return AsyncHttpResponse(response=_response, data=_data)
590
+ if _response.status_code == 400:
591
+ raise BadRequestError(
592
+ headers=dict(_response.headers),
593
+ body=typing.cast(
594
+ typing.Any,
595
+ parse_obj_as(
596
+ type_=typing.Any, # type: ignore
597
+ object_=_response.json(),
598
+ ),
599
+ ),
600
+ )
601
+ if _response.status_code == 403:
602
+ raise ForbiddenError(
603
+ headers=dict(_response.headers),
604
+ body=typing.cast(
605
+ ErrorResponse,
606
+ parse_obj_as(
607
+ type_=ErrorResponse, # type: ignore
608
+ object_=_response.json(),
609
+ ),
610
+ ),
611
+ )
612
+ if _response.status_code == 404:
613
+ raise NotFoundError(
614
+ headers=dict(_response.headers),
615
+ body=typing.cast(
616
+ ErrorResponse,
617
+ parse_obj_as(
618
+ type_=ErrorResponse, # type: ignore
619
+ object_=_response.json(),
620
+ ),
621
+ ),
622
+ )
623
+ if _response.status_code == 409:
624
+ raise ConflictError(
625
+ headers=dict(_response.headers),
626
+ body=typing.cast(
627
+ typing.Any,
628
+ parse_obj_as(
629
+ type_=typing.Any, # type: ignore
630
+ object_=_response.json(),
631
+ ),
632
+ ),
633
+ )
634
+ _response_json = _response.json()
635
+ except JSONDecodeError:
636
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
637
+ except ValidationError as e:
638
+ raise ParsingError(
639
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
640
+ )
641
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,42 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .cancel_job_jobs_response import CancelJobJobsResponse
10
+ from .list_jobs_jobs_response import ListJobsJobsResponse
11
+ from .list_jobs_jobs_response_pagination import ListJobsJobsResponsePagination
12
+ from .retry_job_jobs_response import RetryJobJobsResponse
13
+ _dynamic_imports: typing.Dict[str, str] = {
14
+ "CancelJobJobsResponse": ".cancel_job_jobs_response",
15
+ "ListJobsJobsResponse": ".list_jobs_jobs_response",
16
+ "ListJobsJobsResponsePagination": ".list_jobs_jobs_response_pagination",
17
+ "RetryJobJobsResponse": ".retry_job_jobs_response",
18
+ }
19
+
20
+
21
+ def __getattr__(attr_name: str) -> typing.Any:
22
+ module_name = _dynamic_imports.get(attr_name)
23
+ if module_name is None:
24
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
25
+ try:
26
+ module = import_module(module_name, __package__)
27
+ if module_name == f".{attr_name}":
28
+ return module
29
+ else:
30
+ return getattr(module, attr_name)
31
+ except ImportError as e:
32
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
33
+ except AttributeError as e:
34
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
35
+
36
+
37
+ def __dir__():
38
+ lazy_attrs = list(_dynamic_imports.keys())
39
+ return sorted(lazy_attrs)
40
+
41
+
42
+ __all__ = ["CancelJobJobsResponse", "ListJobsJobsResponse", "ListJobsJobsResponsePagination", "RetryJobJobsResponse"]
@@ -0,0 +1,12 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ from ....core.pydantic_utilities import UniversalBaseModel
7
+
8
+
9
+ class CancelJobJobsResponse(UniversalBaseModel):
10
+ ok: typing.Optional[bool] = None
11
+
12
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)