openmeter 1.0.0b53__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of openmeter might be problematic. Click here for more details.
- openmeter/__init__.py +89 -15
- openmeter/_base_client.py +2041 -0
- openmeter/_client.py +518 -70
- openmeter/_compat.py +221 -0
- openmeter/_constants.py +14 -0
- openmeter/_exceptions.py +108 -0
- openmeter/_files.py +127 -0
- openmeter/_models.py +777 -0
- openmeter/_qs.py +150 -0
- openmeter/_resource.py +43 -0
- openmeter/_response.py +820 -0
- openmeter/_streaming.py +333 -0
- openmeter/_types.py +222 -0
- openmeter/_utils/__init__.py +56 -0
- openmeter/_utils/_logs.py +25 -0
- openmeter/_utils/_proxy.py +63 -0
- openmeter/_utils/_reflection.py +42 -0
- openmeter/_utils/_streams.py +12 -0
- openmeter/_utils/_sync.py +81 -0
- openmeter/_utils/_transform.py +387 -0
- openmeter/_utils/_typing.py +120 -0
- openmeter/_utils/_utils.py +419 -0
- openmeter/_version.py +4 -0
- openmeter/lib/.keep +4 -0
- openmeter/py.typed +0 -1
- openmeter/resources/__init__.py +103 -0
- openmeter/resources/debug/__init__.py +33 -0
- openmeter/resources/debug/debug.py +102 -0
- openmeter/resources/debug/metrics.py +146 -0
- openmeter/resources/entitlements/__init__.py +47 -0
- openmeter/resources/entitlements/entitlements.py +450 -0
- openmeter/resources/entitlements/features.py +578 -0
- openmeter/resources/entitlements/grants.py +389 -0
- openmeter/resources/events.py +442 -0
- openmeter/resources/meters/__init__.py +33 -0
- openmeter/resources/meters/meters.py +666 -0
- openmeter/resources/meters/subjects.py +163 -0
- openmeter/resources/notifications/__init__.py +75 -0
- openmeter/resources/notifications/channels.py +686 -0
- openmeter/resources/notifications/events.py +365 -0
- openmeter/resources/notifications/notifications.py +198 -0
- openmeter/resources/notifications/rules.py +781 -0
- openmeter/resources/notifications/webhook.py +208 -0
- openmeter/resources/portal/__init__.py +47 -0
- openmeter/resources/portal/meters.py +230 -0
- openmeter/resources/portal/portal.py +112 -0
- openmeter/resources/portal/tokens.py +359 -0
- openmeter/resources/subjects/entitlements/__init__.py +33 -0
- openmeter/resources/subjects/entitlements/entitlements.py +1881 -0
- openmeter/resources/subjects/entitlements/grants.py +453 -0
- openmeter/resources/subjects.py +419 -0
- openmeter/types/__init__.py +21 -0
- openmeter/types/debug/__init__.py +5 -0
- openmeter/types/debug/metric_list_response.py +7 -0
- openmeter/types/entitlement.py +238 -0
- openmeter/types/entitlements/__init__.py +11 -0
- openmeter/types/entitlements/feature.py +61 -0
- openmeter/types/entitlements/feature_create_params.py +43 -0
- openmeter/types/entitlements/feature_list_params.py +23 -0
- openmeter/types/entitlements/grant_list_params.py +57 -0
- openmeter/types/entitlements/grant_list_response.py +11 -0
- openmeter/types/entitlements/grant_paginated_response.py +24 -0
- openmeter/types/entitlements/list_features_result.py +28 -0
- openmeter/types/event_ingest_params.py +46 -0
- openmeter/types/event_ingest_response.py +43 -0
- openmeter/types/event_list_params.py +22 -0
- openmeter/types/event_list_response.py +9 -0
- openmeter/types/ingested_event.py +59 -0
- openmeter/types/list_entitlements_result.py +28 -0
- openmeter/types/meter.py +53 -0
- openmeter/types/meter_create_params.py +50 -0
- openmeter/types/meter_list_response.py +9 -0
- openmeter/types/meter_query_params.py +50 -0
- openmeter/types/meter_query_result.py +35 -0
- openmeter/types/meters/__init__.py +5 -0
- openmeter/types/meters/subject_list_response.py +8 -0
- openmeter/types/notifications/__init__.py +18 -0
- openmeter/types/notifications/channel_create_params.py +34 -0
- openmeter/types/notifications/channel_list_params.py +41 -0
- openmeter/types/notifications/channel_list_response.py +24 -0
- openmeter/types/notifications/channel_update_params.py +34 -0
- openmeter/types/notifications/event_list_params.py +61 -0
- openmeter/types/notifications/event_list_response.py +24 -0
- openmeter/types/notifications/notification_channel.py +47 -0
- openmeter/types/notifications/notification_event.py +215 -0
- openmeter/types/notifications/notification_rule.py +70 -0
- openmeter/types/notifications/rule_create_params.py +39 -0
- openmeter/types/notifications/rule_list_params.py +54 -0
- openmeter/types/notifications/rule_list_response.py +24 -0
- openmeter/types/notifications/rule_update_params.py +39 -0
- openmeter/types/notifications/webhook_svix_params.py +26 -0
- openmeter/types/portal/__init__.py +10 -0
- openmeter/types/portal/meter_query_params.py +44 -0
- openmeter/types/portal/portal_token.py +28 -0
- openmeter/types/portal/token_create_params.py +17 -0
- openmeter/types/portal/token_invalidate_params.py +15 -0
- openmeter/types/portal/token_list_params.py +12 -0
- openmeter/types/portal/token_list_response.py +9 -0
- openmeter/types/shared/__init__.py +3 -0
- openmeter/types/subject.py +37 -0
- openmeter/types/subject_list_response.py +9 -0
- openmeter/types/subject_param.py +27 -0
- openmeter/types/subject_upsert_params.py +39 -0
- openmeter/types/subject_upsert_response.py +10 -0
- openmeter/types/subjects/__init__.py +13 -0
- openmeter/types/subjects/entitlement_history_params.py +35 -0
- openmeter/types/subjects/entitlement_history_response.py +98 -0
- openmeter/types/subjects/entitlement_list_response.py +10 -0
- openmeter/types/subjects/entitlements/__init__.py +8 -0
- openmeter/types/subjects/entitlements/entitlement_grant.py +103 -0
- openmeter/types/subjects/entitlements/grant_list_response.py +10 -0
- openmeter-2.0.0.dist-info/METADATA +396 -0
- openmeter-2.0.0.dist-info/RECORD +115 -0
- {openmeter-1.0.0b53.dist-info → openmeter-2.0.0.dist-info}/WHEEL +1 -1
- openmeter-2.0.0.dist-info/licenses/LICENSE +201 -0
- openmeter/_configuration.py +0 -36
- openmeter/_operations/__init__.py +0 -17
- openmeter/_operations/_operations.py +0 -2098
- openmeter/_operations/_patch.py +0 -20
- openmeter/_patch.py +0 -20
- openmeter/_serialization.py +0 -2008
- openmeter/_vendor.py +0 -24
- openmeter/aio/__init__.py +0 -21
- openmeter/aio/_client.py +0 -83
- openmeter/aio/_configuration.py +0 -36
- openmeter/aio/_operations/__init__.py +0 -17
- openmeter/aio/_operations/_operations.py +0 -1771
- openmeter/aio/_operations/_patch.py +0 -20
- openmeter/aio/_patch.py +0 -20
- openmeter/aio/_vendor.py +0 -24
- openmeter-1.0.0b53.dist-info/METADATA +0 -92
- openmeter-1.0.0b53.dist-info/RECORD +0 -21
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Dict, List, cast
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
import httpx
|
|
9
|
+
|
|
10
|
+
from ..._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
|
|
11
|
+
from ..._utils import (
|
|
12
|
+
maybe_transform,
|
|
13
|
+
async_maybe_transform,
|
|
14
|
+
)
|
|
15
|
+
from ..._compat import cached_property
|
|
16
|
+
from ..._resource import SyncAPIResource, AsyncAPIResource
|
|
17
|
+
from ..._response import (
|
|
18
|
+
to_raw_response_wrapper,
|
|
19
|
+
to_streamed_response_wrapper,
|
|
20
|
+
async_to_raw_response_wrapper,
|
|
21
|
+
async_to_streamed_response_wrapper,
|
|
22
|
+
)
|
|
23
|
+
from ..._base_client import make_request_options
|
|
24
|
+
from ...types.entitlements import feature_list_params, feature_create_params
|
|
25
|
+
from ...types.entitlements.feature import Feature
|
|
26
|
+
from ...types.entitlements.list_features_result import ListFeaturesResult
|
|
27
|
+
|
|
28
|
+
__all__ = ["FeaturesResource", "AsyncFeaturesResource"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FeaturesResource(SyncAPIResource):
|
|
32
|
+
@cached_property
|
|
33
|
+
def with_raw_response(self) -> FeaturesResourceWithRawResponse:
|
|
34
|
+
"""
|
|
35
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
36
|
+
the raw response object instead of the parsed content.
|
|
37
|
+
|
|
38
|
+
For more information, see https://www.github.com/openmeterio/openmeter-python#accessing-raw-response-data-eg-headers
|
|
39
|
+
"""
|
|
40
|
+
return FeaturesResourceWithRawResponse(self)
|
|
41
|
+
|
|
42
|
+
@cached_property
|
|
43
|
+
def with_streaming_response(self) -> FeaturesResourceWithStreamingResponse:
|
|
44
|
+
"""
|
|
45
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
46
|
+
|
|
47
|
+
For more information, see https://www.github.com/openmeterio/openmeter-python#with_streaming_response
|
|
48
|
+
"""
|
|
49
|
+
return FeaturesResourceWithStreamingResponse(self)
|
|
50
|
+
|
|
51
|
+
def create(
|
|
52
|
+
self,
|
|
53
|
+
*,
|
|
54
|
+
key: str,
|
|
55
|
+
name: str,
|
|
56
|
+
metadata: Dict[str, str] | NotGiven = NOT_GIVEN,
|
|
57
|
+
meter_group_by_filters: Dict[str, str] | NotGiven = NOT_GIVEN,
|
|
58
|
+
meter_slug: str | NotGiven = NOT_GIVEN,
|
|
59
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
60
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
61
|
+
extra_headers: Headers | None = None,
|
|
62
|
+
extra_query: Query | None = None,
|
|
63
|
+
extra_body: Body | None = None,
|
|
64
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
65
|
+
) -> Feature:
|
|
66
|
+
"""Features are either metered or static.
|
|
67
|
+
|
|
68
|
+
A feature is metered if meterSlug is
|
|
69
|
+
provided at creation. For metered features you can pass additional filters that
|
|
70
|
+
will be applied when calculating feature usage, based on the meter's groupBy
|
|
71
|
+
fields. Only meters with SUM and COUNT aggregation are supported for features.
|
|
72
|
+
Features cannot be updated later, only archived.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
key: A key is a unique string that is used to identify a resource.
|
|
76
|
+
|
|
77
|
+
metadata: Set of key-value pairs. Metadata can be used to store additional information
|
|
78
|
+
about a resource.
|
|
79
|
+
|
|
80
|
+
meter_group_by_filters: Optional meter group by filters. Useful if the meter scope is broader than what
|
|
81
|
+
feature tracks. Example scenario would be a meter tracking all token use with
|
|
82
|
+
groupBy fields for the model, then the feature could filter for model=gpt-4.
|
|
83
|
+
|
|
84
|
+
meter_slug: A key is a unique string that is used to identify a resource.
|
|
85
|
+
|
|
86
|
+
extra_headers: Send extra headers
|
|
87
|
+
|
|
88
|
+
extra_query: Add additional query parameters to the request
|
|
89
|
+
|
|
90
|
+
extra_body: Add additional JSON properties to the request
|
|
91
|
+
|
|
92
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
93
|
+
"""
|
|
94
|
+
return self._post(
|
|
95
|
+
"/api/v1/features",
|
|
96
|
+
body=maybe_transform(
|
|
97
|
+
{
|
|
98
|
+
"key": key,
|
|
99
|
+
"name": name,
|
|
100
|
+
"metadata": metadata,
|
|
101
|
+
"meter_group_by_filters": meter_group_by_filters,
|
|
102
|
+
"meter_slug": meter_slug,
|
|
103
|
+
},
|
|
104
|
+
feature_create_params.FeatureCreateParams,
|
|
105
|
+
),
|
|
106
|
+
options=make_request_options(
|
|
107
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
108
|
+
),
|
|
109
|
+
cast_to=Feature,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def retrieve(
|
|
113
|
+
self,
|
|
114
|
+
feature_id: str,
|
|
115
|
+
*,
|
|
116
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
117
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
118
|
+
extra_headers: Headers | None = None,
|
|
119
|
+
extra_query: Query | None = None,
|
|
120
|
+
extra_body: Body | None = None,
|
|
121
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
122
|
+
) -> Feature:
|
|
123
|
+
"""
|
|
124
|
+
Get a feature by ID.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
extra_headers: Send extra headers
|
|
128
|
+
|
|
129
|
+
extra_query: Add additional query parameters to the request
|
|
130
|
+
|
|
131
|
+
extra_body: Add additional JSON properties to the request
|
|
132
|
+
|
|
133
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
134
|
+
"""
|
|
135
|
+
if not feature_id:
|
|
136
|
+
raise ValueError(f"Expected a non-empty value for `feature_id` but received {feature_id!r}")
|
|
137
|
+
return self._get(
|
|
138
|
+
f"/api/v1/features/{feature_id}",
|
|
139
|
+
options=make_request_options(
|
|
140
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
141
|
+
),
|
|
142
|
+
cast_to=Feature,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
def list(
|
|
146
|
+
self,
|
|
147
|
+
*,
|
|
148
|
+
include_archived: bool | NotGiven = NOT_GIVEN,
|
|
149
|
+
limit: int | NotGiven = NOT_GIVEN,
|
|
150
|
+
meter_slug: List[str] | NotGiven = NOT_GIVEN,
|
|
151
|
+
offset: int | NotGiven = NOT_GIVEN,
|
|
152
|
+
order: Literal["ASC", "DESC"] | NotGiven = NOT_GIVEN,
|
|
153
|
+
order_by: Literal["id", "createdAt", "updatedAt"] | NotGiven = NOT_GIVEN,
|
|
154
|
+
page: int | NotGiven = NOT_GIVEN,
|
|
155
|
+
page_size: int | NotGiven = NOT_GIVEN,
|
|
156
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
157
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
158
|
+
extra_headers: Headers | None = None,
|
|
159
|
+
extra_query: Query | None = None,
|
|
160
|
+
extra_body: Body | None = None,
|
|
161
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
162
|
+
) -> ListFeaturesResult:
|
|
163
|
+
"""
|
|
164
|
+
List features.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
include_archived: Filter by meterGroupByFilters
|
|
168
|
+
|
|
169
|
+
limit: Number of items to return.
|
|
170
|
+
|
|
171
|
+
Default is 100.
|
|
172
|
+
|
|
173
|
+
meter_slug: Filter by meterSlug
|
|
174
|
+
|
|
175
|
+
offset: Number of items to skip.
|
|
176
|
+
|
|
177
|
+
Default is 0.
|
|
178
|
+
|
|
179
|
+
order: The order direction.
|
|
180
|
+
|
|
181
|
+
order_by: The order by field.
|
|
182
|
+
|
|
183
|
+
page: Start date-time in RFC 3339 format.
|
|
184
|
+
|
|
185
|
+
Inclusive.
|
|
186
|
+
|
|
187
|
+
page_size: Number of items per page.
|
|
188
|
+
|
|
189
|
+
Default is 100.
|
|
190
|
+
|
|
191
|
+
extra_headers: Send extra headers
|
|
192
|
+
|
|
193
|
+
extra_query: Add additional query parameters to the request
|
|
194
|
+
|
|
195
|
+
extra_body: Add additional JSON properties to the request
|
|
196
|
+
|
|
197
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
198
|
+
"""
|
|
199
|
+
return cast(
|
|
200
|
+
ListFeaturesResult,
|
|
201
|
+
self._get(
|
|
202
|
+
"/api/v1/features",
|
|
203
|
+
options=make_request_options(
|
|
204
|
+
extra_headers=extra_headers,
|
|
205
|
+
extra_query=extra_query,
|
|
206
|
+
extra_body=extra_body,
|
|
207
|
+
timeout=timeout,
|
|
208
|
+
query=maybe_transform(
|
|
209
|
+
{
|
|
210
|
+
"include_archived": include_archived,
|
|
211
|
+
"limit": limit,
|
|
212
|
+
"meter_slug": meter_slug,
|
|
213
|
+
"offset": offset,
|
|
214
|
+
"order": order,
|
|
215
|
+
"order_by": order_by,
|
|
216
|
+
"page": page,
|
|
217
|
+
"page_size": page_size,
|
|
218
|
+
},
|
|
219
|
+
feature_list_params.FeatureListParams,
|
|
220
|
+
),
|
|
221
|
+
),
|
|
222
|
+
cast_to=cast(
|
|
223
|
+
Any, ListFeaturesResult
|
|
224
|
+
), # Union types cannot be passed in as arguments in the type system
|
|
225
|
+
),
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
def archive(
|
|
229
|
+
self,
|
|
230
|
+
feature_id: str,
|
|
231
|
+
*,
|
|
232
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
233
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
234
|
+
extra_headers: Headers | None = None,
|
|
235
|
+
extra_query: Query | None = None,
|
|
236
|
+
extra_body: Body | None = None,
|
|
237
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
238
|
+
) -> None:
|
|
239
|
+
"""Archive a feature by ID.
|
|
240
|
+
|
|
241
|
+
Once a feature is archived it cannot be unarchived.
|
|
242
|
+
|
|
243
|
+
If a feature is archived,
|
|
244
|
+
new entitlements cannot be created for it, but archiving the feature does not
|
|
245
|
+
affect existing entitlements. This means, if you want to create a new feature
|
|
246
|
+
with the same key, and then create entitlements for it, the previous
|
|
247
|
+
entitlements have to be deleted first on a per subject basis.
|
|
248
|
+
|
|
249
|
+
Args:
|
|
250
|
+
extra_headers: Send extra headers
|
|
251
|
+
|
|
252
|
+
extra_query: Add additional query parameters to the request
|
|
253
|
+
|
|
254
|
+
extra_body: Add additional JSON properties to the request
|
|
255
|
+
|
|
256
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
257
|
+
"""
|
|
258
|
+
if not feature_id:
|
|
259
|
+
raise ValueError(f"Expected a non-empty value for `feature_id` but received {feature_id!r}")
|
|
260
|
+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
|
|
261
|
+
return self._delete(
|
|
262
|
+
f"/api/v1/features/{feature_id}",
|
|
263
|
+
options=make_request_options(
|
|
264
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
265
|
+
),
|
|
266
|
+
cast_to=NoneType,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class AsyncFeaturesResource(AsyncAPIResource):
|
|
271
|
+
@cached_property
|
|
272
|
+
def with_raw_response(self) -> AsyncFeaturesResourceWithRawResponse:
|
|
273
|
+
"""
|
|
274
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
275
|
+
the raw response object instead of the parsed content.
|
|
276
|
+
|
|
277
|
+
For more information, see https://www.github.com/openmeterio/openmeter-python#accessing-raw-response-data-eg-headers
|
|
278
|
+
"""
|
|
279
|
+
return AsyncFeaturesResourceWithRawResponse(self)
|
|
280
|
+
|
|
281
|
+
@cached_property
|
|
282
|
+
def with_streaming_response(self) -> AsyncFeaturesResourceWithStreamingResponse:
|
|
283
|
+
"""
|
|
284
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
285
|
+
|
|
286
|
+
For more information, see https://www.github.com/openmeterio/openmeter-python#with_streaming_response
|
|
287
|
+
"""
|
|
288
|
+
return AsyncFeaturesResourceWithStreamingResponse(self)
|
|
289
|
+
|
|
290
|
+
async def create(
|
|
291
|
+
self,
|
|
292
|
+
*,
|
|
293
|
+
key: str,
|
|
294
|
+
name: str,
|
|
295
|
+
metadata: Dict[str, str] | NotGiven = NOT_GIVEN,
|
|
296
|
+
meter_group_by_filters: Dict[str, str] | NotGiven = NOT_GIVEN,
|
|
297
|
+
meter_slug: str | NotGiven = NOT_GIVEN,
|
|
298
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
299
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
300
|
+
extra_headers: Headers | None = None,
|
|
301
|
+
extra_query: Query | None = None,
|
|
302
|
+
extra_body: Body | None = None,
|
|
303
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
304
|
+
) -> Feature:
|
|
305
|
+
"""Features are either metered or static.
|
|
306
|
+
|
|
307
|
+
A feature is metered if meterSlug is
|
|
308
|
+
provided at creation. For metered features you can pass additional filters that
|
|
309
|
+
will be applied when calculating feature usage, based on the meter's groupBy
|
|
310
|
+
fields. Only meters with SUM and COUNT aggregation are supported for features.
|
|
311
|
+
Features cannot be updated later, only archived.
|
|
312
|
+
|
|
313
|
+
Args:
|
|
314
|
+
key: A key is a unique string that is used to identify a resource.
|
|
315
|
+
|
|
316
|
+
metadata: Set of key-value pairs. Metadata can be used to store additional information
|
|
317
|
+
about a resource.
|
|
318
|
+
|
|
319
|
+
meter_group_by_filters: Optional meter group by filters. Useful if the meter scope is broader than what
|
|
320
|
+
feature tracks. Example scenario would be a meter tracking all token use with
|
|
321
|
+
groupBy fields for the model, then the feature could filter for model=gpt-4.
|
|
322
|
+
|
|
323
|
+
meter_slug: A key is a unique string that is used to identify a resource.
|
|
324
|
+
|
|
325
|
+
extra_headers: Send extra headers
|
|
326
|
+
|
|
327
|
+
extra_query: Add additional query parameters to the request
|
|
328
|
+
|
|
329
|
+
extra_body: Add additional JSON properties to the request
|
|
330
|
+
|
|
331
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
332
|
+
"""
|
|
333
|
+
return await self._post(
|
|
334
|
+
"/api/v1/features",
|
|
335
|
+
body=await async_maybe_transform(
|
|
336
|
+
{
|
|
337
|
+
"key": key,
|
|
338
|
+
"name": name,
|
|
339
|
+
"metadata": metadata,
|
|
340
|
+
"meter_group_by_filters": meter_group_by_filters,
|
|
341
|
+
"meter_slug": meter_slug,
|
|
342
|
+
},
|
|
343
|
+
feature_create_params.FeatureCreateParams,
|
|
344
|
+
),
|
|
345
|
+
options=make_request_options(
|
|
346
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
347
|
+
),
|
|
348
|
+
cast_to=Feature,
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
async def retrieve(
|
|
352
|
+
self,
|
|
353
|
+
feature_id: str,
|
|
354
|
+
*,
|
|
355
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
356
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
357
|
+
extra_headers: Headers | None = None,
|
|
358
|
+
extra_query: Query | None = None,
|
|
359
|
+
extra_body: Body | None = None,
|
|
360
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
361
|
+
) -> Feature:
|
|
362
|
+
"""
|
|
363
|
+
Get a feature by ID.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
extra_headers: Send extra headers
|
|
367
|
+
|
|
368
|
+
extra_query: Add additional query parameters to the request
|
|
369
|
+
|
|
370
|
+
extra_body: Add additional JSON properties to the request
|
|
371
|
+
|
|
372
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
373
|
+
"""
|
|
374
|
+
if not feature_id:
|
|
375
|
+
raise ValueError(f"Expected a non-empty value for `feature_id` but received {feature_id!r}")
|
|
376
|
+
return await self._get(
|
|
377
|
+
f"/api/v1/features/{feature_id}",
|
|
378
|
+
options=make_request_options(
|
|
379
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
380
|
+
),
|
|
381
|
+
cast_to=Feature,
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
async def list(
|
|
385
|
+
self,
|
|
386
|
+
*,
|
|
387
|
+
include_archived: bool | NotGiven = NOT_GIVEN,
|
|
388
|
+
limit: int | NotGiven = NOT_GIVEN,
|
|
389
|
+
meter_slug: List[str] | NotGiven = NOT_GIVEN,
|
|
390
|
+
offset: int | NotGiven = NOT_GIVEN,
|
|
391
|
+
order: Literal["ASC", "DESC"] | NotGiven = NOT_GIVEN,
|
|
392
|
+
order_by: Literal["id", "createdAt", "updatedAt"] | NotGiven = NOT_GIVEN,
|
|
393
|
+
page: int | NotGiven = NOT_GIVEN,
|
|
394
|
+
page_size: int | NotGiven = NOT_GIVEN,
|
|
395
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
396
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
397
|
+
extra_headers: Headers | None = None,
|
|
398
|
+
extra_query: Query | None = None,
|
|
399
|
+
extra_body: Body | None = None,
|
|
400
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
401
|
+
) -> ListFeaturesResult:
|
|
402
|
+
"""
|
|
403
|
+
List features.
|
|
404
|
+
|
|
405
|
+
Args:
|
|
406
|
+
include_archived: Filter by meterGroupByFilters
|
|
407
|
+
|
|
408
|
+
limit: Number of items to return.
|
|
409
|
+
|
|
410
|
+
Default is 100.
|
|
411
|
+
|
|
412
|
+
meter_slug: Filter by meterSlug
|
|
413
|
+
|
|
414
|
+
offset: Number of items to skip.
|
|
415
|
+
|
|
416
|
+
Default is 0.
|
|
417
|
+
|
|
418
|
+
order: The order direction.
|
|
419
|
+
|
|
420
|
+
order_by: The order by field.
|
|
421
|
+
|
|
422
|
+
page: Start date-time in RFC 3339 format.
|
|
423
|
+
|
|
424
|
+
Inclusive.
|
|
425
|
+
|
|
426
|
+
page_size: Number of items per page.
|
|
427
|
+
|
|
428
|
+
Default is 100.
|
|
429
|
+
|
|
430
|
+
extra_headers: Send extra headers
|
|
431
|
+
|
|
432
|
+
extra_query: Add additional query parameters to the request
|
|
433
|
+
|
|
434
|
+
extra_body: Add additional JSON properties to the request
|
|
435
|
+
|
|
436
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
437
|
+
"""
|
|
438
|
+
return cast(
|
|
439
|
+
ListFeaturesResult,
|
|
440
|
+
await self._get(
|
|
441
|
+
"/api/v1/features",
|
|
442
|
+
options=make_request_options(
|
|
443
|
+
extra_headers=extra_headers,
|
|
444
|
+
extra_query=extra_query,
|
|
445
|
+
extra_body=extra_body,
|
|
446
|
+
timeout=timeout,
|
|
447
|
+
query=await async_maybe_transform(
|
|
448
|
+
{
|
|
449
|
+
"include_archived": include_archived,
|
|
450
|
+
"limit": limit,
|
|
451
|
+
"meter_slug": meter_slug,
|
|
452
|
+
"offset": offset,
|
|
453
|
+
"order": order,
|
|
454
|
+
"order_by": order_by,
|
|
455
|
+
"page": page,
|
|
456
|
+
"page_size": page_size,
|
|
457
|
+
},
|
|
458
|
+
feature_list_params.FeatureListParams,
|
|
459
|
+
),
|
|
460
|
+
),
|
|
461
|
+
cast_to=cast(
|
|
462
|
+
Any, ListFeaturesResult
|
|
463
|
+
), # Union types cannot be passed in as arguments in the type system
|
|
464
|
+
),
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
async def archive(
|
|
468
|
+
self,
|
|
469
|
+
feature_id: str,
|
|
470
|
+
*,
|
|
471
|
+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
|
|
472
|
+
# The extra values given here take precedence over values defined on the client or passed to this method.
|
|
473
|
+
extra_headers: Headers | None = None,
|
|
474
|
+
extra_query: Query | None = None,
|
|
475
|
+
extra_body: Body | None = None,
|
|
476
|
+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
477
|
+
) -> None:
|
|
478
|
+
"""Archive a feature by ID.
|
|
479
|
+
|
|
480
|
+
Once a feature is archived it cannot be unarchived.
|
|
481
|
+
|
|
482
|
+
If a feature is archived,
|
|
483
|
+
new entitlements cannot be created for it, but archiving the feature does not
|
|
484
|
+
affect existing entitlements. This means, if you want to create a new feature
|
|
485
|
+
with the same key, and then create entitlements for it, the previous
|
|
486
|
+
entitlements have to be deleted first on a per subject basis.
|
|
487
|
+
|
|
488
|
+
Args:
|
|
489
|
+
extra_headers: Send extra headers
|
|
490
|
+
|
|
491
|
+
extra_query: Add additional query parameters to the request
|
|
492
|
+
|
|
493
|
+
extra_body: Add additional JSON properties to the request
|
|
494
|
+
|
|
495
|
+
timeout: Override the client-level default timeout for this request, in seconds
|
|
496
|
+
"""
|
|
497
|
+
if not feature_id:
|
|
498
|
+
raise ValueError(f"Expected a non-empty value for `feature_id` but received {feature_id!r}")
|
|
499
|
+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
|
|
500
|
+
return await self._delete(
|
|
501
|
+
f"/api/v1/features/{feature_id}",
|
|
502
|
+
options=make_request_options(
|
|
503
|
+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
504
|
+
),
|
|
505
|
+
cast_to=NoneType,
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
class FeaturesResourceWithRawResponse:
|
|
510
|
+
def __init__(self, features: FeaturesResource) -> None:
|
|
511
|
+
self._features = features
|
|
512
|
+
|
|
513
|
+
self.create = to_raw_response_wrapper(
|
|
514
|
+
features.create,
|
|
515
|
+
)
|
|
516
|
+
self.retrieve = to_raw_response_wrapper(
|
|
517
|
+
features.retrieve,
|
|
518
|
+
)
|
|
519
|
+
self.list = to_raw_response_wrapper(
|
|
520
|
+
features.list,
|
|
521
|
+
)
|
|
522
|
+
self.archive = to_raw_response_wrapper(
|
|
523
|
+
features.archive,
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
class AsyncFeaturesResourceWithRawResponse:
|
|
528
|
+
def __init__(self, features: AsyncFeaturesResource) -> None:
|
|
529
|
+
self._features = features
|
|
530
|
+
|
|
531
|
+
self.create = async_to_raw_response_wrapper(
|
|
532
|
+
features.create,
|
|
533
|
+
)
|
|
534
|
+
self.retrieve = async_to_raw_response_wrapper(
|
|
535
|
+
features.retrieve,
|
|
536
|
+
)
|
|
537
|
+
self.list = async_to_raw_response_wrapper(
|
|
538
|
+
features.list,
|
|
539
|
+
)
|
|
540
|
+
self.archive = async_to_raw_response_wrapper(
|
|
541
|
+
features.archive,
|
|
542
|
+
)
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
class FeaturesResourceWithStreamingResponse:
|
|
546
|
+
def __init__(self, features: FeaturesResource) -> None:
|
|
547
|
+
self._features = features
|
|
548
|
+
|
|
549
|
+
self.create = to_streamed_response_wrapper(
|
|
550
|
+
features.create,
|
|
551
|
+
)
|
|
552
|
+
self.retrieve = to_streamed_response_wrapper(
|
|
553
|
+
features.retrieve,
|
|
554
|
+
)
|
|
555
|
+
self.list = to_streamed_response_wrapper(
|
|
556
|
+
features.list,
|
|
557
|
+
)
|
|
558
|
+
self.archive = to_streamed_response_wrapper(
|
|
559
|
+
features.archive,
|
|
560
|
+
)
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
class AsyncFeaturesResourceWithStreamingResponse:
|
|
564
|
+
def __init__(self, features: AsyncFeaturesResource) -> None:
|
|
565
|
+
self._features = features
|
|
566
|
+
|
|
567
|
+
self.create = async_to_streamed_response_wrapper(
|
|
568
|
+
features.create,
|
|
569
|
+
)
|
|
570
|
+
self.retrieve = async_to_streamed_response_wrapper(
|
|
571
|
+
features.retrieve,
|
|
572
|
+
)
|
|
573
|
+
self.list = async_to_streamed_response_wrapper(
|
|
574
|
+
features.list,
|
|
575
|
+
)
|
|
576
|
+
self.archive = async_to_streamed_response_wrapper(
|
|
577
|
+
features.archive,
|
|
578
|
+
)
|