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,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
|