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,999 @@
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.environments_create_response import EnvironmentsCreateResponse
22
+ from .types.environments_get_response import EnvironmentsGetResponse
23
+ from .types.environments_list_response_item import EnvironmentsListResponseItem
24
+ from .types.environments_update_response import EnvironmentsUpdateResponse
25
+
26
+ # this is used as the default value for optional parameters
27
+ OMIT = typing.cast(typing.Any, ...)
28
+
29
+
30
+ class RawEnvironmentsClient:
31
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
32
+ self._client_wrapper = client_wrapper
33
+
34
+ def list(
35
+ self, organization_id: str, project_id: str, *, request_options: typing.Optional[RequestOptions] = None
36
+ ) -> HttpResponse[typing.List[EnvironmentsListResponseItem]]:
37
+ """
38
+ Parameters
39
+ ----------
40
+ organization_id : str
41
+
42
+ project_id : str
43
+
44
+ request_options : typing.Optional[RequestOptions]
45
+ Request-specific configuration.
46
+
47
+ Returns
48
+ -------
49
+ HttpResponse[typing.List[EnvironmentsListResponseItem]]
50
+ Success
51
+ """
52
+ _response = self._client_wrapper.httpx_client.request(
53
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments",
54
+ method="GET",
55
+ request_options=request_options,
56
+ )
57
+ try:
58
+ if 200 <= _response.status_code < 300:
59
+ _data = typing.cast(
60
+ typing.List[EnvironmentsListResponseItem],
61
+ parse_obj_as(
62
+ type_=typing.List[EnvironmentsListResponseItem], # type: ignore
63
+ object_=_response.json(),
64
+ ),
65
+ )
66
+ return HttpResponse(response=_response, data=_data)
67
+ if _response.status_code == 400:
68
+ raise BadRequestError(
69
+ headers=dict(_response.headers),
70
+ body=typing.cast(
71
+ HttpApiDecodeError,
72
+ parse_obj_as(
73
+ type_=HttpApiDecodeError, # type: ignore
74
+ object_=_response.json(),
75
+ ),
76
+ ),
77
+ )
78
+ if _response.status_code == 403:
79
+ raise ForbiddenError(
80
+ headers=dict(_response.headers),
81
+ body=typing.cast(
82
+ PermissionDeniedError,
83
+ parse_obj_as(
84
+ type_=PermissionDeniedError, # type: ignore
85
+ object_=_response.json(),
86
+ ),
87
+ ),
88
+ )
89
+ if _response.status_code == 404:
90
+ raise NotFoundError(
91
+ headers=dict(_response.headers),
92
+ body=typing.cast(
93
+ NotFoundErrorBody,
94
+ parse_obj_as(
95
+ type_=NotFoundErrorBody, # type: ignore
96
+ object_=_response.json(),
97
+ ),
98
+ ),
99
+ )
100
+ if _response.status_code == 500:
101
+ raise InternalServerError(
102
+ headers=dict(_response.headers),
103
+ body=typing.cast(
104
+ typing.Optional[typing.Any],
105
+ parse_obj_as(
106
+ type_=typing.Optional[typing.Any], # type: ignore
107
+ object_=_response.json(),
108
+ ),
109
+ ),
110
+ )
111
+ _response_json = _response.json()
112
+ except JSONDecodeError:
113
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
114
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
115
+
116
+ def create(
117
+ self,
118
+ organization_id: str,
119
+ project_id: str,
120
+ *,
121
+ name: str,
122
+ slug: str,
123
+ request_options: typing.Optional[RequestOptions] = None,
124
+ ) -> HttpResponse[EnvironmentsCreateResponse]:
125
+ """
126
+ Parameters
127
+ ----------
128
+ organization_id : str
129
+
130
+ project_id : str
131
+
132
+ name : str
133
+ a string at most 100 character(s) long
134
+
135
+ slug : str
136
+ a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
137
+
138
+ request_options : typing.Optional[RequestOptions]
139
+ Request-specific configuration.
140
+
141
+ Returns
142
+ -------
143
+ HttpResponse[EnvironmentsCreateResponse]
144
+ Success
145
+ """
146
+ _response = self._client_wrapper.httpx_client.request(
147
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments",
148
+ method="POST",
149
+ json={
150
+ "name": name,
151
+ "slug": slug,
152
+ },
153
+ headers={
154
+ "content-type": "application/json",
155
+ },
156
+ request_options=request_options,
157
+ omit=OMIT,
158
+ )
159
+ try:
160
+ if 200 <= _response.status_code < 300:
161
+ _data = typing.cast(
162
+ EnvironmentsCreateResponse,
163
+ parse_obj_as(
164
+ type_=EnvironmentsCreateResponse, # type: ignore
165
+ object_=_response.json(),
166
+ ),
167
+ )
168
+ return HttpResponse(response=_response, data=_data)
169
+ if _response.status_code == 400:
170
+ raise BadRequestError(
171
+ headers=dict(_response.headers),
172
+ body=typing.cast(
173
+ HttpApiDecodeError,
174
+ parse_obj_as(
175
+ type_=HttpApiDecodeError, # type: ignore
176
+ object_=_response.json(),
177
+ ),
178
+ ),
179
+ )
180
+ if _response.status_code == 403:
181
+ raise ForbiddenError(
182
+ headers=dict(_response.headers),
183
+ body=typing.cast(
184
+ PermissionDeniedError,
185
+ parse_obj_as(
186
+ type_=PermissionDeniedError, # type: ignore
187
+ object_=_response.json(),
188
+ ),
189
+ ),
190
+ )
191
+ if _response.status_code == 404:
192
+ raise NotFoundError(
193
+ headers=dict(_response.headers),
194
+ body=typing.cast(
195
+ NotFoundErrorBody,
196
+ parse_obj_as(
197
+ type_=NotFoundErrorBody, # type: ignore
198
+ object_=_response.json(),
199
+ ),
200
+ ),
201
+ )
202
+ if _response.status_code == 409:
203
+ raise ConflictError(
204
+ headers=dict(_response.headers),
205
+ body=typing.cast(
206
+ AlreadyExistsError,
207
+ parse_obj_as(
208
+ type_=AlreadyExistsError, # type: ignore
209
+ object_=_response.json(),
210
+ ),
211
+ ),
212
+ )
213
+ if _response.status_code == 500:
214
+ raise InternalServerError(
215
+ headers=dict(_response.headers),
216
+ body=typing.cast(
217
+ typing.Optional[typing.Any],
218
+ parse_obj_as(
219
+ type_=typing.Optional[typing.Any], # type: ignore
220
+ object_=_response.json(),
221
+ ),
222
+ ),
223
+ )
224
+ _response_json = _response.json()
225
+ except JSONDecodeError:
226
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
227
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
228
+
229
+ def get(
230
+ self,
231
+ organization_id: str,
232
+ project_id: str,
233
+ environment_id: str,
234
+ *,
235
+ request_options: typing.Optional[RequestOptions] = None,
236
+ ) -> HttpResponse[EnvironmentsGetResponse]:
237
+ """
238
+ Parameters
239
+ ----------
240
+ organization_id : str
241
+
242
+ project_id : str
243
+
244
+ environment_id : str
245
+
246
+ request_options : typing.Optional[RequestOptions]
247
+ Request-specific configuration.
248
+
249
+ Returns
250
+ -------
251
+ HttpResponse[EnvironmentsGetResponse]
252
+ Success
253
+ """
254
+ _response = self._client_wrapper.httpx_client.request(
255
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}",
256
+ method="GET",
257
+ request_options=request_options,
258
+ )
259
+ try:
260
+ if 200 <= _response.status_code < 300:
261
+ _data = typing.cast(
262
+ EnvironmentsGetResponse,
263
+ parse_obj_as(
264
+ type_=EnvironmentsGetResponse, # type: ignore
265
+ object_=_response.json(),
266
+ ),
267
+ )
268
+ return HttpResponse(response=_response, data=_data)
269
+ if _response.status_code == 400:
270
+ raise BadRequestError(
271
+ headers=dict(_response.headers),
272
+ body=typing.cast(
273
+ HttpApiDecodeError,
274
+ parse_obj_as(
275
+ type_=HttpApiDecodeError, # type: ignore
276
+ object_=_response.json(),
277
+ ),
278
+ ),
279
+ )
280
+ if _response.status_code == 403:
281
+ raise ForbiddenError(
282
+ headers=dict(_response.headers),
283
+ body=typing.cast(
284
+ PermissionDeniedError,
285
+ parse_obj_as(
286
+ type_=PermissionDeniedError, # type: ignore
287
+ object_=_response.json(),
288
+ ),
289
+ ),
290
+ )
291
+ if _response.status_code == 404:
292
+ raise NotFoundError(
293
+ headers=dict(_response.headers),
294
+ body=typing.cast(
295
+ NotFoundErrorBody,
296
+ parse_obj_as(
297
+ type_=NotFoundErrorBody, # type: ignore
298
+ object_=_response.json(),
299
+ ),
300
+ ),
301
+ )
302
+ if _response.status_code == 500:
303
+ raise InternalServerError(
304
+ headers=dict(_response.headers),
305
+ body=typing.cast(
306
+ typing.Optional[typing.Any],
307
+ parse_obj_as(
308
+ type_=typing.Optional[typing.Any], # type: ignore
309
+ object_=_response.json(),
310
+ ),
311
+ ),
312
+ )
313
+ _response_json = _response.json()
314
+ except JSONDecodeError:
315
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
316
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
317
+
318
+ def update(
319
+ self,
320
+ organization_id: str,
321
+ project_id: str,
322
+ environment_id: str,
323
+ *,
324
+ name: typing.Optional[str] = OMIT,
325
+ slug: typing.Optional[str] = OMIT,
326
+ request_options: typing.Optional[RequestOptions] = None,
327
+ ) -> HttpResponse[EnvironmentsUpdateResponse]:
328
+ """
329
+ Parameters
330
+ ----------
331
+ organization_id : str
332
+
333
+ project_id : str
334
+
335
+ environment_id : str
336
+
337
+ name : typing.Optional[str]
338
+ a string at most 100 character(s) long
339
+
340
+ slug : typing.Optional[str]
341
+ a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
342
+
343
+ request_options : typing.Optional[RequestOptions]
344
+ Request-specific configuration.
345
+
346
+ Returns
347
+ -------
348
+ HttpResponse[EnvironmentsUpdateResponse]
349
+ Success
350
+ """
351
+ _response = self._client_wrapper.httpx_client.request(
352
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}",
353
+ method="PUT",
354
+ json={
355
+ "name": name,
356
+ "slug": slug,
357
+ },
358
+ headers={
359
+ "content-type": "application/json",
360
+ },
361
+ request_options=request_options,
362
+ omit=OMIT,
363
+ )
364
+ try:
365
+ if 200 <= _response.status_code < 300:
366
+ _data = typing.cast(
367
+ EnvironmentsUpdateResponse,
368
+ parse_obj_as(
369
+ type_=EnvironmentsUpdateResponse, # type: ignore
370
+ object_=_response.json(),
371
+ ),
372
+ )
373
+ return HttpResponse(response=_response, data=_data)
374
+ if _response.status_code == 400:
375
+ raise BadRequestError(
376
+ headers=dict(_response.headers),
377
+ body=typing.cast(
378
+ HttpApiDecodeError,
379
+ parse_obj_as(
380
+ type_=HttpApiDecodeError, # type: ignore
381
+ object_=_response.json(),
382
+ ),
383
+ ),
384
+ )
385
+ if _response.status_code == 403:
386
+ raise ForbiddenError(
387
+ headers=dict(_response.headers),
388
+ body=typing.cast(
389
+ PermissionDeniedError,
390
+ parse_obj_as(
391
+ type_=PermissionDeniedError, # type: ignore
392
+ object_=_response.json(),
393
+ ),
394
+ ),
395
+ )
396
+ if _response.status_code == 404:
397
+ raise NotFoundError(
398
+ headers=dict(_response.headers),
399
+ body=typing.cast(
400
+ NotFoundErrorBody,
401
+ parse_obj_as(
402
+ type_=NotFoundErrorBody, # type: ignore
403
+ object_=_response.json(),
404
+ ),
405
+ ),
406
+ )
407
+ if _response.status_code == 409:
408
+ raise ConflictError(
409
+ headers=dict(_response.headers),
410
+ body=typing.cast(
411
+ AlreadyExistsError,
412
+ parse_obj_as(
413
+ type_=AlreadyExistsError, # type: ignore
414
+ object_=_response.json(),
415
+ ),
416
+ ),
417
+ )
418
+ if _response.status_code == 500:
419
+ raise InternalServerError(
420
+ headers=dict(_response.headers),
421
+ body=typing.cast(
422
+ typing.Optional[typing.Any],
423
+ parse_obj_as(
424
+ type_=typing.Optional[typing.Any], # type: ignore
425
+ object_=_response.json(),
426
+ ),
427
+ ),
428
+ )
429
+ _response_json = _response.json()
430
+ except JSONDecodeError:
431
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
432
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
433
+
434
+ def delete(
435
+ self,
436
+ organization_id: str,
437
+ project_id: str,
438
+ environment_id: str,
439
+ *,
440
+ request_options: typing.Optional[RequestOptions] = None,
441
+ ) -> HttpResponse[None]:
442
+ """
443
+ Parameters
444
+ ----------
445
+ organization_id : str
446
+
447
+ project_id : str
448
+
449
+ environment_id : str
450
+
451
+ request_options : typing.Optional[RequestOptions]
452
+ Request-specific configuration.
453
+
454
+ Returns
455
+ -------
456
+ HttpResponse[None]
457
+ """
458
+ _response = self._client_wrapper.httpx_client.request(
459
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}",
460
+ method="DELETE",
461
+ request_options=request_options,
462
+ )
463
+ try:
464
+ if 200 <= _response.status_code < 300:
465
+ return HttpResponse(response=_response, data=None)
466
+ if _response.status_code == 400:
467
+ raise BadRequestError(
468
+ headers=dict(_response.headers),
469
+ body=typing.cast(
470
+ HttpApiDecodeError,
471
+ parse_obj_as(
472
+ type_=HttpApiDecodeError, # type: ignore
473
+ object_=_response.json(),
474
+ ),
475
+ ),
476
+ )
477
+ if _response.status_code == 403:
478
+ raise ForbiddenError(
479
+ headers=dict(_response.headers),
480
+ body=typing.cast(
481
+ PermissionDeniedError,
482
+ parse_obj_as(
483
+ type_=PermissionDeniedError, # type: ignore
484
+ object_=_response.json(),
485
+ ),
486
+ ),
487
+ )
488
+ if _response.status_code == 404:
489
+ raise NotFoundError(
490
+ headers=dict(_response.headers),
491
+ body=typing.cast(
492
+ NotFoundErrorBody,
493
+ parse_obj_as(
494
+ type_=NotFoundErrorBody, # type: ignore
495
+ object_=_response.json(),
496
+ ),
497
+ ),
498
+ )
499
+ if _response.status_code == 500:
500
+ raise InternalServerError(
501
+ headers=dict(_response.headers),
502
+ body=typing.cast(
503
+ typing.Optional[typing.Any],
504
+ parse_obj_as(
505
+ type_=typing.Optional[typing.Any], # type: ignore
506
+ object_=_response.json(),
507
+ ),
508
+ ),
509
+ )
510
+ _response_json = _response.json()
511
+ except JSONDecodeError:
512
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
513
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
514
+
515
+
516
+ class AsyncRawEnvironmentsClient:
517
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
518
+ self._client_wrapper = client_wrapper
519
+
520
+ async def list(
521
+ self, organization_id: str, project_id: str, *, request_options: typing.Optional[RequestOptions] = None
522
+ ) -> AsyncHttpResponse[typing.List[EnvironmentsListResponseItem]]:
523
+ """
524
+ Parameters
525
+ ----------
526
+ organization_id : str
527
+
528
+ project_id : str
529
+
530
+ request_options : typing.Optional[RequestOptions]
531
+ Request-specific configuration.
532
+
533
+ Returns
534
+ -------
535
+ AsyncHttpResponse[typing.List[EnvironmentsListResponseItem]]
536
+ Success
537
+ """
538
+ _response = await self._client_wrapper.httpx_client.request(
539
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments",
540
+ method="GET",
541
+ request_options=request_options,
542
+ )
543
+ try:
544
+ if 200 <= _response.status_code < 300:
545
+ _data = typing.cast(
546
+ typing.List[EnvironmentsListResponseItem],
547
+ parse_obj_as(
548
+ type_=typing.List[EnvironmentsListResponseItem], # type: ignore
549
+ object_=_response.json(),
550
+ ),
551
+ )
552
+ return AsyncHttpResponse(response=_response, data=_data)
553
+ if _response.status_code == 400:
554
+ raise BadRequestError(
555
+ headers=dict(_response.headers),
556
+ body=typing.cast(
557
+ HttpApiDecodeError,
558
+ parse_obj_as(
559
+ type_=HttpApiDecodeError, # type: ignore
560
+ object_=_response.json(),
561
+ ),
562
+ ),
563
+ )
564
+ if _response.status_code == 403:
565
+ raise ForbiddenError(
566
+ headers=dict(_response.headers),
567
+ body=typing.cast(
568
+ PermissionDeniedError,
569
+ parse_obj_as(
570
+ type_=PermissionDeniedError, # type: ignore
571
+ object_=_response.json(),
572
+ ),
573
+ ),
574
+ )
575
+ if _response.status_code == 404:
576
+ raise NotFoundError(
577
+ headers=dict(_response.headers),
578
+ body=typing.cast(
579
+ NotFoundErrorBody,
580
+ parse_obj_as(
581
+ type_=NotFoundErrorBody, # type: ignore
582
+ object_=_response.json(),
583
+ ),
584
+ ),
585
+ )
586
+ if _response.status_code == 500:
587
+ raise InternalServerError(
588
+ headers=dict(_response.headers),
589
+ body=typing.cast(
590
+ typing.Optional[typing.Any],
591
+ parse_obj_as(
592
+ type_=typing.Optional[typing.Any], # type: ignore
593
+ object_=_response.json(),
594
+ ),
595
+ ),
596
+ )
597
+ _response_json = _response.json()
598
+ except JSONDecodeError:
599
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
600
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
601
+
602
+ async def create(
603
+ self,
604
+ organization_id: str,
605
+ project_id: str,
606
+ *,
607
+ name: str,
608
+ slug: str,
609
+ request_options: typing.Optional[RequestOptions] = None,
610
+ ) -> AsyncHttpResponse[EnvironmentsCreateResponse]:
611
+ """
612
+ Parameters
613
+ ----------
614
+ organization_id : str
615
+
616
+ project_id : str
617
+
618
+ name : str
619
+ a string at most 100 character(s) long
620
+
621
+ slug : str
622
+ a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
623
+
624
+ request_options : typing.Optional[RequestOptions]
625
+ Request-specific configuration.
626
+
627
+ Returns
628
+ -------
629
+ AsyncHttpResponse[EnvironmentsCreateResponse]
630
+ Success
631
+ """
632
+ _response = await self._client_wrapper.httpx_client.request(
633
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments",
634
+ method="POST",
635
+ json={
636
+ "name": name,
637
+ "slug": slug,
638
+ },
639
+ headers={
640
+ "content-type": "application/json",
641
+ },
642
+ request_options=request_options,
643
+ omit=OMIT,
644
+ )
645
+ try:
646
+ if 200 <= _response.status_code < 300:
647
+ _data = typing.cast(
648
+ EnvironmentsCreateResponse,
649
+ parse_obj_as(
650
+ type_=EnvironmentsCreateResponse, # type: ignore
651
+ object_=_response.json(),
652
+ ),
653
+ )
654
+ return AsyncHttpResponse(response=_response, data=_data)
655
+ if _response.status_code == 400:
656
+ raise BadRequestError(
657
+ headers=dict(_response.headers),
658
+ body=typing.cast(
659
+ HttpApiDecodeError,
660
+ parse_obj_as(
661
+ type_=HttpApiDecodeError, # type: ignore
662
+ object_=_response.json(),
663
+ ),
664
+ ),
665
+ )
666
+ if _response.status_code == 403:
667
+ raise ForbiddenError(
668
+ headers=dict(_response.headers),
669
+ body=typing.cast(
670
+ PermissionDeniedError,
671
+ parse_obj_as(
672
+ type_=PermissionDeniedError, # type: ignore
673
+ object_=_response.json(),
674
+ ),
675
+ ),
676
+ )
677
+ if _response.status_code == 404:
678
+ raise NotFoundError(
679
+ headers=dict(_response.headers),
680
+ body=typing.cast(
681
+ NotFoundErrorBody,
682
+ parse_obj_as(
683
+ type_=NotFoundErrorBody, # type: ignore
684
+ object_=_response.json(),
685
+ ),
686
+ ),
687
+ )
688
+ if _response.status_code == 409:
689
+ raise ConflictError(
690
+ headers=dict(_response.headers),
691
+ body=typing.cast(
692
+ AlreadyExistsError,
693
+ parse_obj_as(
694
+ type_=AlreadyExistsError, # type: ignore
695
+ object_=_response.json(),
696
+ ),
697
+ ),
698
+ )
699
+ if _response.status_code == 500:
700
+ raise InternalServerError(
701
+ headers=dict(_response.headers),
702
+ body=typing.cast(
703
+ typing.Optional[typing.Any],
704
+ parse_obj_as(
705
+ type_=typing.Optional[typing.Any], # type: ignore
706
+ object_=_response.json(),
707
+ ),
708
+ ),
709
+ )
710
+ _response_json = _response.json()
711
+ except JSONDecodeError:
712
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
713
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
714
+
715
+ async def get(
716
+ self,
717
+ organization_id: str,
718
+ project_id: str,
719
+ environment_id: str,
720
+ *,
721
+ request_options: typing.Optional[RequestOptions] = None,
722
+ ) -> AsyncHttpResponse[EnvironmentsGetResponse]:
723
+ """
724
+ Parameters
725
+ ----------
726
+ organization_id : str
727
+
728
+ project_id : str
729
+
730
+ environment_id : str
731
+
732
+ request_options : typing.Optional[RequestOptions]
733
+ Request-specific configuration.
734
+
735
+ Returns
736
+ -------
737
+ AsyncHttpResponse[EnvironmentsGetResponse]
738
+ Success
739
+ """
740
+ _response = await self._client_wrapper.httpx_client.request(
741
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}",
742
+ method="GET",
743
+ request_options=request_options,
744
+ )
745
+ try:
746
+ if 200 <= _response.status_code < 300:
747
+ _data = typing.cast(
748
+ EnvironmentsGetResponse,
749
+ parse_obj_as(
750
+ type_=EnvironmentsGetResponse, # type: ignore
751
+ object_=_response.json(),
752
+ ),
753
+ )
754
+ return AsyncHttpResponse(response=_response, data=_data)
755
+ if _response.status_code == 400:
756
+ raise BadRequestError(
757
+ headers=dict(_response.headers),
758
+ body=typing.cast(
759
+ HttpApiDecodeError,
760
+ parse_obj_as(
761
+ type_=HttpApiDecodeError, # type: ignore
762
+ object_=_response.json(),
763
+ ),
764
+ ),
765
+ )
766
+ if _response.status_code == 403:
767
+ raise ForbiddenError(
768
+ headers=dict(_response.headers),
769
+ body=typing.cast(
770
+ PermissionDeniedError,
771
+ parse_obj_as(
772
+ type_=PermissionDeniedError, # type: ignore
773
+ object_=_response.json(),
774
+ ),
775
+ ),
776
+ )
777
+ if _response.status_code == 404:
778
+ raise NotFoundError(
779
+ headers=dict(_response.headers),
780
+ body=typing.cast(
781
+ NotFoundErrorBody,
782
+ parse_obj_as(
783
+ type_=NotFoundErrorBody, # type: ignore
784
+ object_=_response.json(),
785
+ ),
786
+ ),
787
+ )
788
+ if _response.status_code == 500:
789
+ raise InternalServerError(
790
+ headers=dict(_response.headers),
791
+ body=typing.cast(
792
+ typing.Optional[typing.Any],
793
+ parse_obj_as(
794
+ type_=typing.Optional[typing.Any], # type: ignore
795
+ object_=_response.json(),
796
+ ),
797
+ ),
798
+ )
799
+ _response_json = _response.json()
800
+ except JSONDecodeError:
801
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
802
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
803
+
804
+ async def update(
805
+ self,
806
+ organization_id: str,
807
+ project_id: str,
808
+ environment_id: str,
809
+ *,
810
+ name: typing.Optional[str] = OMIT,
811
+ slug: typing.Optional[str] = OMIT,
812
+ request_options: typing.Optional[RequestOptions] = None,
813
+ ) -> AsyncHttpResponse[EnvironmentsUpdateResponse]:
814
+ """
815
+ Parameters
816
+ ----------
817
+ organization_id : str
818
+
819
+ project_id : str
820
+
821
+ environment_id : str
822
+
823
+ name : typing.Optional[str]
824
+ a string at most 100 character(s) long
825
+
826
+ slug : typing.Optional[str]
827
+ a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
828
+
829
+ request_options : typing.Optional[RequestOptions]
830
+ Request-specific configuration.
831
+
832
+ Returns
833
+ -------
834
+ AsyncHttpResponse[EnvironmentsUpdateResponse]
835
+ Success
836
+ """
837
+ _response = await self._client_wrapper.httpx_client.request(
838
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}",
839
+ method="PUT",
840
+ json={
841
+ "name": name,
842
+ "slug": slug,
843
+ },
844
+ headers={
845
+ "content-type": "application/json",
846
+ },
847
+ request_options=request_options,
848
+ omit=OMIT,
849
+ )
850
+ try:
851
+ if 200 <= _response.status_code < 300:
852
+ _data = typing.cast(
853
+ EnvironmentsUpdateResponse,
854
+ parse_obj_as(
855
+ type_=EnvironmentsUpdateResponse, # type: ignore
856
+ object_=_response.json(),
857
+ ),
858
+ )
859
+ return AsyncHttpResponse(response=_response, data=_data)
860
+ if _response.status_code == 400:
861
+ raise BadRequestError(
862
+ headers=dict(_response.headers),
863
+ body=typing.cast(
864
+ HttpApiDecodeError,
865
+ parse_obj_as(
866
+ type_=HttpApiDecodeError, # type: ignore
867
+ object_=_response.json(),
868
+ ),
869
+ ),
870
+ )
871
+ if _response.status_code == 403:
872
+ raise ForbiddenError(
873
+ headers=dict(_response.headers),
874
+ body=typing.cast(
875
+ PermissionDeniedError,
876
+ parse_obj_as(
877
+ type_=PermissionDeniedError, # type: ignore
878
+ object_=_response.json(),
879
+ ),
880
+ ),
881
+ )
882
+ if _response.status_code == 404:
883
+ raise NotFoundError(
884
+ headers=dict(_response.headers),
885
+ body=typing.cast(
886
+ NotFoundErrorBody,
887
+ parse_obj_as(
888
+ type_=NotFoundErrorBody, # type: ignore
889
+ object_=_response.json(),
890
+ ),
891
+ ),
892
+ )
893
+ if _response.status_code == 409:
894
+ raise ConflictError(
895
+ headers=dict(_response.headers),
896
+ body=typing.cast(
897
+ AlreadyExistsError,
898
+ parse_obj_as(
899
+ type_=AlreadyExistsError, # type: ignore
900
+ object_=_response.json(),
901
+ ),
902
+ ),
903
+ )
904
+ if _response.status_code == 500:
905
+ raise InternalServerError(
906
+ headers=dict(_response.headers),
907
+ body=typing.cast(
908
+ typing.Optional[typing.Any],
909
+ parse_obj_as(
910
+ type_=typing.Optional[typing.Any], # type: ignore
911
+ object_=_response.json(),
912
+ ),
913
+ ),
914
+ )
915
+ _response_json = _response.json()
916
+ except JSONDecodeError:
917
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
918
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
919
+
920
+ async def delete(
921
+ self,
922
+ organization_id: str,
923
+ project_id: str,
924
+ environment_id: str,
925
+ *,
926
+ request_options: typing.Optional[RequestOptions] = None,
927
+ ) -> AsyncHttpResponse[None]:
928
+ """
929
+ Parameters
930
+ ----------
931
+ organization_id : str
932
+
933
+ project_id : str
934
+
935
+ environment_id : str
936
+
937
+ request_options : typing.Optional[RequestOptions]
938
+ Request-specific configuration.
939
+
940
+ Returns
941
+ -------
942
+ AsyncHttpResponse[None]
943
+ """
944
+ _response = await self._client_wrapper.httpx_client.request(
945
+ f"organizations/{jsonable_encoder(organization_id)}/projects/{jsonable_encoder(project_id)}/environments/{jsonable_encoder(environment_id)}",
946
+ method="DELETE",
947
+ request_options=request_options,
948
+ )
949
+ try:
950
+ if 200 <= _response.status_code < 300:
951
+ return AsyncHttpResponse(response=_response, data=None)
952
+ if _response.status_code == 400:
953
+ raise BadRequestError(
954
+ headers=dict(_response.headers),
955
+ body=typing.cast(
956
+ HttpApiDecodeError,
957
+ parse_obj_as(
958
+ type_=HttpApiDecodeError, # type: ignore
959
+ object_=_response.json(),
960
+ ),
961
+ ),
962
+ )
963
+ if _response.status_code == 403:
964
+ raise ForbiddenError(
965
+ headers=dict(_response.headers),
966
+ body=typing.cast(
967
+ PermissionDeniedError,
968
+ parse_obj_as(
969
+ type_=PermissionDeniedError, # type: ignore
970
+ object_=_response.json(),
971
+ ),
972
+ ),
973
+ )
974
+ if _response.status_code == 404:
975
+ raise NotFoundError(
976
+ headers=dict(_response.headers),
977
+ body=typing.cast(
978
+ NotFoundErrorBody,
979
+ parse_obj_as(
980
+ type_=NotFoundErrorBody, # type: ignore
981
+ object_=_response.json(),
982
+ ),
983
+ ),
984
+ )
985
+ if _response.status_code == 500:
986
+ raise InternalServerError(
987
+ headers=dict(_response.headers),
988
+ body=typing.cast(
989
+ typing.Optional[typing.Any],
990
+ parse_obj_as(
991
+ type_=typing.Optional[typing.Any], # type: ignore
992
+ object_=_response.json(),
993
+ ),
994
+ ),
995
+ )
996
+ _response_json = _response.json()
997
+ except JSONDecodeError:
998
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
999
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)