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.
- common/.coveragerc +4 -0
- common/__init__.py +3 -0
- common/client/__init__.py +0 -0
- common/client/base_skyflow.py +345 -0
- common/client/utils/__init__.py +1 -0
- common/client/utils/_utils.py +127 -0
- common/errors/__init__.py +1 -0
- common/errors/_skyflow_error.py +17 -0
- common/generated/__init__.py +0 -0
- common/generated/rest/__init__.py +24 -0
- common/generated/rest/authentication/__init__.py +4 -0
- common/generated/rest/authentication/client.py +181 -0
- common/generated/rest/authentication/raw_client.py +241 -0
- common/generated/rest/client.py +153 -0
- common/generated/rest/core/__init__.py +52 -0
- common/generated/rest/core/api_error.py +23 -0
- common/generated/rest/core/client_wrapper.py +86 -0
- common/generated/rest/core/datetime_utils.py +28 -0
- common/generated/rest/core/file.py +67 -0
- common/generated/rest/core/force_multipart.py +16 -0
- common/generated/rest/core/http_client.py +543 -0
- common/generated/rest/core/http_response.py +55 -0
- common/generated/rest/core/jsonable_encoder.py +100 -0
- common/generated/rest/core/pydantic_utilities.py +255 -0
- common/generated/rest/core/query_encoder.py +58 -0
- common/generated/rest/core/remove_none_from_dict.py +11 -0
- common/generated/rest/core/request_options.py +35 -0
- common/generated/rest/core/serialization.py +276 -0
- common/generated/rest/environment.py +8 -0
- common/generated/rest/errors/__init__.py +9 -0
- common/generated/rest/errors/bad_request_error.py +14 -0
- common/generated/rest/errors/not_found_error.py +14 -0
- common/generated/rest/errors/unauthorized_error.py +14 -0
- common/generated/rest/py.typed +0 -0
- common/generated/rest/types/__init__.py +9 -0
- common/generated/rest/types/googlerpc_status.py +22 -0
- common/generated/rest/types/protobuf_any.py +21 -0
- common/generated/rest/types/v_1_get_auth_token_response.py +33 -0
- common/generated/rest/version.py +6 -0
- common/service_account/__init__.py +1 -0
- common/service_account/_utils.py +248 -0
- common/service_account/client/__init__.py +0 -0
- common/service_account/client/auth_client.py +13 -0
- common/utils/__init__.py +4 -0
- common/utils/_helpers.py +18 -0
- common/utils/_skyflow_messages.py +445 -0
- common/utils/_utils.py +50 -0
- common/utils/constants.py +291 -0
- common/utils/enums/__init__.py +12 -0
- common/utils/enums/content_types.py +9 -0
- common/utils/enums/detect_entities.py +73 -0
- common/utils/enums/detect_output_transcriptions.py +8 -0
- common/utils/enums/env.py +13 -0
- common/utils/enums/log_level.py +8 -0
- common/utils/enums/masking_method.py +5 -0
- common/utils/enums/redaction_type.py +7 -0
- common/utils/enums/request_method.py +8 -0
- common/utils/enums/token_mode.py +6 -0
- common/utils/enums/token_type.py +6 -0
- common/utils/logger/__init__.py +2 -0
- common/utils/logger/_log_helpers.py +47 -0
- common/utils/logger/_logger.py +50 -0
- common/utils/validations/__init__.py +11 -0
- common/utils/validations/_validations.py +267 -0
- common/vault/base_vault_client.py +122 -0
- common/vault/base_vault_controller.py +58 -0
- common/vault/data/__init__.py +2 -0
- common/vault/data/_base_insert_request.py +7 -0
- common/vault/data/_base_insert_response.py +11 -0
- skyflow/__init__.py +2 -0
- skyflow/client/__init__.py +1 -0
- skyflow/client/_http_config_builder.py +45 -0
- skyflow/client/skyflow.py +15 -0
- skyflow/error/__init__.py +3 -0
- skyflow/generated/__init__.py +0 -0
- skyflow/generated/rest/__init__.py +164 -0
- skyflow/generated/rest/_default_clients.py +32 -0
- skyflow/generated/rest/client.py +385 -0
- skyflow/generated/rest/core/__init__.py +127 -0
- skyflow/generated/rest/core/api_error.py +23 -0
- skyflow/generated/rest/core/client_wrapper.py +148 -0
- skyflow/generated/rest/core/datetime_utils.py +70 -0
- skyflow/generated/rest/core/file.py +67 -0
- skyflow/generated/rest/core/force_multipart.py +18 -0
- skyflow/generated/rest/core/http_client.py +940 -0
- skyflow/generated/rest/core/http_response.py +63 -0
- skyflow/generated/rest/core/http_sse/__init__.py +42 -0
- skyflow/generated/rest/core/http_sse/_api.py +455 -0
- skyflow/generated/rest/core/http_sse/_decoders.py +74 -0
- skyflow/generated/rest/core/http_sse/_exceptions.py +7 -0
- skyflow/generated/rest/core/http_sse/_models.py +17 -0
- skyflow/generated/rest/core/jsonable_encoder.py +133 -0
- skyflow/generated/rest/core/logging.py +107 -0
- skyflow/generated/rest/core/parse_error.py +36 -0
- skyflow/generated/rest/core/pydantic_utilities.py +486 -0
- skyflow/generated/rest/core/query_encoder.py +58 -0
- skyflow/generated/rest/core/remove_none_from_dict.py +11 -0
- skyflow/generated/rest/core/request_options.py +40 -0
- skyflow/generated/rest/core/serialization.py +347 -0
- skyflow/generated/rest/environment.py +8 -0
- skyflow/generated/rest/errors/__init__.py +53 -0
- skyflow/generated/rest/errors/bad_request_error.py +11 -0
- skyflow/generated/rest/errors/forbidden_error.py +11 -0
- skyflow/generated/rest/errors/internal_server_error.py +11 -0
- skyflow/generated/rest/errors/not_found_error.py +11 -0
- skyflow/generated/rest/errors/too_many_requests_error.py +11 -0
- skyflow/generated/rest/errors/unauthorized_error.py +11 -0
- skyflow/generated/rest/py.typed +0 -0
- skyflow/generated/rest/query/__init__.py +4 -0
- skyflow/generated/rest/query/client.py +139 -0
- skyflow/generated/rest/query/raw_client.py +239 -0
- skyflow/generated/rest/raw_client.py +86 -0
- skyflow/generated/rest/records/__init__.py +34 -0
- skyflow/generated/rest/records/client.py +685 -0
- skyflow/generated/rest/records/raw_client.py +988 -0
- skyflow/generated/rest/records/types/__init__.py +34 -0
- skyflow/generated/rest/records/types/update_request_update_type.py +5 -0
- skyflow/generated/rest/tokens/__init__.py +4 -0
- skyflow/generated/rest/tokens/client.py +246 -0
- skyflow/generated/rest/tokens/raw_client.py +507 -0
- skyflow/generated/rest/types/__init__.py +116 -0
- skyflow/generated/rest/types/column_redactions.py +33 -0
- skyflow/generated/rest/types/delete_response.py +23 -0
- skyflow/generated/rest/types/delete_response_object.py +42 -0
- skyflow/generated/rest/types/detokenize_response.py +23 -0
- skyflow/generated/rest/types/detokenize_response_object.py +54 -0
- skyflow/generated/rest/types/error_response.py +20 -0
- skyflow/generated/rest/types/error_response_error.py +28 -0
- skyflow/generated/rest/types/execute_query_record_response.py +22 -0
- skyflow/generated/rest/types/execute_query_response.py +26 -0
- skyflow/generated/rest/types/execute_query_response_metadata.py +26 -0
- skyflow/generated/rest/types/get_request_data.py +60 -0
- skyflow/generated/rest/types/get_response.py +23 -0
- skyflow/generated/rest/types/get_tokens_from_values_request_object.py +30 -0
- skyflow/generated/rest/types/get_tokens_from_values_response.py +23 -0
- skyflow/generated/rest/types/google_protobuf_value.py +8 -0
- skyflow/generated/rest/types/http_code.py +6 -0
- skyflow/generated/rest/types/insert_record_data.py +36 -0
- skyflow/generated/rest/types/insert_response.py +23 -0
- skyflow/generated/rest/types/record_response_object.py +70 -0
- skyflow/generated/rest/types/token_group_redactions.py +33 -0
- skyflow/generated/rest/types/tokenize_response_object.py +49 -0
- skyflow/generated/rest/types/unique_value.py +22 -0
- skyflow/generated/rest/types/update_record_data.py +52 -0
- skyflow/generated/rest/types/update_record_data_update_type.py +5 -0
- skyflow/generated/rest/types/update_response.py +23 -0
- skyflow/generated/rest/types/upsert.py +45 -0
- skyflow/generated/rest/types/upsert_update_type.py +5 -0
- skyflow/generated/rest/version.py +6 -0
- skyflow/service_account/__init__.py +15 -0
- skyflow/utils/__init__.py +9 -0
- skyflow/utils/_http_config.py +36 -0
- skyflow/utils/_response_parsing.py +66 -0
- skyflow/utils/_retry.py +97 -0
- skyflow/utils/_skyflow_messages.py +114 -0
- skyflow/utils/_utils.py +54 -0
- skyflow/utils/_version.py +1 -0
- skyflow/utils/enums/__init__.py +3 -0
- skyflow/utils/enums/_custom_header_key.py +10 -0
- skyflow/utils/enums/_env_urls.py +9 -0
- skyflow/utils/enums/_upsert_type.py +7 -0
- skyflow/utils/validations/__init__.py +9 -0
- skyflow/utils/validations/_validations.py +195 -0
- skyflow/vault/__init__.py +0 -0
- skyflow/vault/client/__init__.py +0 -0
- skyflow/vault/client/client.py +102 -0
- skyflow/vault/controller/__init__.py +1 -0
- skyflow/vault/controller/_vault.py +475 -0
- skyflow/vault/data/__init__.py +30 -0
- skyflow/vault/data/_column_redactions.py +4 -0
- skyflow/vault/data/_delete_options.py +8 -0
- skyflow/vault/data/_delete_request.py +5 -0
- skyflow/vault/data/_delete_response.py +9 -0
- skyflow/vault/data/_delete_response_record.py +9 -0
- skyflow/vault/data/_detokenize_options.py +8 -0
- skyflow/vault/data/_detokenize_request.py +9 -0
- skyflow/vault/data/_detokenize_response.py +9 -0
- skyflow/vault/data/_detokenize_response_record.py +16 -0
- skyflow/vault/data/_detokenize_response_record_metadata.py +10 -0
- skyflow/vault/data/_get_options.py +8 -0
- skyflow/vault/data/_get_request.py +17 -0
- skyflow/vault/data/_get_request_record.py +13 -0
- skyflow/vault/data/_get_response.py +9 -0
- skyflow/vault/data/_get_response_record.py +17 -0
- skyflow/vault/data/_insert_options.py +8 -0
- skyflow/vault/data/_insert_request.py +11 -0
- skyflow/vault/data/_insert_request_record.py +9 -0
- skyflow/vault/data/_insert_response.py +9 -0
- skyflow/vault/data/_insert_response_record.py +17 -0
- skyflow/vault/data/_request_context.py +16 -0
- skyflow/vault/data/_token.py +8 -0
- skyflow/vault/data/_token_group_redactions.py +4 -0
- skyflow/vault/data/_update_options.py +8 -0
- skyflow/vault/data/_update_request.py +11 -0
- skyflow/vault/data/_update_request_record.py +6 -0
- skyflow/vault/data/_update_response.py +9 -0
- skyflow/vault/data/_update_response_record.py +17 -0
- skyflow/vault/data/_upsert_options.py +7 -0
- skyflow_flowvault_python-1.0.0.dist-info/METADATA +896 -0
- skyflow_flowvault_python-1.0.0.dist-info/RECORD +202 -0
- skyflow_flowvault_python-1.0.0.dist-info/WHEEL +5 -0
- 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)
|