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,239 @@
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 ..errors.bad_request_error import BadRequestError
13
+ from ..errors.internal_server_error import InternalServerError
14
+ from ..errors.not_found_error import NotFoundError
15
+ from ..errors.unauthorized_error import UnauthorizedError
16
+ from ..types.error_response import ErrorResponse
17
+ from ..types.execute_query_response import ExecuteQueryResponse
18
+ from pydantic import ValidationError
19
+
20
+ # this is used as the default value for optional parameters
21
+ OMIT = typing.cast(typing.Any, ...)
22
+
23
+
24
+ class RawQueryClient:
25
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
26
+ self._client_wrapper = client_wrapper
27
+
28
+ def execute_query(
29
+ self, *, vault_id: str, query: str, request_options: typing.Optional[RequestOptions] = None
30
+ ) -> HttpResponse[ExecuteQueryResponse]:
31
+ """
32
+ Returns records for a valid SQL query. This endpoint
33
+ - Can return masked record values.
34
+ - Supports only the `SELECT` command.
35
+ - Returns a maximum of 25 records. To return additional records, perform another query using the `OFFSET` keyword.
36
+ - Can't modify the vault or perform transactions.
37
+ - Can't return tokens.
38
+ - Can't return file download or render URLs.
39
+
40
+ Parameters
41
+ ----------
42
+ vault_id : str
43
+ ID of the vault where the query is being performed.
44
+
45
+ query : str
46
+ Query to perform.
47
+
48
+ request_options : typing.Optional[RequestOptions]
49
+ Request-specific configuration.
50
+
51
+ Returns
52
+ -------
53
+ HttpResponse[ExecuteQueryResponse]
54
+ OK
55
+ """
56
+ _response = self._client_wrapper.httpx_client.request(
57
+ "v2/query",
58
+ method="POST",
59
+ json={
60
+ "vaultID": vault_id,
61
+ "query": query,
62
+ },
63
+ headers={
64
+ "content-type": "application/json",
65
+ },
66
+ request_options=request_options,
67
+ omit=OMIT,
68
+ )
69
+ try:
70
+ if 200 <= _response.status_code < 300:
71
+ _data = typing.cast(
72
+ ExecuteQueryResponse,
73
+ parse_obj_as(
74
+ type_=ExecuteQueryResponse, # type: ignore
75
+ object_=_response.json(),
76
+ ),
77
+ )
78
+ return HttpResponse(response=_response, data=_data)
79
+ if _response.status_code == 400:
80
+ raise BadRequestError(
81
+ headers=dict(_response.headers),
82
+ body=typing.cast(
83
+ ErrorResponse,
84
+ parse_obj_as(
85
+ type_=ErrorResponse, # type: ignore
86
+ object_=_response.json(),
87
+ ),
88
+ ),
89
+ )
90
+ if _response.status_code == 401:
91
+ raise UnauthorizedError(
92
+ headers=dict(_response.headers),
93
+ body=typing.cast(
94
+ ErrorResponse,
95
+ parse_obj_as(
96
+ type_=ErrorResponse, # type: ignore
97
+ object_=_response.json(),
98
+ ),
99
+ ),
100
+ )
101
+ if _response.status_code == 404:
102
+ raise NotFoundError(
103
+ headers=dict(_response.headers),
104
+ body=typing.cast(
105
+ ErrorResponse,
106
+ parse_obj_as(
107
+ type_=ErrorResponse, # type: ignore
108
+ object_=_response.json(),
109
+ ),
110
+ ),
111
+ )
112
+ if _response.status_code == 500:
113
+ raise InternalServerError(
114
+ headers=dict(_response.headers),
115
+ body=typing.cast(
116
+ ErrorResponse,
117
+ parse_obj_as(
118
+ type_=ErrorResponse, # type: ignore
119
+ object_=_response.json(),
120
+ ),
121
+ ),
122
+ )
123
+ _response_json = _response.json()
124
+ except JSONDecodeError:
125
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
126
+ except ValidationError as e:
127
+ raise ParsingError(
128
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
129
+ )
130
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
131
+
132
+
133
+ class AsyncRawQueryClient:
134
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
135
+ self._client_wrapper = client_wrapper
136
+
137
+ async def execute_query(
138
+ self, *, vault_id: str, query: str, request_options: typing.Optional[RequestOptions] = None
139
+ ) -> AsyncHttpResponse[ExecuteQueryResponse]:
140
+ """
141
+ Returns records for a valid SQL query. This endpoint
142
+ - Can return masked record values.
143
+ - Supports only the `SELECT` command.
144
+ - Returns a maximum of 25 records. To return additional records, perform another query using the `OFFSET` keyword.
145
+ - Can't modify the vault or perform transactions.
146
+ - Can't return tokens.
147
+ - Can't return file download or render URLs.
148
+
149
+ Parameters
150
+ ----------
151
+ vault_id : str
152
+ ID of the vault where the query is being performed.
153
+
154
+ query : str
155
+ Query to perform.
156
+
157
+ request_options : typing.Optional[RequestOptions]
158
+ Request-specific configuration.
159
+
160
+ Returns
161
+ -------
162
+ AsyncHttpResponse[ExecuteQueryResponse]
163
+ OK
164
+ """
165
+ _response = await self._client_wrapper.httpx_client.request(
166
+ "v2/query",
167
+ method="POST",
168
+ json={
169
+ "vaultID": vault_id,
170
+ "query": query,
171
+ },
172
+ headers={
173
+ "content-type": "application/json",
174
+ },
175
+ request_options=request_options,
176
+ omit=OMIT,
177
+ )
178
+ try:
179
+ if 200 <= _response.status_code < 300:
180
+ _data = typing.cast(
181
+ ExecuteQueryResponse,
182
+ parse_obj_as(
183
+ type_=ExecuteQueryResponse, # type: ignore
184
+ object_=_response.json(),
185
+ ),
186
+ )
187
+ return AsyncHttpResponse(response=_response, data=_data)
188
+ if _response.status_code == 400:
189
+ raise BadRequestError(
190
+ headers=dict(_response.headers),
191
+ body=typing.cast(
192
+ ErrorResponse,
193
+ parse_obj_as(
194
+ type_=ErrorResponse, # type: ignore
195
+ object_=_response.json(),
196
+ ),
197
+ ),
198
+ )
199
+ if _response.status_code == 401:
200
+ raise UnauthorizedError(
201
+ headers=dict(_response.headers),
202
+ body=typing.cast(
203
+ ErrorResponse,
204
+ parse_obj_as(
205
+ type_=ErrorResponse, # type: ignore
206
+ object_=_response.json(),
207
+ ),
208
+ ),
209
+ )
210
+ if _response.status_code == 404:
211
+ raise NotFoundError(
212
+ headers=dict(_response.headers),
213
+ body=typing.cast(
214
+ ErrorResponse,
215
+ parse_obj_as(
216
+ type_=ErrorResponse, # type: ignore
217
+ object_=_response.json(),
218
+ ),
219
+ ),
220
+ )
221
+ if _response.status_code == 500:
222
+ raise InternalServerError(
223
+ headers=dict(_response.headers),
224
+ body=typing.cast(
225
+ ErrorResponse,
226
+ parse_obj_as(
227
+ type_=ErrorResponse, # type: ignore
228
+ object_=_response.json(),
229
+ ),
230
+ ),
231
+ )
232
+ _response_json = _response.json()
233
+ except JSONDecodeError:
234
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
235
+ except ValidationError as e:
236
+ raise ParsingError(
237
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
238
+ )
239
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,86 @@
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.jsonable_encoder import encode_path_param
10
+ from .core.parse_error import ParsingError
11
+ from .core.request_options import RequestOptions
12
+ from pydantic import ValidationError
13
+
14
+
15
+ class RawSkyflowAuth:
16
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
17
+ self._client_wrapper = client_wrapper
18
+
19
+ def patch_v2vaults_id(
20
+ self, vault_id: typing.Optional[str], *, request_options: typing.Optional[RequestOptions] = None
21
+ ) -> HttpResponse[None]:
22
+ """
23
+ Parameters
24
+ ----------
25
+ vault_id : typing.Optional[str]
26
+
27
+ request_options : typing.Optional[RequestOptions]
28
+ Request-specific configuration.
29
+
30
+ Returns
31
+ -------
32
+ HttpResponse[None]
33
+ """
34
+ _response = self._client_wrapper.httpx_client.request(
35
+ f"v2/vaults/{encode_path_param(vault_id)}",
36
+ method="PATCH",
37
+ request_options=request_options,
38
+ )
39
+ try:
40
+ if 200 <= _response.status_code < 300:
41
+ return HttpResponse(response=_response, data=None)
42
+ _response_json = _response.json()
43
+ except JSONDecodeError:
44
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
45
+ except ValidationError as e:
46
+ raise ParsingError(
47
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
48
+ )
49
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
50
+
51
+
52
+ class AsyncRawSkyflowAuth:
53
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
54
+ self._client_wrapper = client_wrapper
55
+
56
+ async def patch_v2vaults_id(
57
+ self, vault_id: typing.Optional[str], *, request_options: typing.Optional[RequestOptions] = None
58
+ ) -> AsyncHttpResponse[None]:
59
+ """
60
+ Parameters
61
+ ----------
62
+ vault_id : typing.Optional[str]
63
+
64
+ request_options : typing.Optional[RequestOptions]
65
+ Request-specific configuration.
66
+
67
+ Returns
68
+ -------
69
+ AsyncHttpResponse[None]
70
+ """
71
+ _response = await self._client_wrapper.httpx_client.request(
72
+ f"v2/vaults/{encode_path_param(vault_id)}",
73
+ method="PATCH",
74
+ request_options=request_options,
75
+ )
76
+ try:
77
+ if 200 <= _response.status_code < 300:
78
+ return AsyncHttpResponse(response=_response, data=None)
79
+ _response_json = _response.json()
80
+ except JSONDecodeError:
81
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
82
+ except ValidationError as e:
83
+ raise ParsingError(
84
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
85
+ )
86
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -0,0 +1,34 @@
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 .types import UpdateRequestUpdateType
10
+ _dynamic_imports: typing.Dict[str, str] = {"UpdateRequestUpdateType": ".types"}
11
+
12
+
13
+ def __getattr__(attr_name: str) -> typing.Any:
14
+ module_name = _dynamic_imports.get(attr_name)
15
+ if module_name is None:
16
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
17
+ try:
18
+ module = import_module(module_name, __package__)
19
+ if module_name == f".{attr_name}":
20
+ return module
21
+ else:
22
+ return getattr(module, attr_name)
23
+ except ImportError as e:
24
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
25
+ except AttributeError as e:
26
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
27
+
28
+
29
+ def __dir__():
30
+ lazy_attrs = list(_dynamic_imports.keys())
31
+ return sorted(lazy_attrs)
32
+
33
+
34
+ __all__ = ["UpdateRequestUpdateType"]