skyflow-flowvault-python 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. common/.coveragerc +4 -0
  2. common/__init__.py +3 -0
  3. common/client/__init__.py +0 -0
  4. common/client/base_skyflow.py +345 -0
  5. common/client/utils/__init__.py +1 -0
  6. common/client/utils/_utils.py +127 -0
  7. common/errors/__init__.py +1 -0
  8. common/errors/_skyflow_error.py +17 -0
  9. common/generated/__init__.py +0 -0
  10. common/generated/rest/__init__.py +24 -0
  11. common/generated/rest/authentication/__init__.py +4 -0
  12. common/generated/rest/authentication/client.py +181 -0
  13. common/generated/rest/authentication/raw_client.py +241 -0
  14. common/generated/rest/client.py +153 -0
  15. common/generated/rest/core/__init__.py +52 -0
  16. common/generated/rest/core/api_error.py +23 -0
  17. common/generated/rest/core/client_wrapper.py +86 -0
  18. common/generated/rest/core/datetime_utils.py +28 -0
  19. common/generated/rest/core/file.py +67 -0
  20. common/generated/rest/core/force_multipart.py +16 -0
  21. common/generated/rest/core/http_client.py +543 -0
  22. common/generated/rest/core/http_response.py +55 -0
  23. common/generated/rest/core/jsonable_encoder.py +100 -0
  24. common/generated/rest/core/pydantic_utilities.py +255 -0
  25. common/generated/rest/core/query_encoder.py +58 -0
  26. common/generated/rest/core/remove_none_from_dict.py +11 -0
  27. common/generated/rest/core/request_options.py +35 -0
  28. common/generated/rest/core/serialization.py +276 -0
  29. common/generated/rest/environment.py +8 -0
  30. common/generated/rest/errors/__init__.py +9 -0
  31. common/generated/rest/errors/bad_request_error.py +14 -0
  32. common/generated/rest/errors/not_found_error.py +14 -0
  33. common/generated/rest/errors/unauthorized_error.py +14 -0
  34. common/generated/rest/py.typed +0 -0
  35. common/generated/rest/types/__init__.py +9 -0
  36. common/generated/rest/types/googlerpc_status.py +22 -0
  37. common/generated/rest/types/protobuf_any.py +21 -0
  38. common/generated/rest/types/v_1_get_auth_token_response.py +33 -0
  39. common/generated/rest/version.py +6 -0
  40. common/service_account/__init__.py +1 -0
  41. common/service_account/_utils.py +248 -0
  42. common/service_account/client/__init__.py +0 -0
  43. common/service_account/client/auth_client.py +13 -0
  44. common/utils/__init__.py +4 -0
  45. common/utils/_helpers.py +18 -0
  46. common/utils/_skyflow_messages.py +445 -0
  47. common/utils/_utils.py +50 -0
  48. common/utils/constants.py +291 -0
  49. common/utils/enums/__init__.py +12 -0
  50. common/utils/enums/content_types.py +9 -0
  51. common/utils/enums/detect_entities.py +73 -0
  52. common/utils/enums/detect_output_transcriptions.py +8 -0
  53. common/utils/enums/env.py +13 -0
  54. common/utils/enums/log_level.py +8 -0
  55. common/utils/enums/masking_method.py +5 -0
  56. common/utils/enums/redaction_type.py +7 -0
  57. common/utils/enums/request_method.py +8 -0
  58. common/utils/enums/token_mode.py +6 -0
  59. common/utils/enums/token_type.py +6 -0
  60. common/utils/logger/__init__.py +2 -0
  61. common/utils/logger/_log_helpers.py +47 -0
  62. common/utils/logger/_logger.py +50 -0
  63. common/utils/validations/__init__.py +11 -0
  64. common/utils/validations/_validations.py +267 -0
  65. common/vault/base_vault_client.py +122 -0
  66. common/vault/base_vault_controller.py +58 -0
  67. common/vault/data/__init__.py +2 -0
  68. common/vault/data/_base_insert_request.py +7 -0
  69. common/vault/data/_base_insert_response.py +11 -0
  70. skyflow/__init__.py +2 -0
  71. skyflow/client/__init__.py +1 -0
  72. skyflow/client/_http_config_builder.py +45 -0
  73. skyflow/client/skyflow.py +15 -0
  74. skyflow/error/__init__.py +3 -0
  75. skyflow/generated/__init__.py +0 -0
  76. skyflow/generated/rest/__init__.py +164 -0
  77. skyflow/generated/rest/_default_clients.py +32 -0
  78. skyflow/generated/rest/client.py +385 -0
  79. skyflow/generated/rest/core/__init__.py +127 -0
  80. skyflow/generated/rest/core/api_error.py +23 -0
  81. skyflow/generated/rest/core/client_wrapper.py +148 -0
  82. skyflow/generated/rest/core/datetime_utils.py +70 -0
  83. skyflow/generated/rest/core/file.py +67 -0
  84. skyflow/generated/rest/core/force_multipart.py +18 -0
  85. skyflow/generated/rest/core/http_client.py +940 -0
  86. skyflow/generated/rest/core/http_response.py +63 -0
  87. skyflow/generated/rest/core/http_sse/__init__.py +42 -0
  88. skyflow/generated/rest/core/http_sse/_api.py +455 -0
  89. skyflow/generated/rest/core/http_sse/_decoders.py +74 -0
  90. skyflow/generated/rest/core/http_sse/_exceptions.py +7 -0
  91. skyflow/generated/rest/core/http_sse/_models.py +17 -0
  92. skyflow/generated/rest/core/jsonable_encoder.py +133 -0
  93. skyflow/generated/rest/core/logging.py +107 -0
  94. skyflow/generated/rest/core/parse_error.py +36 -0
  95. skyflow/generated/rest/core/pydantic_utilities.py +486 -0
  96. skyflow/generated/rest/core/query_encoder.py +58 -0
  97. skyflow/generated/rest/core/remove_none_from_dict.py +11 -0
  98. skyflow/generated/rest/core/request_options.py +40 -0
  99. skyflow/generated/rest/core/serialization.py +347 -0
  100. skyflow/generated/rest/environment.py +8 -0
  101. skyflow/generated/rest/errors/__init__.py +53 -0
  102. skyflow/generated/rest/errors/bad_request_error.py +11 -0
  103. skyflow/generated/rest/errors/forbidden_error.py +11 -0
  104. skyflow/generated/rest/errors/internal_server_error.py +11 -0
  105. skyflow/generated/rest/errors/not_found_error.py +11 -0
  106. skyflow/generated/rest/errors/too_many_requests_error.py +11 -0
  107. skyflow/generated/rest/errors/unauthorized_error.py +11 -0
  108. skyflow/generated/rest/py.typed +0 -0
  109. skyflow/generated/rest/query/__init__.py +4 -0
  110. skyflow/generated/rest/query/client.py +139 -0
  111. skyflow/generated/rest/query/raw_client.py +239 -0
  112. skyflow/generated/rest/raw_client.py +86 -0
  113. skyflow/generated/rest/records/__init__.py +34 -0
  114. skyflow/generated/rest/records/client.py +685 -0
  115. skyflow/generated/rest/records/raw_client.py +988 -0
  116. skyflow/generated/rest/records/types/__init__.py +34 -0
  117. skyflow/generated/rest/records/types/update_request_update_type.py +5 -0
  118. skyflow/generated/rest/tokens/__init__.py +4 -0
  119. skyflow/generated/rest/tokens/client.py +246 -0
  120. skyflow/generated/rest/tokens/raw_client.py +507 -0
  121. skyflow/generated/rest/types/__init__.py +116 -0
  122. skyflow/generated/rest/types/column_redactions.py +33 -0
  123. skyflow/generated/rest/types/delete_response.py +23 -0
  124. skyflow/generated/rest/types/delete_response_object.py +42 -0
  125. skyflow/generated/rest/types/detokenize_response.py +23 -0
  126. skyflow/generated/rest/types/detokenize_response_object.py +54 -0
  127. skyflow/generated/rest/types/error_response.py +20 -0
  128. skyflow/generated/rest/types/error_response_error.py +28 -0
  129. skyflow/generated/rest/types/execute_query_record_response.py +22 -0
  130. skyflow/generated/rest/types/execute_query_response.py +26 -0
  131. skyflow/generated/rest/types/execute_query_response_metadata.py +26 -0
  132. skyflow/generated/rest/types/get_request_data.py +60 -0
  133. skyflow/generated/rest/types/get_response.py +23 -0
  134. skyflow/generated/rest/types/get_tokens_from_values_request_object.py +30 -0
  135. skyflow/generated/rest/types/get_tokens_from_values_response.py +23 -0
  136. skyflow/generated/rest/types/google_protobuf_value.py +8 -0
  137. skyflow/generated/rest/types/http_code.py +6 -0
  138. skyflow/generated/rest/types/insert_record_data.py +36 -0
  139. skyflow/generated/rest/types/insert_response.py +23 -0
  140. skyflow/generated/rest/types/record_response_object.py +70 -0
  141. skyflow/generated/rest/types/token_group_redactions.py +33 -0
  142. skyflow/generated/rest/types/tokenize_response_object.py +49 -0
  143. skyflow/generated/rest/types/unique_value.py +22 -0
  144. skyflow/generated/rest/types/update_record_data.py +52 -0
  145. skyflow/generated/rest/types/update_record_data_update_type.py +5 -0
  146. skyflow/generated/rest/types/update_response.py +23 -0
  147. skyflow/generated/rest/types/upsert.py +45 -0
  148. skyflow/generated/rest/types/upsert_update_type.py +5 -0
  149. skyflow/generated/rest/version.py +6 -0
  150. skyflow/service_account/__init__.py +15 -0
  151. skyflow/utils/__init__.py +9 -0
  152. skyflow/utils/_http_config.py +36 -0
  153. skyflow/utils/_response_parsing.py +66 -0
  154. skyflow/utils/_retry.py +97 -0
  155. skyflow/utils/_skyflow_messages.py +114 -0
  156. skyflow/utils/_utils.py +54 -0
  157. skyflow/utils/_version.py +1 -0
  158. skyflow/utils/enums/__init__.py +3 -0
  159. skyflow/utils/enums/_custom_header_key.py +10 -0
  160. skyflow/utils/enums/_env_urls.py +9 -0
  161. skyflow/utils/enums/_upsert_type.py +7 -0
  162. skyflow/utils/validations/__init__.py +9 -0
  163. skyflow/utils/validations/_validations.py +195 -0
  164. skyflow/vault/__init__.py +0 -0
  165. skyflow/vault/client/__init__.py +0 -0
  166. skyflow/vault/client/client.py +102 -0
  167. skyflow/vault/controller/__init__.py +1 -0
  168. skyflow/vault/controller/_vault.py +475 -0
  169. skyflow/vault/data/__init__.py +30 -0
  170. skyflow/vault/data/_column_redactions.py +4 -0
  171. skyflow/vault/data/_delete_options.py +8 -0
  172. skyflow/vault/data/_delete_request.py +5 -0
  173. skyflow/vault/data/_delete_response.py +9 -0
  174. skyflow/vault/data/_delete_response_record.py +9 -0
  175. skyflow/vault/data/_detokenize_options.py +8 -0
  176. skyflow/vault/data/_detokenize_request.py +9 -0
  177. skyflow/vault/data/_detokenize_response.py +9 -0
  178. skyflow/vault/data/_detokenize_response_record.py +16 -0
  179. skyflow/vault/data/_detokenize_response_record_metadata.py +10 -0
  180. skyflow/vault/data/_get_options.py +8 -0
  181. skyflow/vault/data/_get_request.py +17 -0
  182. skyflow/vault/data/_get_request_record.py +13 -0
  183. skyflow/vault/data/_get_response.py +9 -0
  184. skyflow/vault/data/_get_response_record.py +17 -0
  185. skyflow/vault/data/_insert_options.py +8 -0
  186. skyflow/vault/data/_insert_request.py +11 -0
  187. skyflow/vault/data/_insert_request_record.py +9 -0
  188. skyflow/vault/data/_insert_response.py +9 -0
  189. skyflow/vault/data/_insert_response_record.py +17 -0
  190. skyflow/vault/data/_request_context.py +16 -0
  191. skyflow/vault/data/_token.py +8 -0
  192. skyflow/vault/data/_token_group_redactions.py +4 -0
  193. skyflow/vault/data/_update_options.py +8 -0
  194. skyflow/vault/data/_update_request.py +11 -0
  195. skyflow/vault/data/_update_request_record.py +6 -0
  196. skyflow/vault/data/_update_response.py +9 -0
  197. skyflow/vault/data/_update_response_record.py +17 -0
  198. skyflow/vault/data/_upsert_options.py +7 -0
  199. skyflow_flowvault_python-1.0.0.dist-info/METADATA +896 -0
  200. skyflow_flowvault_python-1.0.0.dist-info/RECORD +202 -0
  201. skyflow_flowvault_python-1.0.0.dist-info/WHEEL +5 -0
  202. skyflow_flowvault_python-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,507 @@
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.parse_error import ParsingError
10
+ from ..core.pydantic_utilities import parse_obj_as
11
+ from ..core.request_options import RequestOptions
12
+ from ..core.serialization import convert_and_respect_annotation_metadata
13
+ from ..errors.bad_request_error import BadRequestError
14
+ from ..errors.forbidden_error import ForbiddenError
15
+ from ..errors.internal_server_error import InternalServerError
16
+ from ..errors.not_found_error import NotFoundError
17
+ from ..errors.too_many_requests_error import TooManyRequestsError
18
+ from ..errors.unauthorized_error import UnauthorizedError
19
+ from ..types.detokenize_response import DetokenizeResponse
20
+ from ..types.error_response import ErrorResponse
21
+ from ..types.get_tokens_from_values_request_object import GetTokensFromValuesRequestObject
22
+ from ..types.get_tokens_from_values_response import GetTokensFromValuesResponse
23
+ from ..types.token_group_redactions import TokenGroupRedactions
24
+ from pydantic import ValidationError
25
+
26
+ # this is used as the default value for optional parameters
27
+ OMIT = typing.cast(typing.Any, ...)
28
+
29
+
30
+ class RawTokensClient:
31
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
32
+ self._client_wrapper = client_wrapper
33
+
34
+ def get_tokens(
35
+ self,
36
+ *,
37
+ vault_id: str,
38
+ records: typing.Sequence[GetTokensFromValuesRequestObject],
39
+ request_options: typing.Optional[RequestOptions] = None,
40
+ ) -> HttpResponse[GetTokensFromValuesResponse]:
41
+ """
42
+ Returns the deterministic token previously issued for each supplied plaintext value within the specified token group. Only applicable to deterministic tokengroups.
43
+
44
+ Parameters
45
+ ----------
46
+ vault_id : str
47
+ ID of the vault.
48
+
49
+ records : typing.Sequence[GetTokensFromValuesRequestObject]
50
+ Array of value/token-group pairs to look up.
51
+
52
+ request_options : typing.Optional[RequestOptions]
53
+ Request-specific configuration.
54
+
55
+ Returns
56
+ -------
57
+ HttpResponse[GetTokensFromValuesResponse]
58
+ OK
59
+ """
60
+ _response = self._client_wrapper.httpx_client.request(
61
+ "v2/records/getTokens",
62
+ method="POST",
63
+ json={
64
+ "vaultID": vault_id,
65
+ "records": convert_and_respect_annotation_metadata(
66
+ object_=records, annotation=typing.Sequence[GetTokensFromValuesRequestObject], direction="write"
67
+ ),
68
+ },
69
+ headers={
70
+ "content-type": "application/json",
71
+ },
72
+ request_options=request_options,
73
+ omit=OMIT,
74
+ )
75
+ try:
76
+ if 200 <= _response.status_code < 300:
77
+ _data = typing.cast(
78
+ GetTokensFromValuesResponse,
79
+ parse_obj_as(
80
+ type_=GetTokensFromValuesResponse, # type: ignore
81
+ object_=_response.json(),
82
+ ),
83
+ )
84
+ return HttpResponse(response=_response, data=_data)
85
+ if _response.status_code == 400:
86
+ raise BadRequestError(
87
+ headers=dict(_response.headers),
88
+ body=typing.cast(
89
+ ErrorResponse,
90
+ parse_obj_as(
91
+ type_=ErrorResponse, # type: ignore
92
+ object_=_response.json(),
93
+ ),
94
+ ),
95
+ )
96
+ if _response.status_code == 401:
97
+ raise UnauthorizedError(
98
+ headers=dict(_response.headers),
99
+ body=typing.cast(
100
+ ErrorResponse,
101
+ parse_obj_as(
102
+ type_=ErrorResponse, # type: ignore
103
+ object_=_response.json(),
104
+ ),
105
+ ),
106
+ )
107
+ if _response.status_code == 403:
108
+ raise ForbiddenError(
109
+ headers=dict(_response.headers),
110
+ body=typing.cast(
111
+ ErrorResponse,
112
+ parse_obj_as(
113
+ type_=ErrorResponse, # type: ignore
114
+ object_=_response.json(),
115
+ ),
116
+ ),
117
+ )
118
+ if _response.status_code == 404:
119
+ raise NotFoundError(
120
+ headers=dict(_response.headers),
121
+ body=typing.cast(
122
+ ErrorResponse,
123
+ parse_obj_as(
124
+ type_=ErrorResponse, # type: ignore
125
+ object_=_response.json(),
126
+ ),
127
+ ),
128
+ )
129
+ if _response.status_code == 429:
130
+ raise TooManyRequestsError(
131
+ headers=dict(_response.headers),
132
+ body=typing.cast(
133
+ ErrorResponse,
134
+ parse_obj_as(
135
+ type_=ErrorResponse, # type: ignore
136
+ object_=_response.json(),
137
+ ),
138
+ ),
139
+ )
140
+ if _response.status_code == 500:
141
+ raise InternalServerError(
142
+ headers=dict(_response.headers),
143
+ body=typing.cast(
144
+ ErrorResponse,
145
+ parse_obj_as(
146
+ type_=ErrorResponse, # type: ignore
147
+ object_=_response.json(),
148
+ ),
149
+ ),
150
+ )
151
+ _response_json = _response.json()
152
+ except JSONDecodeError:
153
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
154
+ except ValidationError as e:
155
+ raise ParsingError(
156
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
157
+ )
158
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
159
+
160
+ def detokenize(
161
+ self,
162
+ *,
163
+ vault_id: str,
164
+ tokens: typing.Sequence[str],
165
+ token_group_redactions: typing.Optional[typing.Sequence[TokenGroupRedactions]] = OMIT,
166
+ request_options: typing.Optional[RequestOptions] = None,
167
+ ) -> HttpResponse[DetokenizeResponse]:
168
+ """
169
+ Returns values that correspond to the specified tokens.
170
+
171
+ Parameters
172
+ ----------
173
+ vault_id : str
174
+ ID of the vault.
175
+
176
+ tokens : typing.Sequence[str]
177
+ Token to be detokenized
178
+
179
+ token_group_redactions : typing.Optional[typing.Sequence[TokenGroupRedactions]]
180
+ List of token groups to redact.
181
+
182
+ request_options : typing.Optional[RequestOptions]
183
+ Request-specific configuration.
184
+
185
+ Returns
186
+ -------
187
+ HttpResponse[DetokenizeResponse]
188
+ OK
189
+ """
190
+ _response = self._client_wrapper.httpx_client.request(
191
+ "v2/tokens/detokenize",
192
+ method="POST",
193
+ json={
194
+ "vaultID": vault_id,
195
+ "tokens": tokens,
196
+ "tokenGroupRedactions": convert_and_respect_annotation_metadata(
197
+ object_=token_group_redactions, annotation=typing.Sequence[TokenGroupRedactions], direction="write"
198
+ ),
199
+ },
200
+ headers={
201
+ "content-type": "application/json",
202
+ },
203
+ request_options=request_options,
204
+ omit=OMIT,
205
+ )
206
+ try:
207
+ if 200 <= _response.status_code < 300:
208
+ _data = typing.cast(
209
+ DetokenizeResponse,
210
+ parse_obj_as(
211
+ type_=DetokenizeResponse, # type: ignore
212
+ object_=_response.json(),
213
+ ),
214
+ )
215
+ return HttpResponse(response=_response, data=_data)
216
+ if _response.status_code == 400:
217
+ raise BadRequestError(
218
+ headers=dict(_response.headers),
219
+ body=typing.cast(
220
+ ErrorResponse,
221
+ parse_obj_as(
222
+ type_=ErrorResponse, # type: ignore
223
+ object_=_response.json(),
224
+ ),
225
+ ),
226
+ )
227
+ if _response.status_code == 401:
228
+ raise UnauthorizedError(
229
+ headers=dict(_response.headers),
230
+ body=typing.cast(
231
+ ErrorResponse,
232
+ parse_obj_as(
233
+ type_=ErrorResponse, # type: ignore
234
+ object_=_response.json(),
235
+ ),
236
+ ),
237
+ )
238
+ if _response.status_code == 404:
239
+ raise NotFoundError(
240
+ headers=dict(_response.headers),
241
+ body=typing.cast(
242
+ ErrorResponse,
243
+ parse_obj_as(
244
+ type_=ErrorResponse, # type: ignore
245
+ object_=_response.json(),
246
+ ),
247
+ ),
248
+ )
249
+ if _response.status_code == 500:
250
+ raise InternalServerError(
251
+ headers=dict(_response.headers),
252
+ body=typing.cast(
253
+ ErrorResponse,
254
+ parse_obj_as(
255
+ type_=ErrorResponse, # type: ignore
256
+ object_=_response.json(),
257
+ ),
258
+ ),
259
+ )
260
+ _response_json = _response.json()
261
+ except JSONDecodeError:
262
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
263
+ except ValidationError as e:
264
+ raise ParsingError(
265
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
266
+ )
267
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
268
+
269
+
270
+ class AsyncRawTokensClient:
271
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
272
+ self._client_wrapper = client_wrapper
273
+
274
+ async def get_tokens(
275
+ self,
276
+ *,
277
+ vault_id: str,
278
+ records: typing.Sequence[GetTokensFromValuesRequestObject],
279
+ request_options: typing.Optional[RequestOptions] = None,
280
+ ) -> AsyncHttpResponse[GetTokensFromValuesResponse]:
281
+ """
282
+ Returns the deterministic token previously issued for each supplied plaintext value within the specified token group. Only applicable to deterministic tokengroups.
283
+
284
+ Parameters
285
+ ----------
286
+ vault_id : str
287
+ ID of the vault.
288
+
289
+ records : typing.Sequence[GetTokensFromValuesRequestObject]
290
+ Array of value/token-group pairs to look up.
291
+
292
+ request_options : typing.Optional[RequestOptions]
293
+ Request-specific configuration.
294
+
295
+ Returns
296
+ -------
297
+ AsyncHttpResponse[GetTokensFromValuesResponse]
298
+ OK
299
+ """
300
+ _response = await self._client_wrapper.httpx_client.request(
301
+ "v2/records/getTokens",
302
+ method="POST",
303
+ json={
304
+ "vaultID": vault_id,
305
+ "records": convert_and_respect_annotation_metadata(
306
+ object_=records, annotation=typing.Sequence[GetTokensFromValuesRequestObject], direction="write"
307
+ ),
308
+ },
309
+ headers={
310
+ "content-type": "application/json",
311
+ },
312
+ request_options=request_options,
313
+ omit=OMIT,
314
+ )
315
+ try:
316
+ if 200 <= _response.status_code < 300:
317
+ _data = typing.cast(
318
+ GetTokensFromValuesResponse,
319
+ parse_obj_as(
320
+ type_=GetTokensFromValuesResponse, # type: ignore
321
+ object_=_response.json(),
322
+ ),
323
+ )
324
+ return AsyncHttpResponse(response=_response, data=_data)
325
+ if _response.status_code == 400:
326
+ raise BadRequestError(
327
+ headers=dict(_response.headers),
328
+ body=typing.cast(
329
+ ErrorResponse,
330
+ parse_obj_as(
331
+ type_=ErrorResponse, # type: ignore
332
+ object_=_response.json(),
333
+ ),
334
+ ),
335
+ )
336
+ if _response.status_code == 401:
337
+ raise UnauthorizedError(
338
+ headers=dict(_response.headers),
339
+ body=typing.cast(
340
+ ErrorResponse,
341
+ parse_obj_as(
342
+ type_=ErrorResponse, # type: ignore
343
+ object_=_response.json(),
344
+ ),
345
+ ),
346
+ )
347
+ if _response.status_code == 403:
348
+ raise ForbiddenError(
349
+ headers=dict(_response.headers),
350
+ body=typing.cast(
351
+ ErrorResponse,
352
+ parse_obj_as(
353
+ type_=ErrorResponse, # type: ignore
354
+ object_=_response.json(),
355
+ ),
356
+ ),
357
+ )
358
+ if _response.status_code == 404:
359
+ raise NotFoundError(
360
+ headers=dict(_response.headers),
361
+ body=typing.cast(
362
+ ErrorResponse,
363
+ parse_obj_as(
364
+ type_=ErrorResponse, # type: ignore
365
+ object_=_response.json(),
366
+ ),
367
+ ),
368
+ )
369
+ if _response.status_code == 429:
370
+ raise TooManyRequestsError(
371
+ headers=dict(_response.headers),
372
+ body=typing.cast(
373
+ ErrorResponse,
374
+ parse_obj_as(
375
+ type_=ErrorResponse, # type: ignore
376
+ object_=_response.json(),
377
+ ),
378
+ ),
379
+ )
380
+ if _response.status_code == 500:
381
+ raise InternalServerError(
382
+ headers=dict(_response.headers),
383
+ body=typing.cast(
384
+ ErrorResponse,
385
+ parse_obj_as(
386
+ type_=ErrorResponse, # type: ignore
387
+ object_=_response.json(),
388
+ ),
389
+ ),
390
+ )
391
+ _response_json = _response.json()
392
+ except JSONDecodeError:
393
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
394
+ except ValidationError as e:
395
+ raise ParsingError(
396
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
397
+ )
398
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
399
+
400
+ async def detokenize(
401
+ self,
402
+ *,
403
+ vault_id: str,
404
+ tokens: typing.Sequence[str],
405
+ token_group_redactions: typing.Optional[typing.Sequence[TokenGroupRedactions]] = OMIT,
406
+ request_options: typing.Optional[RequestOptions] = None,
407
+ ) -> AsyncHttpResponse[DetokenizeResponse]:
408
+ """
409
+ Returns values that correspond to the specified tokens.
410
+
411
+ Parameters
412
+ ----------
413
+ vault_id : str
414
+ ID of the vault.
415
+
416
+ tokens : typing.Sequence[str]
417
+ Token to be detokenized
418
+
419
+ token_group_redactions : typing.Optional[typing.Sequence[TokenGroupRedactions]]
420
+ List of token groups to redact.
421
+
422
+ request_options : typing.Optional[RequestOptions]
423
+ Request-specific configuration.
424
+
425
+ Returns
426
+ -------
427
+ AsyncHttpResponse[DetokenizeResponse]
428
+ OK
429
+ """
430
+ _response = await self._client_wrapper.httpx_client.request(
431
+ "v2/tokens/detokenize",
432
+ method="POST",
433
+ json={
434
+ "vaultID": vault_id,
435
+ "tokens": tokens,
436
+ "tokenGroupRedactions": convert_and_respect_annotation_metadata(
437
+ object_=token_group_redactions, annotation=typing.Sequence[TokenGroupRedactions], direction="write"
438
+ ),
439
+ },
440
+ headers={
441
+ "content-type": "application/json",
442
+ },
443
+ request_options=request_options,
444
+ omit=OMIT,
445
+ )
446
+ try:
447
+ if 200 <= _response.status_code < 300:
448
+ _data = typing.cast(
449
+ DetokenizeResponse,
450
+ parse_obj_as(
451
+ type_=DetokenizeResponse, # type: ignore
452
+ object_=_response.json(),
453
+ ),
454
+ )
455
+ return AsyncHttpResponse(response=_response, data=_data)
456
+ if _response.status_code == 400:
457
+ raise BadRequestError(
458
+ headers=dict(_response.headers),
459
+ body=typing.cast(
460
+ ErrorResponse,
461
+ parse_obj_as(
462
+ type_=ErrorResponse, # type: ignore
463
+ object_=_response.json(),
464
+ ),
465
+ ),
466
+ )
467
+ if _response.status_code == 401:
468
+ raise UnauthorizedError(
469
+ headers=dict(_response.headers),
470
+ body=typing.cast(
471
+ ErrorResponse,
472
+ parse_obj_as(
473
+ type_=ErrorResponse, # type: ignore
474
+ object_=_response.json(),
475
+ ),
476
+ ),
477
+ )
478
+ if _response.status_code == 404:
479
+ raise NotFoundError(
480
+ headers=dict(_response.headers),
481
+ body=typing.cast(
482
+ ErrorResponse,
483
+ parse_obj_as(
484
+ type_=ErrorResponse, # type: ignore
485
+ object_=_response.json(),
486
+ ),
487
+ ),
488
+ )
489
+ if _response.status_code == 500:
490
+ raise InternalServerError(
491
+ headers=dict(_response.headers),
492
+ body=typing.cast(
493
+ ErrorResponse,
494
+ parse_obj_as(
495
+ type_=ErrorResponse, # type: ignore
496
+ object_=_response.json(),
497
+ ),
498
+ ),
499
+ )
500
+ _response_json = _response.json()
501
+ except JSONDecodeError:
502
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
503
+ except ValidationError as e:
504
+ raise ParsingError(
505
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
506
+ )
507
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,116 @@
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 .column_redactions import ColumnRedactions
10
+ from .delete_response import DeleteResponse
11
+ from .delete_response_object import DeleteResponseObject
12
+ from .detokenize_response import DetokenizeResponse
13
+ from .detokenize_response_object import DetokenizeResponseObject
14
+ from .error_response import ErrorResponse
15
+ from .error_response_error import ErrorResponseError
16
+ from .execute_query_record_response import ExecuteQueryRecordResponse
17
+ from .execute_query_response import ExecuteQueryResponse
18
+ from .execute_query_response_metadata import ExecuteQueryResponseMetadata
19
+ from .get_request_data import GetRequestData
20
+ from .get_response import GetResponse
21
+ from .get_tokens_from_values_request_object import GetTokensFromValuesRequestObject
22
+ from .get_tokens_from_values_response import GetTokensFromValuesResponse
23
+ from .google_protobuf_value import GoogleProtobufValue
24
+ from .http_code import HttpCode
25
+ from .insert_record_data import InsertRecordData
26
+ from .insert_response import InsertResponse
27
+ from .record_response_object import RecordResponseObject
28
+ from .token_group_redactions import TokenGroupRedactions
29
+ from .tokenize_response_object import TokenizeResponseObject
30
+ from .unique_value import UniqueValue
31
+ from .update_record_data import UpdateRecordData
32
+ from .update_record_data_update_type import UpdateRecordDataUpdateType
33
+ from .update_response import UpdateResponse
34
+ from .upsert import Upsert
35
+ from .upsert_update_type import UpsertUpdateType
36
+ _dynamic_imports: typing.Dict[str, str] = {
37
+ "ColumnRedactions": ".column_redactions",
38
+ "DeleteResponse": ".delete_response",
39
+ "DeleteResponseObject": ".delete_response_object",
40
+ "DetokenizeResponse": ".detokenize_response",
41
+ "DetokenizeResponseObject": ".detokenize_response_object",
42
+ "ErrorResponse": ".error_response",
43
+ "ErrorResponseError": ".error_response_error",
44
+ "ExecuteQueryRecordResponse": ".execute_query_record_response",
45
+ "ExecuteQueryResponse": ".execute_query_response",
46
+ "ExecuteQueryResponseMetadata": ".execute_query_response_metadata",
47
+ "GetRequestData": ".get_request_data",
48
+ "GetResponse": ".get_response",
49
+ "GetTokensFromValuesRequestObject": ".get_tokens_from_values_request_object",
50
+ "GetTokensFromValuesResponse": ".get_tokens_from_values_response",
51
+ "GoogleProtobufValue": ".google_protobuf_value",
52
+ "HttpCode": ".http_code",
53
+ "InsertRecordData": ".insert_record_data",
54
+ "InsertResponse": ".insert_response",
55
+ "RecordResponseObject": ".record_response_object",
56
+ "TokenGroupRedactions": ".token_group_redactions",
57
+ "TokenizeResponseObject": ".tokenize_response_object",
58
+ "UniqueValue": ".unique_value",
59
+ "UpdateRecordData": ".update_record_data",
60
+ "UpdateRecordDataUpdateType": ".update_record_data_update_type",
61
+ "UpdateResponse": ".update_response",
62
+ "Upsert": ".upsert",
63
+ "UpsertUpdateType": ".upsert_update_type",
64
+ }
65
+
66
+
67
+ def __getattr__(attr_name: str) -> typing.Any:
68
+ module_name = _dynamic_imports.get(attr_name)
69
+ if module_name is None:
70
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
71
+ try:
72
+ module = import_module(module_name, __package__)
73
+ if module_name == f".{attr_name}":
74
+ return module
75
+ else:
76
+ return getattr(module, attr_name)
77
+ except ImportError as e:
78
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
79
+ except AttributeError as e:
80
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
81
+
82
+
83
+ def __dir__():
84
+ lazy_attrs = list(_dynamic_imports.keys())
85
+ return sorted(lazy_attrs)
86
+
87
+
88
+ __all__ = [
89
+ "ColumnRedactions",
90
+ "DeleteResponse",
91
+ "DeleteResponseObject",
92
+ "DetokenizeResponse",
93
+ "DetokenizeResponseObject",
94
+ "ErrorResponse",
95
+ "ErrorResponseError",
96
+ "ExecuteQueryRecordResponse",
97
+ "ExecuteQueryResponse",
98
+ "ExecuteQueryResponseMetadata",
99
+ "GetRequestData",
100
+ "GetResponse",
101
+ "GetTokensFromValuesRequestObject",
102
+ "GetTokensFromValuesResponse",
103
+ "GoogleProtobufValue",
104
+ "HttpCode",
105
+ "InsertRecordData",
106
+ "InsertResponse",
107
+ "RecordResponseObject",
108
+ "TokenGroupRedactions",
109
+ "TokenizeResponseObject",
110
+ "UniqueValue",
111
+ "UpdateRecordData",
112
+ "UpdateRecordDataUpdateType",
113
+ "UpdateResponse",
114
+ "Upsert",
115
+ "UpsertUpdateType",
116
+ ]
@@ -0,0 +1,33 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ import pydantic
6
+ import typing_extensions
7
+ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
8
+ from ..core.serialization import FieldMetadata
9
+
10
+
11
+ class ColumnRedactions(UniversalBaseModel):
12
+ column_name: typing_extensions.Annotated[
13
+ str,
14
+ FieldMetadata(alias="columnName"),
15
+ pydantic.Field(alias="columnName", description="Name of the column to redact."),
16
+ ]
17
+ """
18
+ Name of the column to redact.
19
+ """
20
+
21
+ redaction: str = pydantic.Field()
22
+ """
23
+ Name of the redaction type.
24
+ """
25
+
26
+ if IS_PYDANTIC_V2:
27
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
28
+ else:
29
+
30
+ class Config:
31
+ frozen = True
32
+ smart_union = True
33
+ extra = pydantic.Extra.allow
@@ -0,0 +1,23 @@
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 IS_PYDANTIC_V2, UniversalBaseModel
7
+ from .delete_response_object import DeleteResponseObject
8
+
9
+
10
+ class DeleteResponse(UniversalBaseModel):
11
+ records: typing.List[DeleteResponseObject] = pydantic.Field()
12
+ """
13
+ List of deleted records with skyflow ID and any partial errors.
14
+ """
15
+
16
+ if IS_PYDANTIC_V2:
17
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
18
+ else:
19
+
20
+ class Config:
21
+ frozen = True
22
+ smart_union = True
23
+ extra = pydantic.Extra.allow