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,988 @@
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.internal_server_error import InternalServerError
15
+ from ..errors.not_found_error import NotFoundError
16
+ from ..errors.unauthorized_error import UnauthorizedError
17
+ from ..types.column_redactions import ColumnRedactions
18
+ from ..types.delete_response import DeleteResponse
19
+ from ..types.error_response import ErrorResponse
20
+ from ..types.get_request_data import GetRequestData
21
+ from ..types.get_response import GetResponse
22
+ from ..types.insert_record_data import InsertRecordData
23
+ from ..types.insert_response import InsertResponse
24
+ from ..types.unique_value import UniqueValue
25
+ from ..types.update_record_data import UpdateRecordData
26
+ from ..types.update_response import UpdateResponse
27
+ from ..types.upsert import Upsert
28
+ from .types.update_request_update_type import UpdateRequestUpdateType
29
+ from pydantic import ValidationError
30
+
31
+ # this is used as the default value for optional parameters
32
+ OMIT = typing.cast(typing.Any, ...)
33
+
34
+
35
+ class RawRecordsClient:
36
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
37
+ self._client_wrapper = client_wrapper
38
+
39
+ def delete_records(
40
+ self,
41
+ *,
42
+ vault_id: str,
43
+ table_name: typing.Optional[str] = OMIT,
44
+ skyflow_i_ds: typing.Optional[typing.Sequence[str]] = OMIT,
45
+ unique_values: typing.Optional[typing.Sequence[UniqueValue]] = OMIT,
46
+ request_options: typing.Optional[RequestOptions] = None,
47
+ ) -> HttpResponse[DeleteResponse]:
48
+ """
49
+ Deletes records from a vault.
50
+
51
+ Parameters
52
+ ----------
53
+ vault_id : str
54
+ ID of the vault.
55
+
56
+ table_name : typing.Optional[str]
57
+ Name of the table.
58
+
59
+ skyflow_i_ds : typing.Optional[typing.Sequence[str]]
60
+ Skyflow IDs of the records to delete.
61
+
62
+ unique_values : typing.Optional[typing.Sequence[UniqueValue]]
63
+ List of unique constraint values to query records by data.
64
+
65
+ request_options : typing.Optional[RequestOptions]
66
+ Request-specific configuration.
67
+
68
+ Returns
69
+ -------
70
+ HttpResponse[DeleteResponse]
71
+ OK
72
+ """
73
+ _response = self._client_wrapper.httpx_client.request(
74
+ "v2/records/delete",
75
+ method="POST",
76
+ json={
77
+ "vaultID": vault_id,
78
+ "tableName": table_name,
79
+ "skyflowIDs": skyflow_i_ds,
80
+ "uniqueValues": convert_and_respect_annotation_metadata(
81
+ object_=unique_values, annotation=typing.Sequence[UniqueValue], direction="write"
82
+ ),
83
+ },
84
+ headers={
85
+ "content-type": "application/json",
86
+ },
87
+ request_options=request_options,
88
+ omit=OMIT,
89
+ )
90
+ try:
91
+ if 200 <= _response.status_code < 300:
92
+ _data = typing.cast(
93
+ DeleteResponse,
94
+ parse_obj_as(
95
+ type_=DeleteResponse, # type: ignore
96
+ object_=_response.json(),
97
+ ),
98
+ )
99
+ return HttpResponse(response=_response, data=_data)
100
+ if _response.status_code == 400:
101
+ raise BadRequestError(
102
+ headers=dict(_response.headers),
103
+ body=typing.cast(
104
+ ErrorResponse,
105
+ parse_obj_as(
106
+ type_=ErrorResponse, # type: ignore
107
+ object_=_response.json(),
108
+ ),
109
+ ),
110
+ )
111
+ if _response.status_code == 401:
112
+ raise UnauthorizedError(
113
+ headers=dict(_response.headers),
114
+ body=typing.cast(
115
+ ErrorResponse,
116
+ parse_obj_as(
117
+ type_=ErrorResponse, # type: ignore
118
+ object_=_response.json(),
119
+ ),
120
+ ),
121
+ )
122
+ if _response.status_code == 404:
123
+ raise NotFoundError(
124
+ headers=dict(_response.headers),
125
+ body=typing.cast(
126
+ ErrorResponse,
127
+ parse_obj_as(
128
+ type_=ErrorResponse, # type: ignore
129
+ object_=_response.json(),
130
+ ),
131
+ ),
132
+ )
133
+ if _response.status_code == 500:
134
+ raise InternalServerError(
135
+ headers=dict(_response.headers),
136
+ body=typing.cast(
137
+ ErrorResponse,
138
+ parse_obj_as(
139
+ type_=ErrorResponse, # type: ignore
140
+ object_=_response.json(),
141
+ ),
142
+ ),
143
+ )
144
+ _response_json = _response.json()
145
+ except JSONDecodeError:
146
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
147
+ except ValidationError as e:
148
+ raise ParsingError(
149
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
150
+ )
151
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
152
+
153
+ def get_records(
154
+ self,
155
+ *,
156
+ vault_id: str,
157
+ table_name: typing.Optional[str] = OMIT,
158
+ skyflow_i_ds: typing.Optional[typing.Sequence[str]] = OMIT,
159
+ column_redactions: typing.Optional[typing.Sequence[ColumnRedactions]] = OMIT,
160
+ columns: typing.Optional[typing.Sequence[str]] = OMIT,
161
+ limit: typing.Optional[int] = OMIT,
162
+ offset: typing.Optional[int] = OMIT,
163
+ unique_values: typing.Optional[typing.Sequence[UniqueValue]] = OMIT,
164
+ records: typing.Optional[typing.Sequence[GetRequestData]] = OMIT,
165
+ request_options: typing.Optional[RequestOptions] = None,
166
+ ) -> HttpResponse[GetResponse]:
167
+ """
168
+ Returns the specified records from a vault.
169
+
170
+ Parameters
171
+ ----------
172
+ vault_id : str
173
+ ID of the vault.
174
+
175
+ table_name : typing.Optional[str]
176
+ Name of the table to perform the operation on.
177
+
178
+ skyflow_i_ds : typing.Optional[typing.Sequence[str]]
179
+ Skyflow IDs of the records to return. Either `skyflowIDs` or `uniqueValues` are required. If both are provided, the request fails.
180
+
181
+ column_redactions : typing.Optional[typing.Sequence[ColumnRedactions]]
182
+ List of columns to redact.
183
+
184
+ columns : typing.Optional[typing.Sequence[str]]
185
+ List of columns to return.
186
+
187
+ limit : typing.Optional[int]
188
+ Limit for the number of records to be fetched.
189
+
190
+ offset : typing.Optional[int]
191
+ Offset for the number of records to be fetched.
192
+
193
+ unique_values : typing.Optional[typing.Sequence[UniqueValue]]
194
+ List of unique constraint values to query records by data.
195
+
196
+ records : typing.Optional[typing.Sequence[GetRequestData]]
197
+ List of records to be fetched. This field contains tableName and skyflowIDs belonging to the table.
198
+
199
+ request_options : typing.Optional[RequestOptions]
200
+ Request-specific configuration.
201
+
202
+ Returns
203
+ -------
204
+ HttpResponse[GetResponse]
205
+ OK
206
+ """
207
+ _response = self._client_wrapper.httpx_client.request(
208
+ "v2/records/get",
209
+ method="POST",
210
+ json={
211
+ "vaultID": vault_id,
212
+ "tableName": table_name,
213
+ "skyflowIDs": skyflow_i_ds,
214
+ "columnRedactions": convert_and_respect_annotation_metadata(
215
+ object_=column_redactions, annotation=typing.Sequence[ColumnRedactions], direction="write"
216
+ ),
217
+ "columns": columns,
218
+ "limit": limit,
219
+ "offset": offset,
220
+ "uniqueValues": convert_and_respect_annotation_metadata(
221
+ object_=unique_values, annotation=typing.Sequence[UniqueValue], direction="write"
222
+ ),
223
+ "records": convert_and_respect_annotation_metadata(
224
+ object_=records, annotation=typing.Sequence[GetRequestData], direction="write"
225
+ ),
226
+ },
227
+ headers={
228
+ "content-type": "application/json",
229
+ },
230
+ request_options=request_options,
231
+ omit=OMIT,
232
+ )
233
+ try:
234
+ if 200 <= _response.status_code < 300:
235
+ _data = typing.cast(
236
+ GetResponse,
237
+ parse_obj_as(
238
+ type_=GetResponse, # type: ignore
239
+ object_=_response.json(),
240
+ ),
241
+ )
242
+ return HttpResponse(response=_response, data=_data)
243
+ if _response.status_code == 400:
244
+ raise BadRequestError(
245
+ headers=dict(_response.headers),
246
+ body=typing.cast(
247
+ ErrorResponse,
248
+ parse_obj_as(
249
+ type_=ErrorResponse, # type: ignore
250
+ object_=_response.json(),
251
+ ),
252
+ ),
253
+ )
254
+ if _response.status_code == 401:
255
+ raise UnauthorizedError(
256
+ headers=dict(_response.headers),
257
+ body=typing.cast(
258
+ ErrorResponse,
259
+ parse_obj_as(
260
+ type_=ErrorResponse, # type: ignore
261
+ object_=_response.json(),
262
+ ),
263
+ ),
264
+ )
265
+ if _response.status_code == 404:
266
+ raise NotFoundError(
267
+ headers=dict(_response.headers),
268
+ body=typing.cast(
269
+ ErrorResponse,
270
+ parse_obj_as(
271
+ type_=ErrorResponse, # type: ignore
272
+ object_=_response.json(),
273
+ ),
274
+ ),
275
+ )
276
+ if _response.status_code == 500:
277
+ raise InternalServerError(
278
+ headers=dict(_response.headers),
279
+ body=typing.cast(
280
+ ErrorResponse,
281
+ parse_obj_as(
282
+ type_=ErrorResponse, # type: ignore
283
+ object_=_response.json(),
284
+ ),
285
+ ),
286
+ )
287
+ _response_json = _response.json()
288
+ except JSONDecodeError:
289
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
290
+ except ValidationError as e:
291
+ raise ParsingError(
292
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
293
+ )
294
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
295
+
296
+ def insert_records(
297
+ self,
298
+ *,
299
+ vault_id: str,
300
+ table_name: str,
301
+ records: typing.Sequence[InsertRecordData],
302
+ upsert: typing.Optional[Upsert] = OMIT,
303
+ request_options: typing.Optional[RequestOptions] = None,
304
+ ) -> HttpResponse[InsertResponse]:
305
+ """
306
+ Inserts new records into a vault.
307
+
308
+ Parameters
309
+ ----------
310
+ vault_id : str
311
+ ID of the vault.
312
+
313
+ table_name : str
314
+ Name of the table to perform the operation on. Can be defined at both the request body level and individual record level. If provided at both levels, the record-level `tableName` takes precedence.
315
+
316
+ records : typing.Sequence[InsertRecordData]
317
+ Data to insert as a list of records.
318
+
319
+ upsert : typing.Optional[Upsert]
320
+
321
+ request_options : typing.Optional[RequestOptions]
322
+ Request-specific configuration.
323
+
324
+ Returns
325
+ -------
326
+ HttpResponse[InsertResponse]
327
+ OK
328
+ """
329
+ _response = self._client_wrapper.httpx_client.request(
330
+ "v2/records/insert",
331
+ method="POST",
332
+ json={
333
+ "vaultID": vault_id,
334
+ "tableName": table_name,
335
+ "records": convert_and_respect_annotation_metadata(
336
+ object_=records, annotation=typing.Sequence[InsertRecordData], direction="write"
337
+ ),
338
+ "upsert": convert_and_respect_annotation_metadata(object_=upsert, annotation=Upsert, direction="write"),
339
+ },
340
+ headers={
341
+ "content-type": "application/json",
342
+ },
343
+ request_options=request_options,
344
+ omit=OMIT,
345
+ )
346
+ try:
347
+ if 200 <= _response.status_code < 300:
348
+ _data = typing.cast(
349
+ InsertResponse,
350
+ parse_obj_as(
351
+ type_=InsertResponse, # type: ignore
352
+ object_=_response.json(),
353
+ ),
354
+ )
355
+ return HttpResponse(response=_response, data=_data)
356
+ if _response.status_code == 400:
357
+ raise BadRequestError(
358
+ headers=dict(_response.headers),
359
+ body=typing.cast(
360
+ ErrorResponse,
361
+ parse_obj_as(
362
+ type_=ErrorResponse, # type: ignore
363
+ object_=_response.json(),
364
+ ),
365
+ ),
366
+ )
367
+ if _response.status_code == 401:
368
+ raise UnauthorizedError(
369
+ headers=dict(_response.headers),
370
+ body=typing.cast(
371
+ ErrorResponse,
372
+ parse_obj_as(
373
+ type_=ErrorResponse, # type: ignore
374
+ object_=_response.json(),
375
+ ),
376
+ ),
377
+ )
378
+ if _response.status_code == 500:
379
+ raise InternalServerError(
380
+ headers=dict(_response.headers),
381
+ body=typing.cast(
382
+ ErrorResponse,
383
+ parse_obj_as(
384
+ type_=ErrorResponse, # type: ignore
385
+ object_=_response.json(),
386
+ ),
387
+ ),
388
+ )
389
+ _response_json = _response.json()
390
+ except JSONDecodeError:
391
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
392
+ except ValidationError as e:
393
+ raise ParsingError(
394
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
395
+ )
396
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
397
+
398
+ def update_records(
399
+ self,
400
+ *,
401
+ vault_id: str,
402
+ table_name: str,
403
+ records: typing.Sequence[UpdateRecordData],
404
+ update_type: typing.Optional[UpdateRequestUpdateType] = OMIT,
405
+ request_options: typing.Optional[RequestOptions] = None,
406
+ ) -> HttpResponse[UpdateResponse]:
407
+ """
408
+ Updates the specified records in a vault.
409
+
410
+ Parameters
411
+ ----------
412
+ vault_id : str
413
+ ID of the vault.
414
+
415
+ table_name : str
416
+ Name of the table.
417
+
418
+ records : typing.Sequence[UpdateRecordData]
419
+ Data to update as a list of records.
420
+
421
+ update_type : typing.Optional[UpdateRequestUpdateType]
422
+ Type of update operation to perform.
423
+
424
+ request_options : typing.Optional[RequestOptions]
425
+ Request-specific configuration.
426
+
427
+ Returns
428
+ -------
429
+ HttpResponse[UpdateResponse]
430
+ OK
431
+ """
432
+ _response = self._client_wrapper.httpx_client.request(
433
+ "v2/records/update",
434
+ method="POST",
435
+ json={
436
+ "vaultID": vault_id,
437
+ "tableName": table_name,
438
+ "records": convert_and_respect_annotation_metadata(
439
+ object_=records, annotation=typing.Sequence[UpdateRecordData], direction="write"
440
+ ),
441
+ "updateType": update_type,
442
+ },
443
+ headers={
444
+ "content-type": "application/json",
445
+ },
446
+ request_options=request_options,
447
+ omit=OMIT,
448
+ )
449
+ try:
450
+ if 200 <= _response.status_code < 300:
451
+ _data = typing.cast(
452
+ UpdateResponse,
453
+ parse_obj_as(
454
+ type_=UpdateResponse, # type: ignore
455
+ object_=_response.json(),
456
+ ),
457
+ )
458
+ return HttpResponse(response=_response, data=_data)
459
+ if _response.status_code == 400:
460
+ raise BadRequestError(
461
+ headers=dict(_response.headers),
462
+ body=typing.cast(
463
+ ErrorResponse,
464
+ parse_obj_as(
465
+ type_=ErrorResponse, # type: ignore
466
+ object_=_response.json(),
467
+ ),
468
+ ),
469
+ )
470
+ if _response.status_code == 401:
471
+ raise UnauthorizedError(
472
+ headers=dict(_response.headers),
473
+ body=typing.cast(
474
+ ErrorResponse,
475
+ parse_obj_as(
476
+ type_=ErrorResponse, # type: ignore
477
+ object_=_response.json(),
478
+ ),
479
+ ),
480
+ )
481
+ if _response.status_code == 404:
482
+ raise NotFoundError(
483
+ headers=dict(_response.headers),
484
+ body=typing.cast(
485
+ ErrorResponse,
486
+ parse_obj_as(
487
+ type_=ErrorResponse, # type: ignore
488
+ object_=_response.json(),
489
+ ),
490
+ ),
491
+ )
492
+ if _response.status_code == 500:
493
+ raise InternalServerError(
494
+ headers=dict(_response.headers),
495
+ body=typing.cast(
496
+ ErrorResponse,
497
+ parse_obj_as(
498
+ type_=ErrorResponse, # type: ignore
499
+ object_=_response.json(),
500
+ ),
501
+ ),
502
+ )
503
+ _response_json = _response.json()
504
+ except JSONDecodeError:
505
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
506
+ except ValidationError as e:
507
+ raise ParsingError(
508
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
509
+ )
510
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
511
+
512
+
513
+ class AsyncRawRecordsClient:
514
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
515
+ self._client_wrapper = client_wrapper
516
+
517
+ async def delete_records(
518
+ self,
519
+ *,
520
+ vault_id: str,
521
+ table_name: typing.Optional[str] = OMIT,
522
+ skyflow_i_ds: typing.Optional[typing.Sequence[str]] = OMIT,
523
+ unique_values: typing.Optional[typing.Sequence[UniqueValue]] = OMIT,
524
+ request_options: typing.Optional[RequestOptions] = None,
525
+ ) -> AsyncHttpResponse[DeleteResponse]:
526
+ """
527
+ Deletes records from a vault.
528
+
529
+ Parameters
530
+ ----------
531
+ vault_id : str
532
+ ID of the vault.
533
+
534
+ table_name : typing.Optional[str]
535
+ Name of the table.
536
+
537
+ skyflow_i_ds : typing.Optional[typing.Sequence[str]]
538
+ Skyflow IDs of the records to delete.
539
+
540
+ unique_values : typing.Optional[typing.Sequence[UniqueValue]]
541
+ List of unique constraint values to query records by data.
542
+
543
+ request_options : typing.Optional[RequestOptions]
544
+ Request-specific configuration.
545
+
546
+ Returns
547
+ -------
548
+ AsyncHttpResponse[DeleteResponse]
549
+ OK
550
+ """
551
+ _response = await self._client_wrapper.httpx_client.request(
552
+ "v2/records/delete",
553
+ method="POST",
554
+ json={
555
+ "vaultID": vault_id,
556
+ "tableName": table_name,
557
+ "skyflowIDs": skyflow_i_ds,
558
+ "uniqueValues": convert_and_respect_annotation_metadata(
559
+ object_=unique_values, annotation=typing.Sequence[UniqueValue], direction="write"
560
+ ),
561
+ },
562
+ headers={
563
+ "content-type": "application/json",
564
+ },
565
+ request_options=request_options,
566
+ omit=OMIT,
567
+ )
568
+ try:
569
+ if 200 <= _response.status_code < 300:
570
+ _data = typing.cast(
571
+ DeleteResponse,
572
+ parse_obj_as(
573
+ type_=DeleteResponse, # type: ignore
574
+ object_=_response.json(),
575
+ ),
576
+ )
577
+ return AsyncHttpResponse(response=_response, data=_data)
578
+ if _response.status_code == 400:
579
+ raise BadRequestError(
580
+ headers=dict(_response.headers),
581
+ body=typing.cast(
582
+ ErrorResponse,
583
+ parse_obj_as(
584
+ type_=ErrorResponse, # type: ignore
585
+ object_=_response.json(),
586
+ ),
587
+ ),
588
+ )
589
+ if _response.status_code == 401:
590
+ raise UnauthorizedError(
591
+ headers=dict(_response.headers),
592
+ body=typing.cast(
593
+ ErrorResponse,
594
+ parse_obj_as(
595
+ type_=ErrorResponse, # type: ignore
596
+ object_=_response.json(),
597
+ ),
598
+ ),
599
+ )
600
+ if _response.status_code == 404:
601
+ raise NotFoundError(
602
+ headers=dict(_response.headers),
603
+ body=typing.cast(
604
+ ErrorResponse,
605
+ parse_obj_as(
606
+ type_=ErrorResponse, # type: ignore
607
+ object_=_response.json(),
608
+ ),
609
+ ),
610
+ )
611
+ if _response.status_code == 500:
612
+ raise InternalServerError(
613
+ headers=dict(_response.headers),
614
+ body=typing.cast(
615
+ ErrorResponse,
616
+ parse_obj_as(
617
+ type_=ErrorResponse, # type: ignore
618
+ object_=_response.json(),
619
+ ),
620
+ ),
621
+ )
622
+ _response_json = _response.json()
623
+ except JSONDecodeError:
624
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
625
+ except ValidationError as e:
626
+ raise ParsingError(
627
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
628
+ )
629
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
630
+
631
+ async def get_records(
632
+ self,
633
+ *,
634
+ vault_id: str,
635
+ table_name: typing.Optional[str] = OMIT,
636
+ skyflow_i_ds: typing.Optional[typing.Sequence[str]] = OMIT,
637
+ column_redactions: typing.Optional[typing.Sequence[ColumnRedactions]] = OMIT,
638
+ columns: typing.Optional[typing.Sequence[str]] = OMIT,
639
+ limit: typing.Optional[int] = OMIT,
640
+ offset: typing.Optional[int] = OMIT,
641
+ unique_values: typing.Optional[typing.Sequence[UniqueValue]] = OMIT,
642
+ records: typing.Optional[typing.Sequence[GetRequestData]] = OMIT,
643
+ request_options: typing.Optional[RequestOptions] = None,
644
+ ) -> AsyncHttpResponse[GetResponse]:
645
+ """
646
+ Returns the specified records from a vault.
647
+
648
+ Parameters
649
+ ----------
650
+ vault_id : str
651
+ ID of the vault.
652
+
653
+ table_name : typing.Optional[str]
654
+ Name of the table to perform the operation on.
655
+
656
+ skyflow_i_ds : typing.Optional[typing.Sequence[str]]
657
+ Skyflow IDs of the records to return. Either `skyflowIDs` or `uniqueValues` are required. If both are provided, the request fails.
658
+
659
+ column_redactions : typing.Optional[typing.Sequence[ColumnRedactions]]
660
+ List of columns to redact.
661
+
662
+ columns : typing.Optional[typing.Sequence[str]]
663
+ List of columns to return.
664
+
665
+ limit : typing.Optional[int]
666
+ Limit for the number of records to be fetched.
667
+
668
+ offset : typing.Optional[int]
669
+ Offset for the number of records to be fetched.
670
+
671
+ unique_values : typing.Optional[typing.Sequence[UniqueValue]]
672
+ List of unique constraint values to query records by data.
673
+
674
+ records : typing.Optional[typing.Sequence[GetRequestData]]
675
+ List of records to be fetched. This field contains tableName and skyflowIDs belonging to the table.
676
+
677
+ request_options : typing.Optional[RequestOptions]
678
+ Request-specific configuration.
679
+
680
+ Returns
681
+ -------
682
+ AsyncHttpResponse[GetResponse]
683
+ OK
684
+ """
685
+ _response = await self._client_wrapper.httpx_client.request(
686
+ "v2/records/get",
687
+ method="POST",
688
+ json={
689
+ "vaultID": vault_id,
690
+ "tableName": table_name,
691
+ "skyflowIDs": skyflow_i_ds,
692
+ "columnRedactions": convert_and_respect_annotation_metadata(
693
+ object_=column_redactions, annotation=typing.Sequence[ColumnRedactions], direction="write"
694
+ ),
695
+ "columns": columns,
696
+ "limit": limit,
697
+ "offset": offset,
698
+ "uniqueValues": convert_and_respect_annotation_metadata(
699
+ object_=unique_values, annotation=typing.Sequence[UniqueValue], direction="write"
700
+ ),
701
+ "records": convert_and_respect_annotation_metadata(
702
+ object_=records, annotation=typing.Sequence[GetRequestData], direction="write"
703
+ ),
704
+ },
705
+ headers={
706
+ "content-type": "application/json",
707
+ },
708
+ request_options=request_options,
709
+ omit=OMIT,
710
+ )
711
+ try:
712
+ if 200 <= _response.status_code < 300:
713
+ _data = typing.cast(
714
+ GetResponse,
715
+ parse_obj_as(
716
+ type_=GetResponse, # type: ignore
717
+ object_=_response.json(),
718
+ ),
719
+ )
720
+ return AsyncHttpResponse(response=_response, data=_data)
721
+ if _response.status_code == 400:
722
+ raise BadRequestError(
723
+ headers=dict(_response.headers),
724
+ body=typing.cast(
725
+ ErrorResponse,
726
+ parse_obj_as(
727
+ type_=ErrorResponse, # type: ignore
728
+ object_=_response.json(),
729
+ ),
730
+ ),
731
+ )
732
+ if _response.status_code == 401:
733
+ raise UnauthorizedError(
734
+ headers=dict(_response.headers),
735
+ body=typing.cast(
736
+ ErrorResponse,
737
+ parse_obj_as(
738
+ type_=ErrorResponse, # type: ignore
739
+ object_=_response.json(),
740
+ ),
741
+ ),
742
+ )
743
+ if _response.status_code == 404:
744
+ raise NotFoundError(
745
+ headers=dict(_response.headers),
746
+ body=typing.cast(
747
+ ErrorResponse,
748
+ parse_obj_as(
749
+ type_=ErrorResponse, # type: ignore
750
+ object_=_response.json(),
751
+ ),
752
+ ),
753
+ )
754
+ if _response.status_code == 500:
755
+ raise InternalServerError(
756
+ headers=dict(_response.headers),
757
+ body=typing.cast(
758
+ ErrorResponse,
759
+ parse_obj_as(
760
+ type_=ErrorResponse, # type: ignore
761
+ object_=_response.json(),
762
+ ),
763
+ ),
764
+ )
765
+ _response_json = _response.json()
766
+ except JSONDecodeError:
767
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
768
+ except ValidationError as e:
769
+ raise ParsingError(
770
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
771
+ )
772
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
773
+
774
+ async def insert_records(
775
+ self,
776
+ *,
777
+ vault_id: str,
778
+ table_name: str,
779
+ records: typing.Sequence[InsertRecordData],
780
+ upsert: typing.Optional[Upsert] = OMIT,
781
+ request_options: typing.Optional[RequestOptions] = None,
782
+ ) -> AsyncHttpResponse[InsertResponse]:
783
+ """
784
+ Inserts new records into a vault.
785
+
786
+ Parameters
787
+ ----------
788
+ vault_id : str
789
+ ID of the vault.
790
+
791
+ table_name : str
792
+ Name of the table to perform the operation on. Can be defined at both the request body level and individual record level. If provided at both levels, the record-level `tableName` takes precedence.
793
+
794
+ records : typing.Sequence[InsertRecordData]
795
+ Data to insert as a list of records.
796
+
797
+ upsert : typing.Optional[Upsert]
798
+
799
+ request_options : typing.Optional[RequestOptions]
800
+ Request-specific configuration.
801
+
802
+ Returns
803
+ -------
804
+ AsyncHttpResponse[InsertResponse]
805
+ OK
806
+ """
807
+ _response = await self._client_wrapper.httpx_client.request(
808
+ "v2/records/insert",
809
+ method="POST",
810
+ json={
811
+ "vaultID": vault_id,
812
+ "tableName": table_name,
813
+ "records": convert_and_respect_annotation_metadata(
814
+ object_=records, annotation=typing.Sequence[InsertRecordData], direction="write"
815
+ ),
816
+ "upsert": convert_and_respect_annotation_metadata(object_=upsert, annotation=Upsert, direction="write"),
817
+ },
818
+ headers={
819
+ "content-type": "application/json",
820
+ },
821
+ request_options=request_options,
822
+ omit=OMIT,
823
+ )
824
+ try:
825
+ if 200 <= _response.status_code < 300:
826
+ _data = typing.cast(
827
+ InsertResponse,
828
+ parse_obj_as(
829
+ type_=InsertResponse, # type: ignore
830
+ object_=_response.json(),
831
+ ),
832
+ )
833
+ return AsyncHttpResponse(response=_response, data=_data)
834
+ if _response.status_code == 400:
835
+ raise BadRequestError(
836
+ headers=dict(_response.headers),
837
+ body=typing.cast(
838
+ ErrorResponse,
839
+ parse_obj_as(
840
+ type_=ErrorResponse, # type: ignore
841
+ object_=_response.json(),
842
+ ),
843
+ ),
844
+ )
845
+ if _response.status_code == 401:
846
+ raise UnauthorizedError(
847
+ headers=dict(_response.headers),
848
+ body=typing.cast(
849
+ ErrorResponse,
850
+ parse_obj_as(
851
+ type_=ErrorResponse, # type: ignore
852
+ object_=_response.json(),
853
+ ),
854
+ ),
855
+ )
856
+ if _response.status_code == 500:
857
+ raise InternalServerError(
858
+ headers=dict(_response.headers),
859
+ body=typing.cast(
860
+ ErrorResponse,
861
+ parse_obj_as(
862
+ type_=ErrorResponse, # type: ignore
863
+ object_=_response.json(),
864
+ ),
865
+ ),
866
+ )
867
+ _response_json = _response.json()
868
+ except JSONDecodeError:
869
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
870
+ except ValidationError as e:
871
+ raise ParsingError(
872
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
873
+ )
874
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
875
+
876
+ async def update_records(
877
+ self,
878
+ *,
879
+ vault_id: str,
880
+ table_name: str,
881
+ records: typing.Sequence[UpdateRecordData],
882
+ update_type: typing.Optional[UpdateRequestUpdateType] = OMIT,
883
+ request_options: typing.Optional[RequestOptions] = None,
884
+ ) -> AsyncHttpResponse[UpdateResponse]:
885
+ """
886
+ Updates the specified records in a vault.
887
+
888
+ Parameters
889
+ ----------
890
+ vault_id : str
891
+ ID of the vault.
892
+
893
+ table_name : str
894
+ Name of the table.
895
+
896
+ records : typing.Sequence[UpdateRecordData]
897
+ Data to update as a list of records.
898
+
899
+ update_type : typing.Optional[UpdateRequestUpdateType]
900
+ Type of update operation to perform.
901
+
902
+ request_options : typing.Optional[RequestOptions]
903
+ Request-specific configuration.
904
+
905
+ Returns
906
+ -------
907
+ AsyncHttpResponse[UpdateResponse]
908
+ OK
909
+ """
910
+ _response = await self._client_wrapper.httpx_client.request(
911
+ "v2/records/update",
912
+ method="POST",
913
+ json={
914
+ "vaultID": vault_id,
915
+ "tableName": table_name,
916
+ "records": convert_and_respect_annotation_metadata(
917
+ object_=records, annotation=typing.Sequence[UpdateRecordData], direction="write"
918
+ ),
919
+ "updateType": update_type,
920
+ },
921
+ headers={
922
+ "content-type": "application/json",
923
+ },
924
+ request_options=request_options,
925
+ omit=OMIT,
926
+ )
927
+ try:
928
+ if 200 <= _response.status_code < 300:
929
+ _data = typing.cast(
930
+ UpdateResponse,
931
+ parse_obj_as(
932
+ type_=UpdateResponse, # type: ignore
933
+ object_=_response.json(),
934
+ ),
935
+ )
936
+ return AsyncHttpResponse(response=_response, data=_data)
937
+ if _response.status_code == 400:
938
+ raise BadRequestError(
939
+ headers=dict(_response.headers),
940
+ body=typing.cast(
941
+ ErrorResponse,
942
+ parse_obj_as(
943
+ type_=ErrorResponse, # type: ignore
944
+ object_=_response.json(),
945
+ ),
946
+ ),
947
+ )
948
+ if _response.status_code == 401:
949
+ raise UnauthorizedError(
950
+ headers=dict(_response.headers),
951
+ body=typing.cast(
952
+ ErrorResponse,
953
+ parse_obj_as(
954
+ type_=ErrorResponse, # type: ignore
955
+ object_=_response.json(),
956
+ ),
957
+ ),
958
+ )
959
+ if _response.status_code == 404:
960
+ raise NotFoundError(
961
+ headers=dict(_response.headers),
962
+ body=typing.cast(
963
+ ErrorResponse,
964
+ parse_obj_as(
965
+ type_=ErrorResponse, # type: ignore
966
+ object_=_response.json(),
967
+ ),
968
+ ),
969
+ )
970
+ if _response.status_code == 500:
971
+ raise InternalServerError(
972
+ headers=dict(_response.headers),
973
+ body=typing.cast(
974
+ ErrorResponse,
975
+ parse_obj_as(
976
+ type_=ErrorResponse, # type: ignore
977
+ object_=_response.json(),
978
+ ),
979
+ ),
980
+ )
981
+ _response_json = _response.json()
982
+ except JSONDecodeError:
983
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
984
+ except ValidationError as e:
985
+ raise ParsingError(
986
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
987
+ )
988
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)