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,788 @@
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 ..errors.bad_request_error import BadRequestError
13
+ from ..errors.conflict_error import ConflictError
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 ..types.already_exists_error import AlreadyExistsError
18
+ from ..types.http_api_decode_error import HttpApiDecodeError
19
+ from ..types.not_found_error_body import NotFoundErrorBody
20
+ from ..types.permission_denied_error import PermissionDeniedError
21
+ from .types.api_keys_create_response import ApiKeysCreateResponse
22
+ from .types.api_keys_get_response import ApiKeysGetResponse
23
+ from .types.api_keys_list_response_item import ApiKeysListResponseItem
24
+
25
+ # this is used as the default value for optional parameters
26
+ OMIT = typing.cast(typing.Any, ...)
27
+
28
+
29
+ class RawApiKeysClient:
30
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
31
+ self._client_wrapper = client_wrapper
32
+
33
+ def api_keys_list(
34
+ self,
35
+ organization_id: str,
36
+ project_id: str,
37
+ environment_id: str,
38
+ *,
39
+ request_options: typing.Optional[RequestOptions] = None,
40
+ ) -> HttpResponse[typing.List[ApiKeysListResponseItem]]:
41
+ """
42
+ Parameters
43
+ ----------
44
+ organization_id : str
45
+
46
+ project_id : str
47
+
48
+ environment_id : str
49
+
50
+ request_options : typing.Optional[RequestOptions]
51
+ Request-specific configuration.
52
+
53
+ Returns
54
+ -------
55
+ HttpResponse[typing.List[ApiKeysListResponseItem]]
56
+ Success
57
+ """
58
+ _response = self._client_wrapper.httpx_client.request(
59
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys",
60
+ method="GET",
61
+ request_options=request_options,
62
+ )
63
+ try:
64
+ if 200 <= _response.status_code < 300:
65
+ _data = typing.cast(
66
+ typing.List[ApiKeysListResponseItem],
67
+ parse_obj_as(
68
+ type_=typing.List[ApiKeysListResponseItem], # type: ignore
69
+ object_=_response.json(),
70
+ ),
71
+ )
72
+ return HttpResponse(response=_response, data=_data)
73
+ if _response.status_code == 400:
74
+ raise BadRequestError(
75
+ headers=dict(_response.headers),
76
+ body=typing.cast(
77
+ HttpApiDecodeError,
78
+ parse_obj_as(
79
+ type_=HttpApiDecodeError, # type: ignore
80
+ object_=_response.json(),
81
+ ),
82
+ ),
83
+ )
84
+ if _response.status_code == 403:
85
+ raise ForbiddenError(
86
+ headers=dict(_response.headers),
87
+ body=typing.cast(
88
+ PermissionDeniedError,
89
+ parse_obj_as(
90
+ type_=PermissionDeniedError, # type: ignore
91
+ object_=_response.json(),
92
+ ),
93
+ ),
94
+ )
95
+ if _response.status_code == 404:
96
+ raise NotFoundError(
97
+ headers=dict(_response.headers),
98
+ body=typing.cast(
99
+ NotFoundErrorBody,
100
+ parse_obj_as(
101
+ type_=NotFoundErrorBody, # type: ignore
102
+ object_=_response.json(),
103
+ ),
104
+ ),
105
+ )
106
+ if _response.status_code == 500:
107
+ raise InternalServerError(
108
+ headers=dict(_response.headers),
109
+ body=typing.cast(
110
+ typing.Optional[typing.Any],
111
+ parse_obj_as(
112
+ type_=typing.Optional[typing.Any], # type: ignore
113
+ object_=_response.json(),
114
+ ),
115
+ ),
116
+ )
117
+ _response_json = _response.json()
118
+ except JSONDecodeError:
119
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
120
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
121
+
122
+ def api_keys_create(
123
+ self,
124
+ organization_id: str,
125
+ project_id: str,
126
+ environment_id: str,
127
+ *,
128
+ name: str,
129
+ request_options: typing.Optional[RequestOptions] = None,
130
+ ) -> HttpResponse[ApiKeysCreateResponse]:
131
+ """
132
+ Parameters
133
+ ----------
134
+ organization_id : str
135
+
136
+ project_id : str
137
+
138
+ environment_id : str
139
+
140
+ name : str
141
+ a string at most 100 character(s) long
142
+
143
+ request_options : typing.Optional[RequestOptions]
144
+ Request-specific configuration.
145
+
146
+ Returns
147
+ -------
148
+ HttpResponse[ApiKeysCreateResponse]
149
+ Success
150
+ """
151
+ _response = self._client_wrapper.httpx_client.request(
152
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys",
153
+ method="POST",
154
+ json={
155
+ "name": name,
156
+ },
157
+ headers={
158
+ "content-type": "application/json",
159
+ },
160
+ request_options=request_options,
161
+ omit=OMIT,
162
+ )
163
+ try:
164
+ if 200 <= _response.status_code < 300:
165
+ _data = typing.cast(
166
+ ApiKeysCreateResponse,
167
+ parse_obj_as(
168
+ type_=ApiKeysCreateResponse, # type: ignore
169
+ object_=_response.json(),
170
+ ),
171
+ )
172
+ return HttpResponse(response=_response, data=_data)
173
+ if _response.status_code == 400:
174
+ raise BadRequestError(
175
+ headers=dict(_response.headers),
176
+ body=typing.cast(
177
+ HttpApiDecodeError,
178
+ parse_obj_as(
179
+ type_=HttpApiDecodeError, # type: ignore
180
+ object_=_response.json(),
181
+ ),
182
+ ),
183
+ )
184
+ if _response.status_code == 403:
185
+ raise ForbiddenError(
186
+ headers=dict(_response.headers),
187
+ body=typing.cast(
188
+ PermissionDeniedError,
189
+ parse_obj_as(
190
+ type_=PermissionDeniedError, # type: ignore
191
+ object_=_response.json(),
192
+ ),
193
+ ),
194
+ )
195
+ if _response.status_code == 404:
196
+ raise NotFoundError(
197
+ headers=dict(_response.headers),
198
+ body=typing.cast(
199
+ NotFoundErrorBody,
200
+ parse_obj_as(
201
+ type_=NotFoundErrorBody, # type: ignore
202
+ object_=_response.json(),
203
+ ),
204
+ ),
205
+ )
206
+ if _response.status_code == 409:
207
+ raise ConflictError(
208
+ headers=dict(_response.headers),
209
+ body=typing.cast(
210
+ AlreadyExistsError,
211
+ parse_obj_as(
212
+ type_=AlreadyExistsError, # type: ignore
213
+ object_=_response.json(),
214
+ ),
215
+ ),
216
+ )
217
+ if _response.status_code == 500:
218
+ raise InternalServerError(
219
+ headers=dict(_response.headers),
220
+ body=typing.cast(
221
+ typing.Optional[typing.Any],
222
+ parse_obj_as(
223
+ type_=typing.Optional[typing.Any], # type: ignore
224
+ object_=_response.json(),
225
+ ),
226
+ ),
227
+ )
228
+ _response_json = _response.json()
229
+ except JSONDecodeError:
230
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
231
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
232
+
233
+ def api_keys_get(
234
+ self,
235
+ organization_id: str,
236
+ project_id: str,
237
+ environment_id: str,
238
+ api_key_id: str,
239
+ *,
240
+ request_options: typing.Optional[RequestOptions] = None,
241
+ ) -> HttpResponse[ApiKeysGetResponse]:
242
+ """
243
+ Parameters
244
+ ----------
245
+ organization_id : str
246
+
247
+ project_id : str
248
+
249
+ environment_id : str
250
+
251
+ api_key_id : str
252
+
253
+ request_options : typing.Optional[RequestOptions]
254
+ Request-specific configuration.
255
+
256
+ Returns
257
+ -------
258
+ HttpResponse[ApiKeysGetResponse]
259
+ Success
260
+ """
261
+ _response = self._client_wrapper.httpx_client.request(
262
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys/{jsonable_encoder(api_key_id)}",
263
+ method="GET",
264
+ request_options=request_options,
265
+ )
266
+ try:
267
+ if 200 <= _response.status_code < 300:
268
+ _data = typing.cast(
269
+ ApiKeysGetResponse,
270
+ parse_obj_as(
271
+ type_=ApiKeysGetResponse, # type: ignore
272
+ object_=_response.json(),
273
+ ),
274
+ )
275
+ return HttpResponse(response=_response, data=_data)
276
+ if _response.status_code == 400:
277
+ raise BadRequestError(
278
+ headers=dict(_response.headers),
279
+ body=typing.cast(
280
+ HttpApiDecodeError,
281
+ parse_obj_as(
282
+ type_=HttpApiDecodeError, # type: ignore
283
+ object_=_response.json(),
284
+ ),
285
+ ),
286
+ )
287
+ if _response.status_code == 403:
288
+ raise ForbiddenError(
289
+ headers=dict(_response.headers),
290
+ body=typing.cast(
291
+ PermissionDeniedError,
292
+ parse_obj_as(
293
+ type_=PermissionDeniedError, # type: ignore
294
+ object_=_response.json(),
295
+ ),
296
+ ),
297
+ )
298
+ if _response.status_code == 404:
299
+ raise NotFoundError(
300
+ headers=dict(_response.headers),
301
+ body=typing.cast(
302
+ NotFoundErrorBody,
303
+ parse_obj_as(
304
+ type_=NotFoundErrorBody, # type: ignore
305
+ object_=_response.json(),
306
+ ),
307
+ ),
308
+ )
309
+ if _response.status_code == 500:
310
+ raise InternalServerError(
311
+ headers=dict(_response.headers),
312
+ body=typing.cast(
313
+ typing.Optional[typing.Any],
314
+ parse_obj_as(
315
+ type_=typing.Optional[typing.Any], # type: ignore
316
+ object_=_response.json(),
317
+ ),
318
+ ),
319
+ )
320
+ _response_json = _response.json()
321
+ except JSONDecodeError:
322
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
323
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
324
+
325
+ def api_keys_delete(
326
+ self,
327
+ organization_id: str,
328
+ project_id: str,
329
+ environment_id: str,
330
+ api_key_id: str,
331
+ *,
332
+ request_options: typing.Optional[RequestOptions] = None,
333
+ ) -> HttpResponse[None]:
334
+ """
335
+ Parameters
336
+ ----------
337
+ organization_id : str
338
+
339
+ project_id : str
340
+
341
+ environment_id : str
342
+
343
+ api_key_id : str
344
+
345
+ request_options : typing.Optional[RequestOptions]
346
+ Request-specific configuration.
347
+
348
+ Returns
349
+ -------
350
+ HttpResponse[None]
351
+ """
352
+ _response = self._client_wrapper.httpx_client.request(
353
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys/{jsonable_encoder(api_key_id)}",
354
+ method="DELETE",
355
+ request_options=request_options,
356
+ )
357
+ try:
358
+ if 200 <= _response.status_code < 300:
359
+ return HttpResponse(response=_response, data=None)
360
+ if _response.status_code == 400:
361
+ raise BadRequestError(
362
+ headers=dict(_response.headers),
363
+ body=typing.cast(
364
+ HttpApiDecodeError,
365
+ parse_obj_as(
366
+ type_=HttpApiDecodeError, # type: ignore
367
+ object_=_response.json(),
368
+ ),
369
+ ),
370
+ )
371
+ if _response.status_code == 403:
372
+ raise ForbiddenError(
373
+ headers=dict(_response.headers),
374
+ body=typing.cast(
375
+ PermissionDeniedError,
376
+ parse_obj_as(
377
+ type_=PermissionDeniedError, # type: ignore
378
+ object_=_response.json(),
379
+ ),
380
+ ),
381
+ )
382
+ if _response.status_code == 404:
383
+ raise NotFoundError(
384
+ headers=dict(_response.headers),
385
+ body=typing.cast(
386
+ NotFoundErrorBody,
387
+ parse_obj_as(
388
+ type_=NotFoundErrorBody, # type: ignore
389
+ object_=_response.json(),
390
+ ),
391
+ ),
392
+ )
393
+ if _response.status_code == 500:
394
+ raise InternalServerError(
395
+ headers=dict(_response.headers),
396
+ body=typing.cast(
397
+ typing.Optional[typing.Any],
398
+ parse_obj_as(
399
+ type_=typing.Optional[typing.Any], # type: ignore
400
+ object_=_response.json(),
401
+ ),
402
+ ),
403
+ )
404
+ _response_json = _response.json()
405
+ except JSONDecodeError:
406
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
407
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
408
+
409
+
410
+ class AsyncRawApiKeysClient:
411
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
412
+ self._client_wrapper = client_wrapper
413
+
414
+ async def api_keys_list(
415
+ self,
416
+ organization_id: str,
417
+ project_id: str,
418
+ environment_id: str,
419
+ *,
420
+ request_options: typing.Optional[RequestOptions] = None,
421
+ ) -> AsyncHttpResponse[typing.List[ApiKeysListResponseItem]]:
422
+ """
423
+ Parameters
424
+ ----------
425
+ organization_id : str
426
+
427
+ project_id : str
428
+
429
+ environment_id : str
430
+
431
+ request_options : typing.Optional[RequestOptions]
432
+ Request-specific configuration.
433
+
434
+ Returns
435
+ -------
436
+ AsyncHttpResponse[typing.List[ApiKeysListResponseItem]]
437
+ Success
438
+ """
439
+ _response = await self._client_wrapper.httpx_client.request(
440
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys",
441
+ method="GET",
442
+ request_options=request_options,
443
+ )
444
+ try:
445
+ if 200 <= _response.status_code < 300:
446
+ _data = typing.cast(
447
+ typing.List[ApiKeysListResponseItem],
448
+ parse_obj_as(
449
+ type_=typing.List[ApiKeysListResponseItem], # type: ignore
450
+ object_=_response.json(),
451
+ ),
452
+ )
453
+ return AsyncHttpResponse(response=_response, data=_data)
454
+ if _response.status_code == 400:
455
+ raise BadRequestError(
456
+ headers=dict(_response.headers),
457
+ body=typing.cast(
458
+ HttpApiDecodeError,
459
+ parse_obj_as(
460
+ type_=HttpApiDecodeError, # type: ignore
461
+ object_=_response.json(),
462
+ ),
463
+ ),
464
+ )
465
+ if _response.status_code == 403:
466
+ raise ForbiddenError(
467
+ headers=dict(_response.headers),
468
+ body=typing.cast(
469
+ PermissionDeniedError,
470
+ parse_obj_as(
471
+ type_=PermissionDeniedError, # type: ignore
472
+ object_=_response.json(),
473
+ ),
474
+ ),
475
+ )
476
+ if _response.status_code == 404:
477
+ raise NotFoundError(
478
+ headers=dict(_response.headers),
479
+ body=typing.cast(
480
+ NotFoundErrorBody,
481
+ parse_obj_as(
482
+ type_=NotFoundErrorBody, # type: ignore
483
+ object_=_response.json(),
484
+ ),
485
+ ),
486
+ )
487
+ if _response.status_code == 500:
488
+ raise InternalServerError(
489
+ headers=dict(_response.headers),
490
+ body=typing.cast(
491
+ typing.Optional[typing.Any],
492
+ parse_obj_as(
493
+ type_=typing.Optional[typing.Any], # type: ignore
494
+ object_=_response.json(),
495
+ ),
496
+ ),
497
+ )
498
+ _response_json = _response.json()
499
+ except JSONDecodeError:
500
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
501
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
502
+
503
+ async def api_keys_create(
504
+ self,
505
+ organization_id: str,
506
+ project_id: str,
507
+ environment_id: str,
508
+ *,
509
+ name: str,
510
+ request_options: typing.Optional[RequestOptions] = None,
511
+ ) -> AsyncHttpResponse[ApiKeysCreateResponse]:
512
+ """
513
+ Parameters
514
+ ----------
515
+ organization_id : str
516
+
517
+ project_id : str
518
+
519
+ environment_id : str
520
+
521
+ name : str
522
+ a string at most 100 character(s) long
523
+
524
+ request_options : typing.Optional[RequestOptions]
525
+ Request-specific configuration.
526
+
527
+ Returns
528
+ -------
529
+ AsyncHttpResponse[ApiKeysCreateResponse]
530
+ Success
531
+ """
532
+ _response = await self._client_wrapper.httpx_client.request(
533
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys",
534
+ method="POST",
535
+ json={
536
+ "name": name,
537
+ },
538
+ headers={
539
+ "content-type": "application/json",
540
+ },
541
+ request_options=request_options,
542
+ omit=OMIT,
543
+ )
544
+ try:
545
+ if 200 <= _response.status_code < 300:
546
+ _data = typing.cast(
547
+ ApiKeysCreateResponse,
548
+ parse_obj_as(
549
+ type_=ApiKeysCreateResponse, # type: ignore
550
+ object_=_response.json(),
551
+ ),
552
+ )
553
+ return AsyncHttpResponse(response=_response, data=_data)
554
+ if _response.status_code == 400:
555
+ raise BadRequestError(
556
+ headers=dict(_response.headers),
557
+ body=typing.cast(
558
+ HttpApiDecodeError,
559
+ parse_obj_as(
560
+ type_=HttpApiDecodeError, # type: ignore
561
+ object_=_response.json(),
562
+ ),
563
+ ),
564
+ )
565
+ if _response.status_code == 403:
566
+ raise ForbiddenError(
567
+ headers=dict(_response.headers),
568
+ body=typing.cast(
569
+ PermissionDeniedError,
570
+ parse_obj_as(
571
+ type_=PermissionDeniedError, # type: ignore
572
+ object_=_response.json(),
573
+ ),
574
+ ),
575
+ )
576
+ if _response.status_code == 404:
577
+ raise NotFoundError(
578
+ headers=dict(_response.headers),
579
+ body=typing.cast(
580
+ NotFoundErrorBody,
581
+ parse_obj_as(
582
+ type_=NotFoundErrorBody, # type: ignore
583
+ object_=_response.json(),
584
+ ),
585
+ ),
586
+ )
587
+ if _response.status_code == 409:
588
+ raise ConflictError(
589
+ headers=dict(_response.headers),
590
+ body=typing.cast(
591
+ AlreadyExistsError,
592
+ parse_obj_as(
593
+ type_=AlreadyExistsError, # type: ignore
594
+ object_=_response.json(),
595
+ ),
596
+ ),
597
+ )
598
+ if _response.status_code == 500:
599
+ raise InternalServerError(
600
+ headers=dict(_response.headers),
601
+ body=typing.cast(
602
+ typing.Optional[typing.Any],
603
+ parse_obj_as(
604
+ type_=typing.Optional[typing.Any], # type: ignore
605
+ object_=_response.json(),
606
+ ),
607
+ ),
608
+ )
609
+ _response_json = _response.json()
610
+ except JSONDecodeError:
611
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
612
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
613
+
614
+ async def api_keys_get(
615
+ self,
616
+ organization_id: str,
617
+ project_id: str,
618
+ environment_id: str,
619
+ api_key_id: str,
620
+ *,
621
+ request_options: typing.Optional[RequestOptions] = None,
622
+ ) -> AsyncHttpResponse[ApiKeysGetResponse]:
623
+ """
624
+ Parameters
625
+ ----------
626
+ organization_id : str
627
+
628
+ project_id : str
629
+
630
+ environment_id : str
631
+
632
+ api_key_id : str
633
+
634
+ request_options : typing.Optional[RequestOptions]
635
+ Request-specific configuration.
636
+
637
+ Returns
638
+ -------
639
+ AsyncHttpResponse[ApiKeysGetResponse]
640
+ Success
641
+ """
642
+ _response = await self._client_wrapper.httpx_client.request(
643
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys/{jsonable_encoder(api_key_id)}",
644
+ method="GET",
645
+ request_options=request_options,
646
+ )
647
+ try:
648
+ if 200 <= _response.status_code < 300:
649
+ _data = typing.cast(
650
+ ApiKeysGetResponse,
651
+ parse_obj_as(
652
+ type_=ApiKeysGetResponse, # type: ignore
653
+ object_=_response.json(),
654
+ ),
655
+ )
656
+ return AsyncHttpResponse(response=_response, data=_data)
657
+ if _response.status_code == 400:
658
+ raise BadRequestError(
659
+ headers=dict(_response.headers),
660
+ body=typing.cast(
661
+ HttpApiDecodeError,
662
+ parse_obj_as(
663
+ type_=HttpApiDecodeError, # type: ignore
664
+ object_=_response.json(),
665
+ ),
666
+ ),
667
+ )
668
+ if _response.status_code == 403:
669
+ raise ForbiddenError(
670
+ headers=dict(_response.headers),
671
+ body=typing.cast(
672
+ PermissionDeniedError,
673
+ parse_obj_as(
674
+ type_=PermissionDeniedError, # type: ignore
675
+ object_=_response.json(),
676
+ ),
677
+ ),
678
+ )
679
+ if _response.status_code == 404:
680
+ raise NotFoundError(
681
+ headers=dict(_response.headers),
682
+ body=typing.cast(
683
+ NotFoundErrorBody,
684
+ parse_obj_as(
685
+ type_=NotFoundErrorBody, # type: ignore
686
+ object_=_response.json(),
687
+ ),
688
+ ),
689
+ )
690
+ if _response.status_code == 500:
691
+ raise InternalServerError(
692
+ headers=dict(_response.headers),
693
+ body=typing.cast(
694
+ typing.Optional[typing.Any],
695
+ parse_obj_as(
696
+ type_=typing.Optional[typing.Any], # type: ignore
697
+ object_=_response.json(),
698
+ ),
699
+ ),
700
+ )
701
+ _response_json = _response.json()
702
+ except JSONDecodeError:
703
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
704
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
705
+
706
+ async def api_keys_delete(
707
+ self,
708
+ organization_id: str,
709
+ project_id: str,
710
+ environment_id: str,
711
+ api_key_id: str,
712
+ *,
713
+ request_options: typing.Optional[RequestOptions] = None,
714
+ ) -> AsyncHttpResponse[None]:
715
+ """
716
+ Parameters
717
+ ----------
718
+ organization_id : str
719
+
720
+ project_id : str
721
+
722
+ environment_id : str
723
+
724
+ api_key_id : str
725
+
726
+ request_options : typing.Optional[RequestOptions]
727
+ Request-specific configuration.
728
+
729
+ Returns
730
+ -------
731
+ AsyncHttpResponse[None]
732
+ """
733
+ _response = await self._client_wrapper.httpx_client.request(
734
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}/api-keys/{jsonable_encoder(api_key_id)}",
735
+ method="DELETE",
736
+ request_options=request_options,
737
+ )
738
+ try:
739
+ if 200 <= _response.status_code < 300:
740
+ return AsyncHttpResponse(response=_response, data=None)
741
+ if _response.status_code == 400:
742
+ raise BadRequestError(
743
+ headers=dict(_response.headers),
744
+ body=typing.cast(
745
+ HttpApiDecodeError,
746
+ parse_obj_as(
747
+ type_=HttpApiDecodeError, # type: ignore
748
+ object_=_response.json(),
749
+ ),
750
+ ),
751
+ )
752
+ if _response.status_code == 403:
753
+ raise ForbiddenError(
754
+ headers=dict(_response.headers),
755
+ body=typing.cast(
756
+ PermissionDeniedError,
757
+ parse_obj_as(
758
+ type_=PermissionDeniedError, # type: ignore
759
+ object_=_response.json(),
760
+ ),
761
+ ),
762
+ )
763
+ if _response.status_code == 404:
764
+ raise NotFoundError(
765
+ headers=dict(_response.headers),
766
+ body=typing.cast(
767
+ NotFoundErrorBody,
768
+ parse_obj_as(
769
+ type_=NotFoundErrorBody, # type: ignore
770
+ object_=_response.json(),
771
+ ),
772
+ ),
773
+ )
774
+ if _response.status_code == 500:
775
+ raise InternalServerError(
776
+ headers=dict(_response.headers),
777
+ body=typing.cast(
778
+ typing.Optional[typing.Any],
779
+ parse_obj_as(
780
+ type_=typing.Optional[typing.Any], # type: ignore
781
+ object_=_response.json(),
782
+ ),
783
+ ),
784
+ )
785
+ _response_json = _response.json()
786
+ except JSONDecodeError:
787
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
788
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)