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.

Files changed (132) hide show
  1. openmeter/__init__.py +89 -15
  2. openmeter/_base_client.py +2041 -0
  3. openmeter/_client.py +518 -70
  4. openmeter/_compat.py +221 -0
  5. openmeter/_constants.py +14 -0
  6. openmeter/_exceptions.py +108 -0
  7. openmeter/_files.py +127 -0
  8. openmeter/_models.py +777 -0
  9. openmeter/_qs.py +150 -0
  10. openmeter/_resource.py +43 -0
  11. openmeter/_response.py +820 -0
  12. openmeter/_streaming.py +333 -0
  13. openmeter/_types.py +222 -0
  14. openmeter/_utils/__init__.py +56 -0
  15. openmeter/_utils/_logs.py +25 -0
  16. openmeter/_utils/_proxy.py +63 -0
  17. openmeter/_utils/_reflection.py +42 -0
  18. openmeter/_utils/_streams.py +12 -0
  19. openmeter/_utils/_sync.py +81 -0
  20. openmeter/_utils/_transform.py +387 -0
  21. openmeter/_utils/_typing.py +120 -0
  22. openmeter/_utils/_utils.py +419 -0
  23. openmeter/_version.py +4 -0
  24. openmeter/lib/.keep +4 -0
  25. openmeter/py.typed +0 -1
  26. openmeter/resources/__init__.py +103 -0
  27. openmeter/resources/debug/__init__.py +33 -0
  28. openmeter/resources/debug/debug.py +102 -0
  29. openmeter/resources/debug/metrics.py +146 -0
  30. openmeter/resources/entitlements/__init__.py +47 -0
  31. openmeter/resources/entitlements/entitlements.py +450 -0
  32. openmeter/resources/entitlements/features.py +578 -0
  33. openmeter/resources/entitlements/grants.py +389 -0
  34. openmeter/resources/events.py +442 -0
  35. openmeter/resources/meters/__init__.py +33 -0
  36. openmeter/resources/meters/meters.py +666 -0
  37. openmeter/resources/meters/subjects.py +163 -0
  38. openmeter/resources/notifications/__init__.py +75 -0
  39. openmeter/resources/notifications/channels.py +686 -0
  40. openmeter/resources/notifications/events.py +365 -0
  41. openmeter/resources/notifications/notifications.py +198 -0
  42. openmeter/resources/notifications/rules.py +781 -0
  43. openmeter/resources/notifications/webhook.py +208 -0
  44. openmeter/resources/portal/__init__.py +47 -0
  45. openmeter/resources/portal/meters.py +230 -0
  46. openmeter/resources/portal/portal.py +112 -0
  47. openmeter/resources/portal/tokens.py +359 -0
  48. openmeter/resources/subjects/entitlements/__init__.py +33 -0
  49. openmeter/resources/subjects/entitlements/entitlements.py +1881 -0
  50. openmeter/resources/subjects/entitlements/grants.py +453 -0
  51. openmeter/resources/subjects.py +419 -0
  52. openmeter/types/__init__.py +21 -0
  53. openmeter/types/debug/__init__.py +5 -0
  54. openmeter/types/debug/metric_list_response.py +7 -0
  55. openmeter/types/entitlement.py +238 -0
  56. openmeter/types/entitlements/__init__.py +11 -0
  57. openmeter/types/entitlements/feature.py +61 -0
  58. openmeter/types/entitlements/feature_create_params.py +43 -0
  59. openmeter/types/entitlements/feature_list_params.py +23 -0
  60. openmeter/types/entitlements/grant_list_params.py +57 -0
  61. openmeter/types/entitlements/grant_list_response.py +11 -0
  62. openmeter/types/entitlements/grant_paginated_response.py +24 -0
  63. openmeter/types/entitlements/list_features_result.py +28 -0
  64. openmeter/types/event_ingest_params.py +46 -0
  65. openmeter/types/event_ingest_response.py +43 -0
  66. openmeter/types/event_list_params.py +22 -0
  67. openmeter/types/event_list_response.py +9 -0
  68. openmeter/types/ingested_event.py +59 -0
  69. openmeter/types/list_entitlements_result.py +28 -0
  70. openmeter/types/meter.py +53 -0
  71. openmeter/types/meter_create_params.py +50 -0
  72. openmeter/types/meter_list_response.py +9 -0
  73. openmeter/types/meter_query_params.py +50 -0
  74. openmeter/types/meter_query_result.py +35 -0
  75. openmeter/types/meters/__init__.py +5 -0
  76. openmeter/types/meters/subject_list_response.py +8 -0
  77. openmeter/types/notifications/__init__.py +18 -0
  78. openmeter/types/notifications/channel_create_params.py +34 -0
  79. openmeter/types/notifications/channel_list_params.py +41 -0
  80. openmeter/types/notifications/channel_list_response.py +24 -0
  81. openmeter/types/notifications/channel_update_params.py +34 -0
  82. openmeter/types/notifications/event_list_params.py +61 -0
  83. openmeter/types/notifications/event_list_response.py +24 -0
  84. openmeter/types/notifications/notification_channel.py +47 -0
  85. openmeter/types/notifications/notification_event.py +215 -0
  86. openmeter/types/notifications/notification_rule.py +70 -0
  87. openmeter/types/notifications/rule_create_params.py +39 -0
  88. openmeter/types/notifications/rule_list_params.py +54 -0
  89. openmeter/types/notifications/rule_list_response.py +24 -0
  90. openmeter/types/notifications/rule_update_params.py +39 -0
  91. openmeter/types/notifications/webhook_svix_params.py +26 -0
  92. openmeter/types/portal/__init__.py +10 -0
  93. openmeter/types/portal/meter_query_params.py +44 -0
  94. openmeter/types/portal/portal_token.py +28 -0
  95. openmeter/types/portal/token_create_params.py +17 -0
  96. openmeter/types/portal/token_invalidate_params.py +15 -0
  97. openmeter/types/portal/token_list_params.py +12 -0
  98. openmeter/types/portal/token_list_response.py +9 -0
  99. openmeter/types/shared/__init__.py +3 -0
  100. openmeter/types/subject.py +37 -0
  101. openmeter/types/subject_list_response.py +9 -0
  102. openmeter/types/subject_param.py +27 -0
  103. openmeter/types/subject_upsert_params.py +39 -0
  104. openmeter/types/subject_upsert_response.py +10 -0
  105. openmeter/types/subjects/__init__.py +13 -0
  106. openmeter/types/subjects/entitlement_history_params.py +35 -0
  107. openmeter/types/subjects/entitlement_history_response.py +98 -0
  108. openmeter/types/subjects/entitlement_list_response.py +10 -0
  109. openmeter/types/subjects/entitlements/__init__.py +8 -0
  110. openmeter/types/subjects/entitlements/entitlement_grant.py +103 -0
  111. openmeter/types/subjects/entitlements/grant_list_response.py +10 -0
  112. openmeter-2.0.0.dist-info/METADATA +396 -0
  113. openmeter-2.0.0.dist-info/RECORD +115 -0
  114. {openmeter-1.0.0b53.dist-info → openmeter-2.0.0.dist-info}/WHEEL +1 -1
  115. openmeter-2.0.0.dist-info/licenses/LICENSE +201 -0
  116. openmeter/_configuration.py +0 -36
  117. openmeter/_operations/__init__.py +0 -17
  118. openmeter/_operations/_operations.py +0 -2098
  119. openmeter/_operations/_patch.py +0 -20
  120. openmeter/_patch.py +0 -20
  121. openmeter/_serialization.py +0 -2008
  122. openmeter/_vendor.py +0 -24
  123. openmeter/aio/__init__.py +0 -21
  124. openmeter/aio/_client.py +0 -83
  125. openmeter/aio/_configuration.py +0 -36
  126. openmeter/aio/_operations/__init__.py +0 -17
  127. openmeter/aio/_operations/_operations.py +0 -1771
  128. openmeter/aio/_operations/_patch.py +0 -20
  129. openmeter/aio/_patch.py +0 -20
  130. openmeter/aio/_vendor.py +0 -24
  131. openmeter-1.0.0b53.dist-info/METADATA +0 -92
  132. 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
+ )