mirascope 2.0.0a4__py3-none-any.whl → 2.0.0a6__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 (215) hide show
  1. mirascope/__init__.py +10 -1
  2. mirascope/_stubs.py +363 -0
  3. mirascope/api/__init__.py +8 -0
  4. mirascope/api/_generated/__init__.py +119 -1
  5. mirascope/api/_generated/annotations/__init__.py +33 -0
  6. mirascope/api/_generated/annotations/client.py +474 -0
  7. mirascope/api/_generated/annotations/raw_client.py +1095 -0
  8. mirascope/api/_generated/annotations/types/__init__.py +31 -0
  9. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
  10. mirascope/api/_generated/annotations/types/annotations_create_response.py +35 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  12. mirascope/api/_generated/annotations/types/annotations_get_response.py +35 -0
  13. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
  14. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
  15. mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
  16. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +35 -0
  17. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
  18. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
  19. mirascope/api/_generated/annotations/types/annotations_update_response.py +35 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  21. mirascope/api/_generated/api_keys/__init__.py +7 -0
  22. mirascope/api/_generated/api_keys/client.py +429 -0
  23. mirascope/api/_generated/api_keys/raw_client.py +788 -0
  24. mirascope/api/_generated/api_keys/types/__init__.py +9 -0
  25. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
  26. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
  27. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
  28. mirascope/api/_generated/client.py +12 -0
  29. mirascope/api/_generated/core/client_wrapper.py +2 -14
  30. mirascope/api/_generated/core/datetime_utils.py +1 -3
  31. mirascope/api/_generated/core/file.py +2 -5
  32. mirascope/api/_generated/core/http_client.py +36 -112
  33. mirascope/api/_generated/core/jsonable_encoder.py +1 -3
  34. mirascope/api/_generated/core/pydantic_utilities.py +19 -74
  35. mirascope/api/_generated/core/query_encoder.py +1 -3
  36. mirascope/api/_generated/core/serialization.py +4 -10
  37. mirascope/api/_generated/docs/client.py +2 -6
  38. mirascope/api/_generated/docs/raw_client.py +4 -20
  39. mirascope/api/_generated/environments/__init__.py +17 -0
  40. mirascope/api/_generated/environments/client.py +500 -0
  41. mirascope/api/_generated/environments/raw_client.py +999 -0
  42. mirascope/api/_generated/environments/types/__init__.py +15 -0
  43. mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
  44. mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
  45. mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
  46. mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
  47. mirascope/api/_generated/errors/__init__.py +2 -0
  48. mirascope/api/_generated/errors/bad_request_error.py +1 -5
  49. mirascope/api/_generated/errors/conflict_error.py +1 -5
  50. mirascope/api/_generated/errors/forbidden_error.py +1 -5
  51. mirascope/api/_generated/errors/internal_server_error.py +1 -6
  52. mirascope/api/_generated/errors/not_found_error.py +1 -5
  53. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  54. mirascope/api/_generated/functions/__init__.py +29 -0
  55. mirascope/api/_generated/functions/client.py +433 -0
  56. mirascope/api/_generated/functions/raw_client.py +1049 -0
  57. mirascope/api/_generated/functions/types/__init__.py +29 -0
  58. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  59. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  60. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  61. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  62. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  63. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  64. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  65. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  66. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  67. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  68. mirascope/api/_generated/health/client.py +2 -6
  69. mirascope/api/_generated/health/raw_client.py +5 -23
  70. mirascope/api/_generated/health/types/health_check_response.py +1 -3
  71. mirascope/api/_generated/organizations/__init__.py +2 -0
  72. mirascope/api/_generated/organizations/client.py +94 -27
  73. mirascope/api/_generated/organizations/raw_client.py +246 -128
  74. mirascope/api/_generated/organizations/types/__init__.py +2 -0
  75. mirascope/api/_generated/organizations/types/organizations_create_response.py +5 -3
  76. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +1 -3
  77. mirascope/api/_generated/organizations/types/organizations_credits_response.py +19 -0
  78. mirascope/api/_generated/organizations/types/organizations_get_response.py +5 -3
  79. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +1 -3
  80. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +5 -3
  81. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +1 -3
  82. mirascope/api/_generated/organizations/types/organizations_update_response.py +5 -3
  83. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +1 -3
  84. mirascope/api/_generated/projects/__init__.py +2 -12
  85. mirascope/api/_generated/projects/client.py +38 -68
  86. mirascope/api/_generated/projects/raw_client.py +92 -163
  87. mirascope/api/_generated/projects/types/__init__.py +1 -6
  88. mirascope/api/_generated/projects/types/projects_create_response.py +4 -9
  89. mirascope/api/_generated/projects/types/projects_get_response.py +4 -9
  90. mirascope/api/_generated/projects/types/projects_list_response_item.py +4 -9
  91. mirascope/api/_generated/projects/types/projects_update_response.py +4 -9
  92. mirascope/api/_generated/reference.md +1862 -70
  93. mirascope/api/_generated/traces/__init__.py +22 -0
  94. mirascope/api/_generated/traces/client.py +398 -0
  95. mirascope/api/_generated/traces/raw_client.py +902 -18
  96. mirascope/api/_generated/traces/types/__init__.py +32 -0
  97. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +4 -11
  98. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +2 -6
  99. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +1 -3
  100. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +8 -24
  101. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +2 -6
  102. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +3 -9
  103. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +2 -6
  104. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +3 -9
  105. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +4 -8
  106. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +2 -6
  107. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +8 -24
  108. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +2 -6
  109. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +3 -9
  110. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +1 -3
  111. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +6 -18
  112. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +3 -9
  113. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +8 -24
  114. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +2 -6
  115. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +2 -6
  116. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +1 -3
  117. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +2 -6
  118. mirascope/api/_generated/traces/types/traces_create_response.py +2 -5
  119. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +3 -9
  120. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +54 -0
  121. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  122. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  123. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  124. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +90 -0
  125. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  126. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  127. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  128. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  129. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  130. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +41 -0
  131. mirascope/api/_generated/types/__init__.py +18 -0
  132. mirascope/api/_generated/types/already_exists_error.py +1 -3
  133. mirascope/api/_generated/types/click_house_error.py +22 -0
  134. mirascope/api/_generated/types/database_error.py +1 -3
  135. mirascope/api/_generated/types/http_api_decode_error.py +1 -3
  136. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  137. mirascope/api/_generated/types/issue.py +1 -3
  138. mirascope/api/_generated/types/issue_tag.py +1 -8
  139. mirascope/api/_generated/types/not_found_error_body.py +1 -3
  140. mirascope/api/_generated/types/number_from_string.py +3 -0
  141. mirascope/api/_generated/types/permission_denied_error.py +1 -3
  142. mirascope/api/_generated/types/permission_denied_error_tag.py +1 -3
  143. mirascope/api/_generated/types/property_key_key.py +1 -3
  144. mirascope/api/_generated/types/stripe_error.py +20 -0
  145. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  146. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  147. mirascope/llm/__init__.py +6 -2
  148. mirascope/llm/content/tool_call.py +6 -0
  149. mirascope/llm/exceptions.py +28 -0
  150. mirascope/llm/formatting/__init__.py +2 -2
  151. mirascope/llm/formatting/format.py +120 -8
  152. mirascope/llm/formatting/types.py +1 -56
  153. mirascope/llm/mcp/__init__.py +2 -2
  154. mirascope/llm/mcp/mcp_client.py +130 -0
  155. mirascope/llm/providers/__init__.py +26 -5
  156. mirascope/llm/providers/anthropic/__init__.py +3 -21
  157. mirascope/llm/providers/anthropic/_utils/__init__.py +2 -0
  158. mirascope/llm/providers/anthropic/_utils/beta_decode.py +4 -2
  159. mirascope/llm/providers/anthropic/_utils/beta_encode.py +13 -12
  160. mirascope/llm/providers/anthropic/_utils/decode.py +4 -2
  161. mirascope/llm/providers/anthropic/_utils/encode.py +57 -14
  162. mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
  163. mirascope/llm/providers/anthropic/beta_provider.py +6 -0
  164. mirascope/llm/providers/anthropic/provider.py +5 -0
  165. mirascope/llm/providers/base/__init__.py +5 -2
  166. mirascope/llm/providers/base/_utils.py +2 -7
  167. mirascope/llm/providers/base/base_provider.py +173 -58
  168. mirascope/llm/providers/base/params.py +63 -34
  169. mirascope/llm/providers/google/__init__.py +2 -17
  170. mirascope/llm/providers/google/_utils/__init__.py +2 -0
  171. mirascope/llm/providers/google/_utils/decode.py +17 -8
  172. mirascope/llm/providers/google/_utils/encode.py +105 -16
  173. mirascope/llm/providers/google/_utils/errors.py +49 -0
  174. mirascope/llm/providers/google/model_info.py +1 -0
  175. mirascope/llm/providers/google/provider.py +9 -5
  176. mirascope/llm/providers/mirascope/__init__.py +5 -0
  177. mirascope/llm/providers/mirascope/_utils.py +77 -0
  178. mirascope/llm/providers/mirascope/provider.py +318 -0
  179. mirascope/llm/providers/mlx/__init__.py +2 -17
  180. mirascope/llm/providers/mlx/_utils.py +9 -2
  181. mirascope/llm/providers/mlx/provider.py +8 -0
  182. mirascope/llm/providers/ollama/__init__.py +1 -13
  183. mirascope/llm/providers/openai/__init__.py +10 -1
  184. mirascope/llm/providers/openai/_utils/__init__.py +5 -0
  185. mirascope/llm/providers/openai/_utils/errors.py +46 -0
  186. mirascope/llm/providers/openai/completions/__init__.py +2 -20
  187. mirascope/llm/providers/openai/completions/_utils/decode.py +14 -3
  188. mirascope/llm/providers/openai/completions/_utils/encode.py +15 -12
  189. mirascope/llm/providers/openai/completions/base_provider.py +6 -6
  190. mirascope/llm/providers/openai/provider.py +14 -1
  191. mirascope/llm/providers/openai/responses/__init__.py +1 -17
  192. mirascope/llm/providers/openai/responses/_utils/decode.py +2 -2
  193. mirascope/llm/providers/openai/responses/_utils/encode.py +43 -15
  194. mirascope/llm/providers/openai/responses/provider.py +13 -7
  195. mirascope/llm/providers/provider_id.py +1 -0
  196. mirascope/llm/providers/provider_registry.py +59 -3
  197. mirascope/llm/providers/together/__init__.py +1 -13
  198. mirascope/llm/responses/base_stream_response.py +24 -20
  199. mirascope/llm/tools/decorator.py +8 -4
  200. mirascope/llm/tools/tool_schema.py +33 -6
  201. mirascope/llm/tools/tools.py +84 -16
  202. mirascope/ops/__init__.py +60 -109
  203. mirascope/ops/_internal/closure.py +62 -11
  204. mirascope/ops/_internal/instrumentation/llm/llm.py +1 -2
  205. mirascope/ops/_internal/traced_functions.py +23 -4
  206. mirascope/ops/_internal/versioned_functions.py +54 -43
  207. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/METADATA +7 -7
  208. mirascope-2.0.0a6.dist-info/RECORD +316 -0
  209. mirascope/llm/formatting/_utils.py +0 -78
  210. mirascope/llm/mcp/client.py +0 -118
  211. mirascope/llm/providers/_missing_import_stubs.py +0 -49
  212. mirascope/llm/providers/load_provider.py +0 -54
  213. mirascope-2.0.0a4.dist-info/RECORD +0 -247
  214. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/WHEEL +0 -0
  215. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1049 @@
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 jsonable_encoder
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.conflict_error import ConflictError
15
+ from ..errors.forbidden_error import ForbiddenError
16
+ from ..errors.internal_server_error import InternalServerError
17
+ from ..errors.not_found_error import NotFoundError
18
+ from ..errors.unauthorized_error import UnauthorizedError
19
+ from ..types.already_exists_error import AlreadyExistsError
20
+ from ..types.http_api_decode_error import HttpApiDecodeError
21
+ from ..types.not_found_error_body import NotFoundErrorBody
22
+ from ..types.permission_denied_error import PermissionDeniedError
23
+ from ..types.unauthorized_error_body import UnauthorizedErrorBody
24
+ from .types.functions_create_request_dependencies_value import FunctionsCreateRequestDependenciesValue
25
+ from .types.functions_create_response import FunctionsCreateResponse
26
+ from .types.functions_find_by_hash_response import FunctionsFindByHashResponse
27
+ from .types.functions_get_response import FunctionsGetResponse
28
+ from .types.functions_list_response import FunctionsListResponse
29
+
30
+ # this is used as the default value for optional parameters
31
+ OMIT = typing.cast(typing.Any, ...)
32
+
33
+
34
+ class RawFunctionsClient:
35
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
36
+ self._client_wrapper = client_wrapper
37
+
38
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[FunctionsListResponse]:
39
+ """
40
+ Parameters
41
+ ----------
42
+ request_options : typing.Optional[RequestOptions]
43
+ Request-specific configuration.
44
+
45
+ Returns
46
+ -------
47
+ HttpResponse[FunctionsListResponse]
48
+ Success
49
+ """
50
+ _response = self._client_wrapper.httpx_client.request(
51
+ "functions",
52
+ method="GET",
53
+ request_options=request_options,
54
+ )
55
+ try:
56
+ if 200 <= _response.status_code < 300:
57
+ _data = typing.cast(
58
+ FunctionsListResponse,
59
+ parse_obj_as(
60
+ type_=FunctionsListResponse, # type: ignore
61
+ object_=_response.json(),
62
+ ),
63
+ )
64
+ return HttpResponse(response=_response, data=_data)
65
+ if _response.status_code == 400:
66
+ raise BadRequestError(
67
+ headers=dict(_response.headers),
68
+ body=typing.cast(
69
+ HttpApiDecodeError,
70
+ parse_obj_as(
71
+ type_=HttpApiDecodeError, # type: ignore
72
+ object_=_response.json(),
73
+ ),
74
+ ),
75
+ )
76
+ if _response.status_code == 401:
77
+ raise UnauthorizedError(
78
+ headers=dict(_response.headers),
79
+ body=typing.cast(
80
+ UnauthorizedErrorBody,
81
+ parse_obj_as(
82
+ type_=UnauthorizedErrorBody, # type: ignore
83
+ object_=_response.json(),
84
+ ),
85
+ ),
86
+ )
87
+ if _response.status_code == 403:
88
+ raise ForbiddenError(
89
+ headers=dict(_response.headers),
90
+ body=typing.cast(
91
+ PermissionDeniedError,
92
+ parse_obj_as(
93
+ type_=PermissionDeniedError, # type: ignore
94
+ object_=_response.json(),
95
+ ),
96
+ ),
97
+ )
98
+ if _response.status_code == 404:
99
+ raise NotFoundError(
100
+ headers=dict(_response.headers),
101
+ body=typing.cast(
102
+ NotFoundErrorBody,
103
+ parse_obj_as(
104
+ type_=NotFoundErrorBody, # type: ignore
105
+ object_=_response.json(),
106
+ ),
107
+ ),
108
+ )
109
+ if _response.status_code == 500:
110
+ raise InternalServerError(
111
+ headers=dict(_response.headers),
112
+ body=typing.cast(
113
+ typing.Optional[typing.Any],
114
+ parse_obj_as(
115
+ type_=typing.Optional[typing.Any], # type: ignore
116
+ object_=_response.json(),
117
+ ),
118
+ ),
119
+ )
120
+ _response_json = _response.json()
121
+ except JSONDecodeError:
122
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
123
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
124
+
125
+ def create(
126
+ self,
127
+ *,
128
+ code: str,
129
+ hash: str,
130
+ signature: str,
131
+ signature_hash: str,
132
+ name: str,
133
+ description: typing.Optional[str] = OMIT,
134
+ tags: typing.Optional[typing.Sequence[str]] = OMIT,
135
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT,
136
+ dependencies: typing.Optional[
137
+ typing.Dict[str, typing.Optional[FunctionsCreateRequestDependenciesValue]]
138
+ ] = OMIT,
139
+ request_options: typing.Optional[RequestOptions] = None,
140
+ ) -> HttpResponse[FunctionsCreateResponse]:
141
+ """
142
+ Parameters
143
+ ----------
144
+ code : str
145
+
146
+ hash : str
147
+
148
+ signature : str
149
+
150
+ signature_hash : str
151
+
152
+ name : str
153
+
154
+ description : typing.Optional[str]
155
+
156
+ tags : typing.Optional[typing.Sequence[str]]
157
+
158
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[str]]]
159
+
160
+ dependencies : typing.Optional[typing.Dict[str, typing.Optional[FunctionsCreateRequestDependenciesValue]]]
161
+
162
+ request_options : typing.Optional[RequestOptions]
163
+ Request-specific configuration.
164
+
165
+ Returns
166
+ -------
167
+ HttpResponse[FunctionsCreateResponse]
168
+ Success
169
+ """
170
+ _response = self._client_wrapper.httpx_client.request(
171
+ "functions",
172
+ method="POST",
173
+ json={
174
+ "code": code,
175
+ "hash": hash,
176
+ "signature": signature,
177
+ "signatureHash": signature_hash,
178
+ "name": name,
179
+ "description": description,
180
+ "tags": tags,
181
+ "metadata": metadata,
182
+ "dependencies": convert_and_respect_annotation_metadata(
183
+ object_=dependencies,
184
+ annotation=typing.Optional[
185
+ typing.Dict[str, typing.Optional[FunctionsCreateRequestDependenciesValue]]
186
+ ],
187
+ direction="write",
188
+ ),
189
+ },
190
+ headers={
191
+ "content-type": "application/json",
192
+ },
193
+ request_options=request_options,
194
+ omit=OMIT,
195
+ )
196
+ try:
197
+ if 200 <= _response.status_code < 300:
198
+ _data = typing.cast(
199
+ FunctionsCreateResponse,
200
+ parse_obj_as(
201
+ type_=FunctionsCreateResponse, # type: ignore
202
+ object_=_response.json(),
203
+ ),
204
+ )
205
+ return HttpResponse(response=_response, data=_data)
206
+ if _response.status_code == 400:
207
+ raise BadRequestError(
208
+ headers=dict(_response.headers),
209
+ body=typing.cast(
210
+ HttpApiDecodeError,
211
+ parse_obj_as(
212
+ type_=HttpApiDecodeError, # type: ignore
213
+ object_=_response.json(),
214
+ ),
215
+ ),
216
+ )
217
+ if _response.status_code == 401:
218
+ raise UnauthorizedError(
219
+ headers=dict(_response.headers),
220
+ body=typing.cast(
221
+ UnauthorizedErrorBody,
222
+ parse_obj_as(
223
+ type_=UnauthorizedErrorBody, # type: ignore
224
+ object_=_response.json(),
225
+ ),
226
+ ),
227
+ )
228
+ if _response.status_code == 403:
229
+ raise ForbiddenError(
230
+ headers=dict(_response.headers),
231
+ body=typing.cast(
232
+ PermissionDeniedError,
233
+ parse_obj_as(
234
+ type_=PermissionDeniedError, # type: ignore
235
+ object_=_response.json(),
236
+ ),
237
+ ),
238
+ )
239
+ if _response.status_code == 404:
240
+ raise NotFoundError(
241
+ headers=dict(_response.headers),
242
+ body=typing.cast(
243
+ NotFoundErrorBody,
244
+ parse_obj_as(
245
+ type_=NotFoundErrorBody, # type: ignore
246
+ object_=_response.json(),
247
+ ),
248
+ ),
249
+ )
250
+ if _response.status_code == 409:
251
+ raise ConflictError(
252
+ headers=dict(_response.headers),
253
+ body=typing.cast(
254
+ AlreadyExistsError,
255
+ parse_obj_as(
256
+ type_=AlreadyExistsError, # type: ignore
257
+ object_=_response.json(),
258
+ ),
259
+ ),
260
+ )
261
+ if _response.status_code == 500:
262
+ raise InternalServerError(
263
+ headers=dict(_response.headers),
264
+ body=typing.cast(
265
+ typing.Optional[typing.Any],
266
+ parse_obj_as(
267
+ type_=typing.Optional[typing.Any], # type: ignore
268
+ object_=_response.json(),
269
+ ),
270
+ ),
271
+ )
272
+ _response_json = _response.json()
273
+ except JSONDecodeError:
274
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
275
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
276
+
277
+ def get(
278
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
279
+ ) -> HttpResponse[FunctionsGetResponse]:
280
+ """
281
+ Parameters
282
+ ----------
283
+ id : str
284
+
285
+ request_options : typing.Optional[RequestOptions]
286
+ Request-specific configuration.
287
+
288
+ Returns
289
+ -------
290
+ HttpResponse[FunctionsGetResponse]
291
+ Success
292
+ """
293
+ _response = self._client_wrapper.httpx_client.request(
294
+ f"functions/{jsonable_encoder(id)}",
295
+ method="GET",
296
+ request_options=request_options,
297
+ )
298
+ try:
299
+ if 200 <= _response.status_code < 300:
300
+ _data = typing.cast(
301
+ FunctionsGetResponse,
302
+ parse_obj_as(
303
+ type_=FunctionsGetResponse, # type: ignore
304
+ object_=_response.json(),
305
+ ),
306
+ )
307
+ return HttpResponse(response=_response, data=_data)
308
+ if _response.status_code == 400:
309
+ raise BadRequestError(
310
+ headers=dict(_response.headers),
311
+ body=typing.cast(
312
+ HttpApiDecodeError,
313
+ parse_obj_as(
314
+ type_=HttpApiDecodeError, # type: ignore
315
+ object_=_response.json(),
316
+ ),
317
+ ),
318
+ )
319
+ if _response.status_code == 401:
320
+ raise UnauthorizedError(
321
+ headers=dict(_response.headers),
322
+ body=typing.cast(
323
+ UnauthorizedErrorBody,
324
+ parse_obj_as(
325
+ type_=UnauthorizedErrorBody, # type: ignore
326
+ object_=_response.json(),
327
+ ),
328
+ ),
329
+ )
330
+ if _response.status_code == 403:
331
+ raise ForbiddenError(
332
+ headers=dict(_response.headers),
333
+ body=typing.cast(
334
+ PermissionDeniedError,
335
+ parse_obj_as(
336
+ type_=PermissionDeniedError, # type: ignore
337
+ object_=_response.json(),
338
+ ),
339
+ ),
340
+ )
341
+ if _response.status_code == 404:
342
+ raise NotFoundError(
343
+ headers=dict(_response.headers),
344
+ body=typing.cast(
345
+ NotFoundErrorBody,
346
+ parse_obj_as(
347
+ type_=NotFoundErrorBody, # type: ignore
348
+ object_=_response.json(),
349
+ ),
350
+ ),
351
+ )
352
+ if _response.status_code == 500:
353
+ raise InternalServerError(
354
+ headers=dict(_response.headers),
355
+ body=typing.cast(
356
+ typing.Optional[typing.Any],
357
+ parse_obj_as(
358
+ type_=typing.Optional[typing.Any], # type: ignore
359
+ object_=_response.json(),
360
+ ),
361
+ ),
362
+ )
363
+ _response_json = _response.json()
364
+ except JSONDecodeError:
365
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
366
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
367
+
368
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
369
+ """
370
+ Parameters
371
+ ----------
372
+ id : str
373
+
374
+ request_options : typing.Optional[RequestOptions]
375
+ Request-specific configuration.
376
+
377
+ Returns
378
+ -------
379
+ HttpResponse[None]
380
+ """
381
+ _response = self._client_wrapper.httpx_client.request(
382
+ f"functions/{jsonable_encoder(id)}",
383
+ method="DELETE",
384
+ request_options=request_options,
385
+ )
386
+ try:
387
+ if 200 <= _response.status_code < 300:
388
+ return HttpResponse(response=_response, data=None)
389
+ if _response.status_code == 400:
390
+ raise BadRequestError(
391
+ headers=dict(_response.headers),
392
+ body=typing.cast(
393
+ HttpApiDecodeError,
394
+ parse_obj_as(
395
+ type_=HttpApiDecodeError, # type: ignore
396
+ object_=_response.json(),
397
+ ),
398
+ ),
399
+ )
400
+ if _response.status_code == 401:
401
+ raise UnauthorizedError(
402
+ headers=dict(_response.headers),
403
+ body=typing.cast(
404
+ UnauthorizedErrorBody,
405
+ parse_obj_as(
406
+ type_=UnauthorizedErrorBody, # type: ignore
407
+ object_=_response.json(),
408
+ ),
409
+ ),
410
+ )
411
+ if _response.status_code == 403:
412
+ raise ForbiddenError(
413
+ headers=dict(_response.headers),
414
+ body=typing.cast(
415
+ PermissionDeniedError,
416
+ parse_obj_as(
417
+ type_=PermissionDeniedError, # type: ignore
418
+ object_=_response.json(),
419
+ ),
420
+ ),
421
+ )
422
+ if _response.status_code == 404:
423
+ raise NotFoundError(
424
+ headers=dict(_response.headers),
425
+ body=typing.cast(
426
+ NotFoundErrorBody,
427
+ parse_obj_as(
428
+ type_=NotFoundErrorBody, # type: ignore
429
+ object_=_response.json(),
430
+ ),
431
+ ),
432
+ )
433
+ if _response.status_code == 500:
434
+ raise InternalServerError(
435
+ headers=dict(_response.headers),
436
+ body=typing.cast(
437
+ typing.Optional[typing.Any],
438
+ parse_obj_as(
439
+ type_=typing.Optional[typing.Any], # type: ignore
440
+ object_=_response.json(),
441
+ ),
442
+ ),
443
+ )
444
+ _response_json = _response.json()
445
+ except JSONDecodeError:
446
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
447
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
448
+
449
+ def findbyhash(
450
+ self, hash: str, *, request_options: typing.Optional[RequestOptions] = None
451
+ ) -> HttpResponse[FunctionsFindByHashResponse]:
452
+ """
453
+ Parameters
454
+ ----------
455
+ hash : str
456
+
457
+ request_options : typing.Optional[RequestOptions]
458
+ Request-specific configuration.
459
+
460
+ Returns
461
+ -------
462
+ HttpResponse[FunctionsFindByHashResponse]
463
+ Success
464
+ """
465
+ _response = self._client_wrapper.httpx_client.request(
466
+ f"functions/hash/{jsonable_encoder(hash)}",
467
+ method="GET",
468
+ request_options=request_options,
469
+ )
470
+ try:
471
+ if 200 <= _response.status_code < 300:
472
+ _data = typing.cast(
473
+ FunctionsFindByHashResponse,
474
+ parse_obj_as(
475
+ type_=FunctionsFindByHashResponse, # type: ignore
476
+ object_=_response.json(),
477
+ ),
478
+ )
479
+ return HttpResponse(response=_response, data=_data)
480
+ if _response.status_code == 400:
481
+ raise BadRequestError(
482
+ headers=dict(_response.headers),
483
+ body=typing.cast(
484
+ HttpApiDecodeError,
485
+ parse_obj_as(
486
+ type_=HttpApiDecodeError, # type: ignore
487
+ object_=_response.json(),
488
+ ),
489
+ ),
490
+ )
491
+ if _response.status_code == 401:
492
+ raise UnauthorizedError(
493
+ headers=dict(_response.headers),
494
+ body=typing.cast(
495
+ UnauthorizedErrorBody,
496
+ parse_obj_as(
497
+ type_=UnauthorizedErrorBody, # type: ignore
498
+ object_=_response.json(),
499
+ ),
500
+ ),
501
+ )
502
+ if _response.status_code == 403:
503
+ raise ForbiddenError(
504
+ headers=dict(_response.headers),
505
+ body=typing.cast(
506
+ PermissionDeniedError,
507
+ parse_obj_as(
508
+ type_=PermissionDeniedError, # type: ignore
509
+ object_=_response.json(),
510
+ ),
511
+ ),
512
+ )
513
+ if _response.status_code == 404:
514
+ raise NotFoundError(
515
+ headers=dict(_response.headers),
516
+ body=typing.cast(
517
+ NotFoundErrorBody,
518
+ parse_obj_as(
519
+ type_=NotFoundErrorBody, # type: ignore
520
+ object_=_response.json(),
521
+ ),
522
+ ),
523
+ )
524
+ if _response.status_code == 500:
525
+ raise InternalServerError(
526
+ headers=dict(_response.headers),
527
+ body=typing.cast(
528
+ typing.Optional[typing.Any],
529
+ parse_obj_as(
530
+ type_=typing.Optional[typing.Any], # type: ignore
531
+ object_=_response.json(),
532
+ ),
533
+ ),
534
+ )
535
+ _response_json = _response.json()
536
+ except JSONDecodeError:
537
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
538
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
539
+
540
+
541
+ class AsyncRawFunctionsClient:
542
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
543
+ self._client_wrapper = client_wrapper
544
+
545
+ async def list(
546
+ self, *, request_options: typing.Optional[RequestOptions] = None
547
+ ) -> AsyncHttpResponse[FunctionsListResponse]:
548
+ """
549
+ Parameters
550
+ ----------
551
+ request_options : typing.Optional[RequestOptions]
552
+ Request-specific configuration.
553
+
554
+ Returns
555
+ -------
556
+ AsyncHttpResponse[FunctionsListResponse]
557
+ Success
558
+ """
559
+ _response = await self._client_wrapper.httpx_client.request(
560
+ "functions",
561
+ method="GET",
562
+ request_options=request_options,
563
+ )
564
+ try:
565
+ if 200 <= _response.status_code < 300:
566
+ _data = typing.cast(
567
+ FunctionsListResponse,
568
+ parse_obj_as(
569
+ type_=FunctionsListResponse, # type: ignore
570
+ object_=_response.json(),
571
+ ),
572
+ )
573
+ return AsyncHttpResponse(response=_response, data=_data)
574
+ if _response.status_code == 400:
575
+ raise BadRequestError(
576
+ headers=dict(_response.headers),
577
+ body=typing.cast(
578
+ HttpApiDecodeError,
579
+ parse_obj_as(
580
+ type_=HttpApiDecodeError, # type: ignore
581
+ object_=_response.json(),
582
+ ),
583
+ ),
584
+ )
585
+ if _response.status_code == 401:
586
+ raise UnauthorizedError(
587
+ headers=dict(_response.headers),
588
+ body=typing.cast(
589
+ UnauthorizedErrorBody,
590
+ parse_obj_as(
591
+ type_=UnauthorizedErrorBody, # type: ignore
592
+ object_=_response.json(),
593
+ ),
594
+ ),
595
+ )
596
+ if _response.status_code == 403:
597
+ raise ForbiddenError(
598
+ headers=dict(_response.headers),
599
+ body=typing.cast(
600
+ PermissionDeniedError,
601
+ parse_obj_as(
602
+ type_=PermissionDeniedError, # type: ignore
603
+ object_=_response.json(),
604
+ ),
605
+ ),
606
+ )
607
+ if _response.status_code == 404:
608
+ raise NotFoundError(
609
+ headers=dict(_response.headers),
610
+ body=typing.cast(
611
+ NotFoundErrorBody,
612
+ parse_obj_as(
613
+ type_=NotFoundErrorBody, # type: ignore
614
+ object_=_response.json(),
615
+ ),
616
+ ),
617
+ )
618
+ if _response.status_code == 500:
619
+ raise InternalServerError(
620
+ headers=dict(_response.headers),
621
+ body=typing.cast(
622
+ typing.Optional[typing.Any],
623
+ parse_obj_as(
624
+ type_=typing.Optional[typing.Any], # type: ignore
625
+ object_=_response.json(),
626
+ ),
627
+ ),
628
+ )
629
+ _response_json = _response.json()
630
+ except JSONDecodeError:
631
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
632
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
633
+
634
+ async def create(
635
+ self,
636
+ *,
637
+ code: str,
638
+ hash: str,
639
+ signature: str,
640
+ signature_hash: str,
641
+ name: str,
642
+ description: typing.Optional[str] = OMIT,
643
+ tags: typing.Optional[typing.Sequence[str]] = OMIT,
644
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[str]]] = OMIT,
645
+ dependencies: typing.Optional[
646
+ typing.Dict[str, typing.Optional[FunctionsCreateRequestDependenciesValue]]
647
+ ] = OMIT,
648
+ request_options: typing.Optional[RequestOptions] = None,
649
+ ) -> AsyncHttpResponse[FunctionsCreateResponse]:
650
+ """
651
+ Parameters
652
+ ----------
653
+ code : str
654
+
655
+ hash : str
656
+
657
+ signature : str
658
+
659
+ signature_hash : str
660
+
661
+ name : str
662
+
663
+ description : typing.Optional[str]
664
+
665
+ tags : typing.Optional[typing.Sequence[str]]
666
+
667
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[str]]]
668
+
669
+ dependencies : typing.Optional[typing.Dict[str, typing.Optional[FunctionsCreateRequestDependenciesValue]]]
670
+
671
+ request_options : typing.Optional[RequestOptions]
672
+ Request-specific configuration.
673
+
674
+ Returns
675
+ -------
676
+ AsyncHttpResponse[FunctionsCreateResponse]
677
+ Success
678
+ """
679
+ _response = await self._client_wrapper.httpx_client.request(
680
+ "functions",
681
+ method="POST",
682
+ json={
683
+ "code": code,
684
+ "hash": hash,
685
+ "signature": signature,
686
+ "signatureHash": signature_hash,
687
+ "name": name,
688
+ "description": description,
689
+ "tags": tags,
690
+ "metadata": metadata,
691
+ "dependencies": convert_and_respect_annotation_metadata(
692
+ object_=dependencies,
693
+ annotation=typing.Optional[
694
+ typing.Dict[str, typing.Optional[FunctionsCreateRequestDependenciesValue]]
695
+ ],
696
+ direction="write",
697
+ ),
698
+ },
699
+ headers={
700
+ "content-type": "application/json",
701
+ },
702
+ request_options=request_options,
703
+ omit=OMIT,
704
+ )
705
+ try:
706
+ if 200 <= _response.status_code < 300:
707
+ _data = typing.cast(
708
+ FunctionsCreateResponse,
709
+ parse_obj_as(
710
+ type_=FunctionsCreateResponse, # type: ignore
711
+ object_=_response.json(),
712
+ ),
713
+ )
714
+ return AsyncHttpResponse(response=_response, data=_data)
715
+ if _response.status_code == 400:
716
+ raise BadRequestError(
717
+ headers=dict(_response.headers),
718
+ body=typing.cast(
719
+ HttpApiDecodeError,
720
+ parse_obj_as(
721
+ type_=HttpApiDecodeError, # type: ignore
722
+ object_=_response.json(),
723
+ ),
724
+ ),
725
+ )
726
+ if _response.status_code == 401:
727
+ raise UnauthorizedError(
728
+ headers=dict(_response.headers),
729
+ body=typing.cast(
730
+ UnauthorizedErrorBody,
731
+ parse_obj_as(
732
+ type_=UnauthorizedErrorBody, # type: ignore
733
+ object_=_response.json(),
734
+ ),
735
+ ),
736
+ )
737
+ if _response.status_code == 403:
738
+ raise ForbiddenError(
739
+ headers=dict(_response.headers),
740
+ body=typing.cast(
741
+ PermissionDeniedError,
742
+ parse_obj_as(
743
+ type_=PermissionDeniedError, # type: ignore
744
+ object_=_response.json(),
745
+ ),
746
+ ),
747
+ )
748
+ if _response.status_code == 404:
749
+ raise NotFoundError(
750
+ headers=dict(_response.headers),
751
+ body=typing.cast(
752
+ NotFoundErrorBody,
753
+ parse_obj_as(
754
+ type_=NotFoundErrorBody, # type: ignore
755
+ object_=_response.json(),
756
+ ),
757
+ ),
758
+ )
759
+ if _response.status_code == 409:
760
+ raise ConflictError(
761
+ headers=dict(_response.headers),
762
+ body=typing.cast(
763
+ AlreadyExistsError,
764
+ parse_obj_as(
765
+ type_=AlreadyExistsError, # type: ignore
766
+ object_=_response.json(),
767
+ ),
768
+ ),
769
+ )
770
+ if _response.status_code == 500:
771
+ raise InternalServerError(
772
+ headers=dict(_response.headers),
773
+ body=typing.cast(
774
+ typing.Optional[typing.Any],
775
+ parse_obj_as(
776
+ type_=typing.Optional[typing.Any], # type: ignore
777
+ object_=_response.json(),
778
+ ),
779
+ ),
780
+ )
781
+ _response_json = _response.json()
782
+ except JSONDecodeError:
783
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
784
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
785
+
786
+ async def get(
787
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
788
+ ) -> AsyncHttpResponse[FunctionsGetResponse]:
789
+ """
790
+ Parameters
791
+ ----------
792
+ id : str
793
+
794
+ request_options : typing.Optional[RequestOptions]
795
+ Request-specific configuration.
796
+
797
+ Returns
798
+ -------
799
+ AsyncHttpResponse[FunctionsGetResponse]
800
+ Success
801
+ """
802
+ _response = await self._client_wrapper.httpx_client.request(
803
+ f"functions/{jsonable_encoder(id)}",
804
+ method="GET",
805
+ request_options=request_options,
806
+ )
807
+ try:
808
+ if 200 <= _response.status_code < 300:
809
+ _data = typing.cast(
810
+ FunctionsGetResponse,
811
+ parse_obj_as(
812
+ type_=FunctionsGetResponse, # type: ignore
813
+ object_=_response.json(),
814
+ ),
815
+ )
816
+ return AsyncHttpResponse(response=_response, data=_data)
817
+ if _response.status_code == 400:
818
+ raise BadRequestError(
819
+ headers=dict(_response.headers),
820
+ body=typing.cast(
821
+ HttpApiDecodeError,
822
+ parse_obj_as(
823
+ type_=HttpApiDecodeError, # type: ignore
824
+ object_=_response.json(),
825
+ ),
826
+ ),
827
+ )
828
+ if _response.status_code == 401:
829
+ raise UnauthorizedError(
830
+ headers=dict(_response.headers),
831
+ body=typing.cast(
832
+ UnauthorizedErrorBody,
833
+ parse_obj_as(
834
+ type_=UnauthorizedErrorBody, # type: ignore
835
+ object_=_response.json(),
836
+ ),
837
+ ),
838
+ )
839
+ if _response.status_code == 403:
840
+ raise ForbiddenError(
841
+ headers=dict(_response.headers),
842
+ body=typing.cast(
843
+ PermissionDeniedError,
844
+ parse_obj_as(
845
+ type_=PermissionDeniedError, # type: ignore
846
+ object_=_response.json(),
847
+ ),
848
+ ),
849
+ )
850
+ if _response.status_code == 404:
851
+ raise NotFoundError(
852
+ headers=dict(_response.headers),
853
+ body=typing.cast(
854
+ NotFoundErrorBody,
855
+ parse_obj_as(
856
+ type_=NotFoundErrorBody, # type: ignore
857
+ object_=_response.json(),
858
+ ),
859
+ ),
860
+ )
861
+ if _response.status_code == 500:
862
+ raise InternalServerError(
863
+ headers=dict(_response.headers),
864
+ body=typing.cast(
865
+ typing.Optional[typing.Any],
866
+ parse_obj_as(
867
+ type_=typing.Optional[typing.Any], # type: ignore
868
+ object_=_response.json(),
869
+ ),
870
+ ),
871
+ )
872
+ _response_json = _response.json()
873
+ except JSONDecodeError:
874
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
875
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
876
+
877
+ async def delete(
878
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
879
+ ) -> AsyncHttpResponse[None]:
880
+ """
881
+ Parameters
882
+ ----------
883
+ id : str
884
+
885
+ request_options : typing.Optional[RequestOptions]
886
+ Request-specific configuration.
887
+
888
+ Returns
889
+ -------
890
+ AsyncHttpResponse[None]
891
+ """
892
+ _response = await self._client_wrapper.httpx_client.request(
893
+ f"functions/{jsonable_encoder(id)}",
894
+ method="DELETE",
895
+ request_options=request_options,
896
+ )
897
+ try:
898
+ if 200 <= _response.status_code < 300:
899
+ return AsyncHttpResponse(response=_response, data=None)
900
+ if _response.status_code == 400:
901
+ raise BadRequestError(
902
+ headers=dict(_response.headers),
903
+ body=typing.cast(
904
+ HttpApiDecodeError,
905
+ parse_obj_as(
906
+ type_=HttpApiDecodeError, # type: ignore
907
+ object_=_response.json(),
908
+ ),
909
+ ),
910
+ )
911
+ if _response.status_code == 401:
912
+ raise UnauthorizedError(
913
+ headers=dict(_response.headers),
914
+ body=typing.cast(
915
+ UnauthorizedErrorBody,
916
+ parse_obj_as(
917
+ type_=UnauthorizedErrorBody, # type: ignore
918
+ object_=_response.json(),
919
+ ),
920
+ ),
921
+ )
922
+ if _response.status_code == 403:
923
+ raise ForbiddenError(
924
+ headers=dict(_response.headers),
925
+ body=typing.cast(
926
+ PermissionDeniedError,
927
+ parse_obj_as(
928
+ type_=PermissionDeniedError, # type: ignore
929
+ object_=_response.json(),
930
+ ),
931
+ ),
932
+ )
933
+ if _response.status_code == 404:
934
+ raise NotFoundError(
935
+ headers=dict(_response.headers),
936
+ body=typing.cast(
937
+ NotFoundErrorBody,
938
+ parse_obj_as(
939
+ type_=NotFoundErrorBody, # type: ignore
940
+ object_=_response.json(),
941
+ ),
942
+ ),
943
+ )
944
+ if _response.status_code == 500:
945
+ raise InternalServerError(
946
+ headers=dict(_response.headers),
947
+ body=typing.cast(
948
+ typing.Optional[typing.Any],
949
+ parse_obj_as(
950
+ type_=typing.Optional[typing.Any], # type: ignore
951
+ object_=_response.json(),
952
+ ),
953
+ ),
954
+ )
955
+ _response_json = _response.json()
956
+ except JSONDecodeError:
957
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
958
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
959
+
960
+ async def findbyhash(
961
+ self, hash: str, *, request_options: typing.Optional[RequestOptions] = None
962
+ ) -> AsyncHttpResponse[FunctionsFindByHashResponse]:
963
+ """
964
+ Parameters
965
+ ----------
966
+ hash : str
967
+
968
+ request_options : typing.Optional[RequestOptions]
969
+ Request-specific configuration.
970
+
971
+ Returns
972
+ -------
973
+ AsyncHttpResponse[FunctionsFindByHashResponse]
974
+ Success
975
+ """
976
+ _response = await self._client_wrapper.httpx_client.request(
977
+ f"functions/hash/{jsonable_encoder(hash)}",
978
+ method="GET",
979
+ request_options=request_options,
980
+ )
981
+ try:
982
+ if 200 <= _response.status_code < 300:
983
+ _data = typing.cast(
984
+ FunctionsFindByHashResponse,
985
+ parse_obj_as(
986
+ type_=FunctionsFindByHashResponse, # type: ignore
987
+ object_=_response.json(),
988
+ ),
989
+ )
990
+ return AsyncHttpResponse(response=_response, data=_data)
991
+ if _response.status_code == 400:
992
+ raise BadRequestError(
993
+ headers=dict(_response.headers),
994
+ body=typing.cast(
995
+ HttpApiDecodeError,
996
+ parse_obj_as(
997
+ type_=HttpApiDecodeError, # type: ignore
998
+ object_=_response.json(),
999
+ ),
1000
+ ),
1001
+ )
1002
+ if _response.status_code == 401:
1003
+ raise UnauthorizedError(
1004
+ headers=dict(_response.headers),
1005
+ body=typing.cast(
1006
+ UnauthorizedErrorBody,
1007
+ parse_obj_as(
1008
+ type_=UnauthorizedErrorBody, # type: ignore
1009
+ object_=_response.json(),
1010
+ ),
1011
+ ),
1012
+ )
1013
+ if _response.status_code == 403:
1014
+ raise ForbiddenError(
1015
+ headers=dict(_response.headers),
1016
+ body=typing.cast(
1017
+ PermissionDeniedError,
1018
+ parse_obj_as(
1019
+ type_=PermissionDeniedError, # type: ignore
1020
+ object_=_response.json(),
1021
+ ),
1022
+ ),
1023
+ )
1024
+ if _response.status_code == 404:
1025
+ raise NotFoundError(
1026
+ headers=dict(_response.headers),
1027
+ body=typing.cast(
1028
+ NotFoundErrorBody,
1029
+ parse_obj_as(
1030
+ type_=NotFoundErrorBody, # type: ignore
1031
+ object_=_response.json(),
1032
+ ),
1033
+ ),
1034
+ )
1035
+ if _response.status_code == 500:
1036
+ raise InternalServerError(
1037
+ headers=dict(_response.headers),
1038
+ body=typing.cast(
1039
+ typing.Optional[typing.Any],
1040
+ parse_obj_as(
1041
+ type_=typing.Optional[typing.Any], # type: ignore
1042
+ object_=_response.json(),
1043
+ ),
1044
+ ),
1045
+ )
1046
+ _response_json = _response.json()
1047
+ except JSONDecodeError:
1048
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1049
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)