casedev 0.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.
Files changed (185) hide show
  1. casedev/__init__.py +104 -0
  2. casedev/_base_client.py +1995 -0
  3. casedev/_client.py +560 -0
  4. casedev/_compat.py +219 -0
  5. casedev/_constants.py +14 -0
  6. casedev/_exceptions.py +108 -0
  7. casedev/_files.py +123 -0
  8. casedev/_models.py +857 -0
  9. casedev/_qs.py +150 -0
  10. casedev/_resource.py +43 -0
  11. casedev/_response.py +830 -0
  12. casedev/_streaming.py +333 -0
  13. casedev/_types.py +260 -0
  14. casedev/_utils/__init__.py +64 -0
  15. casedev/_utils/_compat.py +45 -0
  16. casedev/_utils/_datetime_parse.py +136 -0
  17. casedev/_utils/_logs.py +25 -0
  18. casedev/_utils/_proxy.py +65 -0
  19. casedev/_utils/_reflection.py +42 -0
  20. casedev/_utils/_resources_proxy.py +24 -0
  21. casedev/_utils/_streams.py +12 -0
  22. casedev/_utils/_sync.py +58 -0
  23. casedev/_utils/_transform.py +457 -0
  24. casedev/_utils/_typing.py +156 -0
  25. casedev/_utils/_utils.py +421 -0
  26. casedev/_version.py +4 -0
  27. casedev/lib/.keep +4 -0
  28. casedev/py.typed +0 -0
  29. casedev/resources/__init__.py +173 -0
  30. casedev/resources/actions/__init__.py +33 -0
  31. casedev/resources/actions/actions.py +102 -0
  32. casedev/resources/actions/v1.py +640 -0
  33. casedev/resources/compute/__init__.py +33 -0
  34. casedev/resources/compute/compute.py +102 -0
  35. casedev/resources/compute/v1/__init__.py +89 -0
  36. casedev/resources/compute/v1/environments.py +492 -0
  37. casedev/resources/compute/v1/functions.py +278 -0
  38. casedev/resources/compute/v1/invoke.py +216 -0
  39. casedev/resources/compute/v1/runs.py +290 -0
  40. casedev/resources/compute/v1/secrets.py +655 -0
  41. casedev/resources/compute/v1/v1.py +583 -0
  42. casedev/resources/convert/__init__.py +33 -0
  43. casedev/resources/convert/convert.py +102 -0
  44. casedev/resources/convert/v1/__init__.py +33 -0
  45. casedev/resources/convert/v1/jobs.py +254 -0
  46. casedev/resources/convert/v1/v1.py +450 -0
  47. casedev/resources/format/__init__.py +33 -0
  48. casedev/resources/format/format.py +102 -0
  49. casedev/resources/format/v1/__init__.py +33 -0
  50. casedev/resources/format/v1/templates.py +419 -0
  51. casedev/resources/format/v1/v1.py +244 -0
  52. casedev/resources/llm/__init__.py +33 -0
  53. casedev/resources/llm/llm.py +192 -0
  54. casedev/resources/llm/v1/__init__.py +33 -0
  55. casedev/resources/llm/v1/chat.py +243 -0
  56. casedev/resources/llm/v1/v1.py +317 -0
  57. casedev/resources/ocr/__init__.py +33 -0
  58. casedev/resources/ocr/ocr.py +102 -0
  59. casedev/resources/ocr/v1.py +407 -0
  60. casedev/resources/search/__init__.py +33 -0
  61. casedev/resources/search/search.py +102 -0
  62. casedev/resources/search/v1.py +1052 -0
  63. casedev/resources/templates/__init__.py +33 -0
  64. casedev/resources/templates/templates.py +102 -0
  65. casedev/resources/templates/v1.py +633 -0
  66. casedev/resources/vault/__init__.py +47 -0
  67. casedev/resources/vault/graphrag.py +256 -0
  68. casedev/resources/vault/objects.py +571 -0
  69. casedev/resources/vault/vault.py +764 -0
  70. casedev/resources/voice/__init__.py +61 -0
  71. casedev/resources/voice/streaming.py +160 -0
  72. casedev/resources/voice/transcription.py +327 -0
  73. casedev/resources/voice/v1/__init__.py +33 -0
  74. casedev/resources/voice/v1/speak.py +478 -0
  75. casedev/resources/voice/v1/v1.py +290 -0
  76. casedev/resources/voice/voice.py +166 -0
  77. casedev/resources/webhooks/__init__.py +33 -0
  78. casedev/resources/webhooks/v1.py +447 -0
  79. casedev/resources/webhooks/webhooks.py +102 -0
  80. casedev/resources/workflows/__init__.py +33 -0
  81. casedev/resources/workflows/v1.py +1053 -0
  82. casedev/resources/workflows/workflows.py +102 -0
  83. casedev/types/__init__.py +12 -0
  84. casedev/types/actions/__init__.py +8 -0
  85. casedev/types/actions/v1_create_params.py +22 -0
  86. casedev/types/actions/v1_create_response.py +33 -0
  87. casedev/types/actions/v1_execute_params.py +16 -0
  88. casedev/types/actions/v1_execute_response.py +31 -0
  89. casedev/types/compute/__init__.py +7 -0
  90. casedev/types/compute/v1/__init__.py +18 -0
  91. casedev/types/compute/v1/environment_create_params.py +12 -0
  92. casedev/types/compute/v1/environment_create_response.py +34 -0
  93. casedev/types/compute/v1/environment_delete_response.py +11 -0
  94. casedev/types/compute/v1/function_get_logs_params.py +12 -0
  95. casedev/types/compute/v1/function_list_params.py +12 -0
  96. casedev/types/compute/v1/invoke_run_params.py +21 -0
  97. casedev/types/compute/v1/invoke_run_response.py +39 -0
  98. casedev/types/compute/v1/run_list_params.py +18 -0
  99. casedev/types/compute/v1/secret_create_params.py +24 -0
  100. casedev/types/compute/v1/secret_create_response.py +24 -0
  101. casedev/types/compute/v1/secret_delete_group_params.py +18 -0
  102. casedev/types/compute/v1/secret_list_params.py +15 -0
  103. casedev/types/compute/v1/secret_retrieve_group_params.py +12 -0
  104. casedev/types/compute/v1/secret_update_group_params.py +16 -0
  105. casedev/types/compute/v1_deploy_params.py +114 -0
  106. casedev/types/compute/v1_deploy_response.py +30 -0
  107. casedev/types/compute/v1_get_usage_params.py +15 -0
  108. casedev/types/convert/__init__.py +8 -0
  109. casedev/types/convert/v1/__init__.py +3 -0
  110. casedev/types/convert/v1_process_params.py +15 -0
  111. casedev/types/convert/v1_process_response.py +19 -0
  112. casedev/types/convert/v1_webhook_params.py +32 -0
  113. casedev/types/convert/v1_webhook_response.py +13 -0
  114. casedev/types/format/__init__.py +5 -0
  115. casedev/types/format/v1/__init__.py +7 -0
  116. casedev/types/format/v1/template_create_params.py +32 -0
  117. casedev/types/format/v1/template_create_response.py +27 -0
  118. casedev/types/format/v1/template_list_params.py +12 -0
  119. casedev/types/format/v1_create_document_params.py +42 -0
  120. casedev/types/llm/__init__.py +5 -0
  121. casedev/types/llm/v1/__init__.py +6 -0
  122. casedev/types/llm/v1/chat_create_completion_params.py +42 -0
  123. casedev/types/llm/v1/chat_create_completion_response.py +49 -0
  124. casedev/types/llm/v1_create_embedding_params.py +27 -0
  125. casedev/types/ocr/__init__.py +6 -0
  126. casedev/types/ocr/v1_process_params.py +44 -0
  127. casedev/types/ocr/v1_process_response.py +32 -0
  128. casedev/types/search/__init__.py +15 -0
  129. casedev/types/search/v1_answer_params.py +45 -0
  130. casedev/types/search/v1_answer_response.py +35 -0
  131. casedev/types/search/v1_contents_params.py +42 -0
  132. casedev/types/search/v1_contents_response.py +31 -0
  133. casedev/types/search/v1_research_params.py +23 -0
  134. casedev/types/search/v1_research_response.py +20 -0
  135. casedev/types/search/v1_retrieve_research_params.py +15 -0
  136. casedev/types/search/v1_search_params.py +56 -0
  137. casedev/types/search/v1_search_response.py +38 -0
  138. casedev/types/search/v1_similar_params.py +44 -0
  139. casedev/types/search/v1_similar_response.py +33 -0
  140. casedev/types/templates/__init__.py +8 -0
  141. casedev/types/templates/v1_execute_params.py +22 -0
  142. casedev/types/templates/v1_execute_response.py +31 -0
  143. casedev/types/templates/v1_list_params.py +32 -0
  144. casedev/types/templates/v1_search_params.py +18 -0
  145. casedev/types/vault/__init__.py +6 -0
  146. casedev/types/vault/object_create_presigned_url_params.py +22 -0
  147. casedev/types/vault/object_create_presigned_url_response.py +51 -0
  148. casedev/types/vault_create_params.py +20 -0
  149. casedev/types/vault_create_response.py +36 -0
  150. casedev/types/vault_ingest_response.py +26 -0
  151. casedev/types/vault_list_response.py +40 -0
  152. casedev/types/vault_search_params.py +27 -0
  153. casedev/types/vault_search_response.py +53 -0
  154. casedev/types/vault_upload_params.py +26 -0
  155. casedev/types/vault_upload_response.py +39 -0
  156. casedev/types/voice/__init__.py +7 -0
  157. casedev/types/voice/transcription_create_params.py +36 -0
  158. casedev/types/voice/transcription_retrieve_response.py +41 -0
  159. casedev/types/voice/v1/__init__.py +6 -0
  160. casedev/types/voice/v1/speak_create_params.py +59 -0
  161. casedev/types/voice/v1/speak_stream_params.py +58 -0
  162. casedev/types/voice/v1_list_voices_params.py +36 -0
  163. casedev/types/webhooks/__init__.py +6 -0
  164. casedev/types/webhooks/v1_create_params.py +20 -0
  165. casedev/types/webhooks/v1_create_response.py +33 -0
  166. casedev/types/workflows/__init__.py +19 -0
  167. casedev/types/workflows/v1_create_params.py +32 -0
  168. casedev/types/workflows/v1_create_response.py +29 -0
  169. casedev/types/workflows/v1_delete_response.py +13 -0
  170. casedev/types/workflows/v1_deploy_response.py +20 -0
  171. casedev/types/workflows/v1_execute_params.py +12 -0
  172. casedev/types/workflows/v1_execute_response.py +22 -0
  173. casedev/types/workflows/v1_list_executions_params.py +13 -0
  174. casedev/types/workflows/v1_list_executions_response.py +27 -0
  175. casedev/types/workflows/v1_list_params.py +18 -0
  176. casedev/types/workflows/v1_list_response.py +37 -0
  177. casedev/types/workflows/v1_retrieve_execution_response.py +31 -0
  178. casedev/types/workflows/v1_retrieve_response.py +35 -0
  179. casedev/types/workflows/v1_undeploy_response.py +13 -0
  180. casedev/types/workflows/v1_update_params.py +26 -0
  181. casedev/types/workflows/v1_update_response.py +17 -0
  182. casedev-0.1.0.dist-info/METADATA +454 -0
  183. casedev-0.1.0.dist-info/RECORD +185 -0
  184. casedev-0.1.0.dist-info/WHEEL +4 -0
  185. casedev-0.1.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,655 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Dict
6
+
7
+ import httpx
8
+
9
+ from ...._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
10
+ from ...._utils import maybe_transform, async_maybe_transform
11
+ from ...._compat import cached_property
12
+ from ...._resource import SyncAPIResource, AsyncAPIResource
13
+ from ...._response import (
14
+ to_raw_response_wrapper,
15
+ to_streamed_response_wrapper,
16
+ async_to_raw_response_wrapper,
17
+ async_to_streamed_response_wrapper,
18
+ )
19
+ from ...._base_client import make_request_options
20
+ from ....types.compute.v1 import (
21
+ secret_list_params,
22
+ secret_create_params,
23
+ secret_delete_group_params,
24
+ secret_update_group_params,
25
+ secret_retrieve_group_params,
26
+ )
27
+ from ....types.compute.v1.secret_create_response import SecretCreateResponse
28
+
29
+ __all__ = ["SecretsResource", "AsyncSecretsResource"]
30
+
31
+
32
+ class SecretsResource(SyncAPIResource):
33
+ @cached_property
34
+ def with_raw_response(self) -> SecretsResourceWithRawResponse:
35
+ """
36
+ This property can be used as a prefix for any HTTP method call to return
37
+ the raw response object instead of the parsed content.
38
+
39
+ For more information, see https://www.github.com/CaseMark/casedev-python#accessing-raw-response-data-eg-headers
40
+ """
41
+ return SecretsResourceWithRawResponse(self)
42
+
43
+ @cached_property
44
+ def with_streaming_response(self) -> SecretsResourceWithStreamingResponse:
45
+ """
46
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
47
+
48
+ For more information, see https://www.github.com/CaseMark/casedev-python#with_streaming_response
49
+ """
50
+ return SecretsResourceWithStreamingResponse(self)
51
+
52
+ def create(
53
+ self,
54
+ *,
55
+ name: str,
56
+ description: str | Omit = omit,
57
+ env: str | Omit = omit,
58
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
59
+ # The extra values given here take precedence over values defined on the client or passed to this method.
60
+ extra_headers: Headers | None = None,
61
+ extra_query: Query | None = None,
62
+ extra_body: Body | None = None,
63
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
64
+ ) -> SecretCreateResponse:
65
+ """Creates a new secret group in a compute environment.
66
+
67
+ Secret groups organize
68
+ related secrets for use in serverless functions and workflows. If no environment
69
+ is specified, the group is created in the default environment.
70
+
71
+ **Features:**
72
+
73
+ - Organize secrets by logical groups (e.g., database, APIs, third-party
74
+ services)
75
+ - Environment-based isolation
76
+ - Validation of group names
77
+ - Conflict detection for existing groups
78
+
79
+ Args:
80
+ name: Unique name for the secret group. Must contain only letters, numbers, hyphens,
81
+ and underscores.
82
+
83
+ description: Optional description of the secret group's purpose
84
+
85
+ env: Environment name where the secret group will be created. Uses default
86
+ environment if not specified.
87
+
88
+ extra_headers: Send extra headers
89
+
90
+ extra_query: Add additional query parameters to the request
91
+
92
+ extra_body: Add additional JSON properties to the request
93
+
94
+ timeout: Override the client-level default timeout for this request, in seconds
95
+ """
96
+ return self._post(
97
+ "/compute/v1/secrets",
98
+ body=maybe_transform(
99
+ {
100
+ "name": name,
101
+ "description": description,
102
+ "env": env,
103
+ },
104
+ secret_create_params.SecretCreateParams,
105
+ ),
106
+ options=make_request_options(
107
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
108
+ ),
109
+ cast_to=SecretCreateResponse,
110
+ )
111
+
112
+ def list(
113
+ self,
114
+ *,
115
+ env: str | Omit = omit,
116
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
117
+ # The extra values given here take precedence over values defined on the client or passed to this method.
118
+ extra_headers: Headers | None = None,
119
+ extra_query: Query | None = None,
120
+ extra_body: Body | None = None,
121
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
122
+ ) -> None:
123
+ """Retrieve all secret groups for a compute environment.
124
+
125
+ Secret groups organize
126
+ related secrets (API keys, credentials, etc.) that can be securely accessed by
127
+ compute jobs during execution.
128
+
129
+ Args:
130
+ env: Environment name to list secret groups for. If not specified, uses the default
131
+ environment.
132
+
133
+ extra_headers: Send extra headers
134
+
135
+ extra_query: Add additional query parameters to the request
136
+
137
+ extra_body: Add additional JSON properties to the request
138
+
139
+ timeout: Override the client-level default timeout for this request, in seconds
140
+ """
141
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
142
+ return self._get(
143
+ "/compute/v1/secrets",
144
+ options=make_request_options(
145
+ extra_headers=extra_headers,
146
+ extra_query=extra_query,
147
+ extra_body=extra_body,
148
+ timeout=timeout,
149
+ query=maybe_transform({"env": env}, secret_list_params.SecretListParams),
150
+ ),
151
+ cast_to=NoneType,
152
+ )
153
+
154
+ def delete_group(
155
+ self,
156
+ group: str,
157
+ *,
158
+ env: str | Omit = omit,
159
+ key: str | Omit = omit,
160
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
161
+ # The extra values given here take precedence over values defined on the client or passed to this method.
162
+ extra_headers: Headers | None = None,
163
+ extra_query: Query | None = None,
164
+ extra_body: Body | None = None,
165
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
166
+ ) -> None:
167
+ """
168
+ Delete an entire secret group or a specific key within a secret group.
169
+ Automatically syncs the deletion to Modal compute infrastructure. When deleting
170
+ a specific key, the remaining secrets in the group are re-synced. When deleting
171
+ the entire group, all secrets and the group itself are removed from both the
172
+ database and Modal.
173
+
174
+ Args:
175
+ env: Environment name. If not provided, uses the default environment
176
+
177
+ key: Specific key to delete within the group. If not provided, the entire group is
178
+ deleted
179
+
180
+ extra_headers: Send extra headers
181
+
182
+ extra_query: Add additional query parameters to the request
183
+
184
+ extra_body: Add additional JSON properties to the request
185
+
186
+ timeout: Override the client-level default timeout for this request, in seconds
187
+ """
188
+ if not group:
189
+ raise ValueError(f"Expected a non-empty value for `group` but received {group!r}")
190
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
191
+ return self._delete(
192
+ f"/compute/v1/secrets/{group}",
193
+ options=make_request_options(
194
+ extra_headers=extra_headers,
195
+ extra_query=extra_query,
196
+ extra_body=extra_body,
197
+ timeout=timeout,
198
+ query=maybe_transform(
199
+ {
200
+ "env": env,
201
+ "key": key,
202
+ },
203
+ secret_delete_group_params.SecretDeleteGroupParams,
204
+ ),
205
+ ),
206
+ cast_to=NoneType,
207
+ )
208
+
209
+ def retrieve_group(
210
+ self,
211
+ group: str,
212
+ *,
213
+ env: str | Omit = omit,
214
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
215
+ # The extra values given here take precedence over values defined on the client or passed to this method.
216
+ extra_headers: Headers | None = None,
217
+ extra_query: Query | None = None,
218
+ extra_body: Body | None = None,
219
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
220
+ ) -> None:
221
+ """
222
+ Retrieve the keys (names) of secrets in a specified group within a compute
223
+ environment. For security reasons, actual secret values are not returned - only
224
+ the keys and metadata.
225
+
226
+ Args:
227
+ env: Environment name. If not specified, uses the default environment
228
+
229
+ extra_headers: Send extra headers
230
+
231
+ extra_query: Add additional query parameters to the request
232
+
233
+ extra_body: Add additional JSON properties to the request
234
+
235
+ timeout: Override the client-level default timeout for this request, in seconds
236
+ """
237
+ if not group:
238
+ raise ValueError(f"Expected a non-empty value for `group` but received {group!r}")
239
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
240
+ return self._get(
241
+ f"/compute/v1/secrets/{group}",
242
+ options=make_request_options(
243
+ extra_headers=extra_headers,
244
+ extra_query=extra_query,
245
+ extra_body=extra_body,
246
+ timeout=timeout,
247
+ query=maybe_transform({"env": env}, secret_retrieve_group_params.SecretRetrieveGroupParams),
248
+ ),
249
+ cast_to=NoneType,
250
+ )
251
+
252
+ def update_group(
253
+ self,
254
+ group: str,
255
+ *,
256
+ secrets: Dict[str, str],
257
+ env: str | Omit = omit,
258
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
259
+ # The extra values given here take precedence over values defined on the client or passed to this method.
260
+ extra_headers: Headers | None = None,
261
+ extra_query: Query | None = None,
262
+ extra_body: Body | None = None,
263
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
264
+ ) -> None:
265
+ """Set or update secrets in a compute secret group.
266
+
267
+ Secrets are encrypted with
268
+ AES-256-GCM and synced to compute infrastructure in real-time. Use this to
269
+ manage environment variables and API keys for your compute workloads.
270
+
271
+ Args:
272
+ secrets: Key-value pairs of secrets to set
273
+
274
+ env: Environment name (optional, uses default if not specified)
275
+
276
+ extra_headers: Send extra headers
277
+
278
+ extra_query: Add additional query parameters to the request
279
+
280
+ extra_body: Add additional JSON properties to the request
281
+
282
+ timeout: Override the client-level default timeout for this request, in seconds
283
+ """
284
+ if not group:
285
+ raise ValueError(f"Expected a non-empty value for `group` but received {group!r}")
286
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
287
+ return self._put(
288
+ f"/compute/v1/secrets/{group}",
289
+ body=maybe_transform(
290
+ {
291
+ "secrets": secrets,
292
+ "env": env,
293
+ },
294
+ secret_update_group_params.SecretUpdateGroupParams,
295
+ ),
296
+ options=make_request_options(
297
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
298
+ ),
299
+ cast_to=NoneType,
300
+ )
301
+
302
+
303
+ class AsyncSecretsResource(AsyncAPIResource):
304
+ @cached_property
305
+ def with_raw_response(self) -> AsyncSecretsResourceWithRawResponse:
306
+ """
307
+ This property can be used as a prefix for any HTTP method call to return
308
+ the raw response object instead of the parsed content.
309
+
310
+ For more information, see https://www.github.com/CaseMark/casedev-python#accessing-raw-response-data-eg-headers
311
+ """
312
+ return AsyncSecretsResourceWithRawResponse(self)
313
+
314
+ @cached_property
315
+ def with_streaming_response(self) -> AsyncSecretsResourceWithStreamingResponse:
316
+ """
317
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
318
+
319
+ For more information, see https://www.github.com/CaseMark/casedev-python#with_streaming_response
320
+ """
321
+ return AsyncSecretsResourceWithStreamingResponse(self)
322
+
323
+ async def create(
324
+ self,
325
+ *,
326
+ name: str,
327
+ description: str | Omit = omit,
328
+ env: str | Omit = omit,
329
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
330
+ # The extra values given here take precedence over values defined on the client or passed to this method.
331
+ extra_headers: Headers | None = None,
332
+ extra_query: Query | None = None,
333
+ extra_body: Body | None = None,
334
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
335
+ ) -> SecretCreateResponse:
336
+ """Creates a new secret group in a compute environment.
337
+
338
+ Secret groups organize
339
+ related secrets for use in serverless functions and workflows. If no environment
340
+ is specified, the group is created in the default environment.
341
+
342
+ **Features:**
343
+
344
+ - Organize secrets by logical groups (e.g., database, APIs, third-party
345
+ services)
346
+ - Environment-based isolation
347
+ - Validation of group names
348
+ - Conflict detection for existing groups
349
+
350
+ Args:
351
+ name: Unique name for the secret group. Must contain only letters, numbers, hyphens,
352
+ and underscores.
353
+
354
+ description: Optional description of the secret group's purpose
355
+
356
+ env: Environment name where the secret group will be created. Uses default
357
+ environment if not specified.
358
+
359
+ extra_headers: Send extra headers
360
+
361
+ extra_query: Add additional query parameters to the request
362
+
363
+ extra_body: Add additional JSON properties to the request
364
+
365
+ timeout: Override the client-level default timeout for this request, in seconds
366
+ """
367
+ return await self._post(
368
+ "/compute/v1/secrets",
369
+ body=await async_maybe_transform(
370
+ {
371
+ "name": name,
372
+ "description": description,
373
+ "env": env,
374
+ },
375
+ secret_create_params.SecretCreateParams,
376
+ ),
377
+ options=make_request_options(
378
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
379
+ ),
380
+ cast_to=SecretCreateResponse,
381
+ )
382
+
383
+ async def list(
384
+ self,
385
+ *,
386
+ env: str | Omit = omit,
387
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
388
+ # The extra values given here take precedence over values defined on the client or passed to this method.
389
+ extra_headers: Headers | None = None,
390
+ extra_query: Query | None = None,
391
+ extra_body: Body | None = None,
392
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
393
+ ) -> None:
394
+ """Retrieve all secret groups for a compute environment.
395
+
396
+ Secret groups organize
397
+ related secrets (API keys, credentials, etc.) that can be securely accessed by
398
+ compute jobs during execution.
399
+
400
+ Args:
401
+ env: Environment name to list secret groups for. If not specified, uses the default
402
+ environment.
403
+
404
+ extra_headers: Send extra headers
405
+
406
+ extra_query: Add additional query parameters to the request
407
+
408
+ extra_body: Add additional JSON properties to the request
409
+
410
+ timeout: Override the client-level default timeout for this request, in seconds
411
+ """
412
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
413
+ return await self._get(
414
+ "/compute/v1/secrets",
415
+ options=make_request_options(
416
+ extra_headers=extra_headers,
417
+ extra_query=extra_query,
418
+ extra_body=extra_body,
419
+ timeout=timeout,
420
+ query=await async_maybe_transform({"env": env}, secret_list_params.SecretListParams),
421
+ ),
422
+ cast_to=NoneType,
423
+ )
424
+
425
+ async def delete_group(
426
+ self,
427
+ group: str,
428
+ *,
429
+ env: str | Omit = omit,
430
+ key: str | Omit = omit,
431
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
432
+ # The extra values given here take precedence over values defined on the client or passed to this method.
433
+ extra_headers: Headers | None = None,
434
+ extra_query: Query | None = None,
435
+ extra_body: Body | None = None,
436
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
437
+ ) -> None:
438
+ """
439
+ Delete an entire secret group or a specific key within a secret group.
440
+ Automatically syncs the deletion to Modal compute infrastructure. When deleting
441
+ a specific key, the remaining secrets in the group are re-synced. When deleting
442
+ the entire group, all secrets and the group itself are removed from both the
443
+ database and Modal.
444
+
445
+ Args:
446
+ env: Environment name. If not provided, uses the default environment
447
+
448
+ key: Specific key to delete within the group. If not provided, the entire group is
449
+ deleted
450
+
451
+ extra_headers: Send extra headers
452
+
453
+ extra_query: Add additional query parameters to the request
454
+
455
+ extra_body: Add additional JSON properties to the request
456
+
457
+ timeout: Override the client-level default timeout for this request, in seconds
458
+ """
459
+ if not group:
460
+ raise ValueError(f"Expected a non-empty value for `group` but received {group!r}")
461
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
462
+ return await self._delete(
463
+ f"/compute/v1/secrets/{group}",
464
+ options=make_request_options(
465
+ extra_headers=extra_headers,
466
+ extra_query=extra_query,
467
+ extra_body=extra_body,
468
+ timeout=timeout,
469
+ query=await async_maybe_transform(
470
+ {
471
+ "env": env,
472
+ "key": key,
473
+ },
474
+ secret_delete_group_params.SecretDeleteGroupParams,
475
+ ),
476
+ ),
477
+ cast_to=NoneType,
478
+ )
479
+
480
+ async def retrieve_group(
481
+ self,
482
+ group: str,
483
+ *,
484
+ env: str | Omit = omit,
485
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
486
+ # The extra values given here take precedence over values defined on the client or passed to this method.
487
+ extra_headers: Headers | None = None,
488
+ extra_query: Query | None = None,
489
+ extra_body: Body | None = None,
490
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
491
+ ) -> None:
492
+ """
493
+ Retrieve the keys (names) of secrets in a specified group within a compute
494
+ environment. For security reasons, actual secret values are not returned - only
495
+ the keys and metadata.
496
+
497
+ Args:
498
+ env: Environment name. If not specified, uses the default environment
499
+
500
+ extra_headers: Send extra headers
501
+
502
+ extra_query: Add additional query parameters to the request
503
+
504
+ extra_body: Add additional JSON properties to the request
505
+
506
+ timeout: Override the client-level default timeout for this request, in seconds
507
+ """
508
+ if not group:
509
+ raise ValueError(f"Expected a non-empty value for `group` but received {group!r}")
510
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
511
+ return await self._get(
512
+ f"/compute/v1/secrets/{group}",
513
+ options=make_request_options(
514
+ extra_headers=extra_headers,
515
+ extra_query=extra_query,
516
+ extra_body=extra_body,
517
+ timeout=timeout,
518
+ query=await async_maybe_transform({"env": env}, secret_retrieve_group_params.SecretRetrieveGroupParams),
519
+ ),
520
+ cast_to=NoneType,
521
+ )
522
+
523
+ async def update_group(
524
+ self,
525
+ group: str,
526
+ *,
527
+ secrets: Dict[str, str],
528
+ env: str | Omit = omit,
529
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
530
+ # The extra values given here take precedence over values defined on the client or passed to this method.
531
+ extra_headers: Headers | None = None,
532
+ extra_query: Query | None = None,
533
+ extra_body: Body | None = None,
534
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
535
+ ) -> None:
536
+ """Set or update secrets in a compute secret group.
537
+
538
+ Secrets are encrypted with
539
+ AES-256-GCM and synced to compute infrastructure in real-time. Use this to
540
+ manage environment variables and API keys for your compute workloads.
541
+
542
+ Args:
543
+ secrets: Key-value pairs of secrets to set
544
+
545
+ env: Environment name (optional, uses default if not specified)
546
+
547
+ extra_headers: Send extra headers
548
+
549
+ extra_query: Add additional query parameters to the request
550
+
551
+ extra_body: Add additional JSON properties to the request
552
+
553
+ timeout: Override the client-level default timeout for this request, in seconds
554
+ """
555
+ if not group:
556
+ raise ValueError(f"Expected a non-empty value for `group` but received {group!r}")
557
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
558
+ return await self._put(
559
+ f"/compute/v1/secrets/{group}",
560
+ body=await async_maybe_transform(
561
+ {
562
+ "secrets": secrets,
563
+ "env": env,
564
+ },
565
+ secret_update_group_params.SecretUpdateGroupParams,
566
+ ),
567
+ options=make_request_options(
568
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
569
+ ),
570
+ cast_to=NoneType,
571
+ )
572
+
573
+
574
+ class SecretsResourceWithRawResponse:
575
+ def __init__(self, secrets: SecretsResource) -> None:
576
+ self._secrets = secrets
577
+
578
+ self.create = to_raw_response_wrapper(
579
+ secrets.create,
580
+ )
581
+ self.list = to_raw_response_wrapper(
582
+ secrets.list,
583
+ )
584
+ self.delete_group = to_raw_response_wrapper(
585
+ secrets.delete_group,
586
+ )
587
+ self.retrieve_group = to_raw_response_wrapper(
588
+ secrets.retrieve_group,
589
+ )
590
+ self.update_group = to_raw_response_wrapper(
591
+ secrets.update_group,
592
+ )
593
+
594
+
595
+ class AsyncSecretsResourceWithRawResponse:
596
+ def __init__(self, secrets: AsyncSecretsResource) -> None:
597
+ self._secrets = secrets
598
+
599
+ self.create = async_to_raw_response_wrapper(
600
+ secrets.create,
601
+ )
602
+ self.list = async_to_raw_response_wrapper(
603
+ secrets.list,
604
+ )
605
+ self.delete_group = async_to_raw_response_wrapper(
606
+ secrets.delete_group,
607
+ )
608
+ self.retrieve_group = async_to_raw_response_wrapper(
609
+ secrets.retrieve_group,
610
+ )
611
+ self.update_group = async_to_raw_response_wrapper(
612
+ secrets.update_group,
613
+ )
614
+
615
+
616
+ class SecretsResourceWithStreamingResponse:
617
+ def __init__(self, secrets: SecretsResource) -> None:
618
+ self._secrets = secrets
619
+
620
+ self.create = to_streamed_response_wrapper(
621
+ secrets.create,
622
+ )
623
+ self.list = to_streamed_response_wrapper(
624
+ secrets.list,
625
+ )
626
+ self.delete_group = to_streamed_response_wrapper(
627
+ secrets.delete_group,
628
+ )
629
+ self.retrieve_group = to_streamed_response_wrapper(
630
+ secrets.retrieve_group,
631
+ )
632
+ self.update_group = to_streamed_response_wrapper(
633
+ secrets.update_group,
634
+ )
635
+
636
+
637
+ class AsyncSecretsResourceWithStreamingResponse:
638
+ def __init__(self, secrets: AsyncSecretsResource) -> None:
639
+ self._secrets = secrets
640
+
641
+ self.create = async_to_streamed_response_wrapper(
642
+ secrets.create,
643
+ )
644
+ self.list = async_to_streamed_response_wrapper(
645
+ secrets.list,
646
+ )
647
+ self.delete_group = async_to_streamed_response_wrapper(
648
+ secrets.delete_group,
649
+ )
650
+ self.retrieve_group = async_to_streamed_response_wrapper(
651
+ secrets.retrieve_group,
652
+ )
653
+ self.update_group = async_to_streamed_response_wrapper(
654
+ secrets.update_group,
655
+ )