authgebra 0.1.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.
- authgebra/__init__.py +92 -0
- authgebra/_core.py +477 -0
- authgebra/_generated/__init__.py +2 -0
- authgebra/_generated/aio.py +1535 -0
- authgebra/_generated/codes.py +29 -0
- authgebra/_generated/models.py +4041 -0
- authgebra/_generated/operations.py +108 -0
- authgebra/_generated/sync.py +1535 -0
- authgebra/_model.py +252 -0
- authgebra/_parse.py +158 -0
- authgebra/_version.py +3 -0
- authgebra/aclient.py +256 -0
- authgebra/client.py +272 -0
- authgebra/config.py +79 -0
- authgebra/errors.py +177 -0
- authgebra/models.py +263 -0
- authgebra/py.typed +0 -0
- authgebra-0.1.0.dist-info/METADATA +181 -0
- authgebra-0.1.0.dist-info/RECORD +22 -0
- authgebra-0.1.0.dist-info/WHEEL +5 -0
- authgebra-0.1.0.dist-info/licenses/LICENSE +42 -0
- authgebra-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1535 @@
|
|
|
1
|
+
"""GENERATED by tools/generate.py from sdks/contracts/openapi.json - do not edit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Mapping
|
|
6
|
+
|
|
7
|
+
from .._core import AsyncRequester
|
|
8
|
+
from .._core import path_with as _path
|
|
9
|
+
from .._model import request_body, typed_result
|
|
10
|
+
from . import models
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AttributesApi:
|
|
14
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
15
|
+
self._c = client
|
|
16
|
+
|
|
17
|
+
async def attributes_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.AttributesStatsResponse:
|
|
18
|
+
"""属性定义计数。
|
|
19
|
+
|
|
20
|
+
``GET /api/v1/attributes/stats``
|
|
21
|
+
"""
|
|
22
|
+
_sdk_result = await self._c.request(
|
|
23
|
+
"GET",
|
|
24
|
+
"/api/v1/attributes/stats",
|
|
25
|
+
request_id=request_id,
|
|
26
|
+
traceparent=traceparent,
|
|
27
|
+
)
|
|
28
|
+
return typed_result(_sdk_result, models.AttributesStatsResponse, '#/components/schemas/ApiResponse_AttributesStatsDto/properties/data')
|
|
29
|
+
|
|
30
|
+
async def create_attribute(self, *, body: models.CreateAttributeRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateAttributeResponse:
|
|
31
|
+
"""create attribute
|
|
32
|
+
|
|
33
|
+
``POST /api/v1/attributes``
|
|
34
|
+
"""
|
|
35
|
+
_sdk_result = await self._c.request(
|
|
36
|
+
"POST",
|
|
37
|
+
"/api/v1/attributes",
|
|
38
|
+
json=request_body(body),
|
|
39
|
+
idempotency_key=idempotency_key,
|
|
40
|
+
request_id=request_id,
|
|
41
|
+
traceparent=traceparent,
|
|
42
|
+
)
|
|
43
|
+
return typed_result(_sdk_result, models.CreateAttributeResponse, '#/components/schemas/ApiResponse_AttributeDto/properties/data')
|
|
44
|
+
|
|
45
|
+
async def delete_attribute(self, id: str, *, if_match: str, request_id: str | None = None, traceparent: str | None = None) -> models.DeleteAttributeResponse:
|
|
46
|
+
"""delete attribute
|
|
47
|
+
|
|
48
|
+
``DELETE /api/v1/attributes/{id}``
|
|
49
|
+
"""
|
|
50
|
+
_sdk_result = await self._c.request(
|
|
51
|
+
"DELETE",
|
|
52
|
+
_path("/api/v1/attributes/{id}", id=id),
|
|
53
|
+
if_match=if_match,
|
|
54
|
+
request_id=request_id,
|
|
55
|
+
traceparent=traceparent,
|
|
56
|
+
)
|
|
57
|
+
return typed_result(_sdk_result, models.DeleteAttributeResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
58
|
+
|
|
59
|
+
async def get_attribute(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetAttributeResponse:
|
|
60
|
+
"""get attribute
|
|
61
|
+
|
|
62
|
+
``GET /api/v1/attributes/{id}``
|
|
63
|
+
"""
|
|
64
|
+
_sdk_result = await self._c.request(
|
|
65
|
+
"GET",
|
|
66
|
+
_path("/api/v1/attributes/{id}", id=id),
|
|
67
|
+
request_id=request_id,
|
|
68
|
+
traceparent=traceparent,
|
|
69
|
+
)
|
|
70
|
+
return typed_result(_sdk_result, models.GetAttributeResponse, '#/components/schemas/ApiResponse_AttributeDto/properties/data')
|
|
71
|
+
|
|
72
|
+
async def get_user_attributes(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetUserAttributesResponse:
|
|
73
|
+
"""get user attributes
|
|
74
|
+
|
|
75
|
+
``GET /api/v1/users/{id}/attributes``
|
|
76
|
+
"""
|
|
77
|
+
_sdk_result = await self._c.request(
|
|
78
|
+
"GET",
|
|
79
|
+
_path("/api/v1/users/{id}/attributes", id=id),
|
|
80
|
+
request_id=request_id,
|
|
81
|
+
traceparent=traceparent,
|
|
82
|
+
)
|
|
83
|
+
return typed_result(_sdk_result, models.GetUserAttributesResponse, '#/components/schemas/ApiResponse_AttributesDto/properties/data')
|
|
84
|
+
|
|
85
|
+
async def list_attributes(self, *, cursor: str | None = None, limit: int | None = None, owner_type: str | None = None, value_type: str | None = None, q: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListAttributesResponse:
|
|
86
|
+
"""list attributes
|
|
87
|
+
|
|
88
|
+
``GET /api/v1/attributes``
|
|
89
|
+
"""
|
|
90
|
+
_sdk_result = await self._c.request(
|
|
91
|
+
"GET",
|
|
92
|
+
"/api/v1/attributes",
|
|
93
|
+
query={"cursor": cursor, "limit": limit, "owner_type": owner_type, "value_type": value_type, "q": q},
|
|
94
|
+
request_id=request_id,
|
|
95
|
+
traceparent=traceparent,
|
|
96
|
+
)
|
|
97
|
+
return typed_result(_sdk_result, models.ListAttributesResponse, '#/components/schemas/PagedResponse_AttributeDto/properties/data')
|
|
98
|
+
|
|
99
|
+
async def patch_attribute(self, id: str, *, if_match: str, body: models.PatchAttributeRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PatchAttributeResponse:
|
|
100
|
+
"""patch attribute
|
|
101
|
+
|
|
102
|
+
``PATCH /api/v1/attributes/{id}``
|
|
103
|
+
"""
|
|
104
|
+
_sdk_result = await self._c.request(
|
|
105
|
+
"PATCH",
|
|
106
|
+
_path("/api/v1/attributes/{id}", id=id),
|
|
107
|
+
json=request_body(body),
|
|
108
|
+
if_match=if_match,
|
|
109
|
+
idempotency_key=idempotency_key,
|
|
110
|
+
request_id=request_id,
|
|
111
|
+
traceparent=traceparent,
|
|
112
|
+
)
|
|
113
|
+
return typed_result(_sdk_result, models.PatchAttributeResponse, '#/components/schemas/ApiResponse_AttributeDto/properties/data')
|
|
114
|
+
|
|
115
|
+
async def replace_user_attributes(self, id: str, *, if_match: str, body: models.ReplaceAttributesRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ReplaceUserAttributesResponse:
|
|
116
|
+
"""replace user attributes
|
|
117
|
+
|
|
118
|
+
``PUT /api/v1/users/{id}/attributes``
|
|
119
|
+
"""
|
|
120
|
+
_sdk_result = await self._c.request(
|
|
121
|
+
"PUT",
|
|
122
|
+
_path("/api/v1/users/{id}/attributes", id=id),
|
|
123
|
+
json=request_body(body),
|
|
124
|
+
if_match=if_match,
|
|
125
|
+
idempotency_key=idempotency_key,
|
|
126
|
+
request_id=request_id,
|
|
127
|
+
traceparent=traceparent,
|
|
128
|
+
)
|
|
129
|
+
return typed_result(_sdk_result, models.ReplaceUserAttributesResponse, '#/components/schemas/ApiResponse_AttributesDto/properties/data')
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class AuditApi:
|
|
133
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
134
|
+
self._c = client
|
|
135
|
+
|
|
136
|
+
async def audit_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.AuditStatsResponse:
|
|
137
|
+
"""审计今日计数。
|
|
138
|
+
|
|
139
|
+
``GET /api/v1/audit/stats``
|
|
140
|
+
"""
|
|
141
|
+
_sdk_result = await self._c.request(
|
|
142
|
+
"GET",
|
|
143
|
+
"/api/v1/audit/stats",
|
|
144
|
+
request_id=request_id,
|
|
145
|
+
traceparent=traceparent,
|
|
146
|
+
)
|
|
147
|
+
return typed_result(_sdk_result, models.AuditStatsResponse, '#/components/schemas/ApiResponse_AuditStatsDto/properties/data')
|
|
148
|
+
|
|
149
|
+
async def list_audit_events(self, *, cursor: str | None = None, limit: int | None = None, actor_user_id: str | None = None, action: str | None = None, target_type: str | None = None, target_id: str | None = None, result: str | None = None, from_: str | None = None, to: str | None = None, query_request_id: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListAuditEventsResponse:
|
|
150
|
+
"""查询审计事件(分页、可筛选、metadata 已脱敏)。
|
|
151
|
+
|
|
152
|
+
``GET /api/v1/audit``
|
|
153
|
+
"""
|
|
154
|
+
_sdk_result = await self._c.request(
|
|
155
|
+
"GET",
|
|
156
|
+
"/api/v1/audit",
|
|
157
|
+
query={"cursor": cursor, "limit": limit, "actor_user_id": actor_user_id, "action": action, "target_type": target_type, "target_id": target_id, "result": result, "from": from_, "to": to, "request_id": query_request_id},
|
|
158
|
+
request_id=request_id,
|
|
159
|
+
traceparent=traceparent,
|
|
160
|
+
)
|
|
161
|
+
return typed_result(_sdk_result, models.ListAuditEventsResponse, '#/components/schemas/PagedResponse_AuditEventDto/properties/data')
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class AuthApi:
|
|
165
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
166
|
+
self._c = client
|
|
167
|
+
|
|
168
|
+
async def change_password(self, *, body: models.ChangePasswordRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.ChangePasswordResponse:
|
|
169
|
+
"""change password
|
|
170
|
+
|
|
171
|
+
``POST /api/v1/auth/change-password``
|
|
172
|
+
"""
|
|
173
|
+
_sdk_result = await self._c.request(
|
|
174
|
+
"POST",
|
|
175
|
+
"/api/v1/auth/change-password",
|
|
176
|
+
json=request_body(body),
|
|
177
|
+
request_id=request_id,
|
|
178
|
+
traceparent=traceparent,
|
|
179
|
+
)
|
|
180
|
+
return typed_result(_sdk_result, models.ChangePasswordResponse, '#/components/schemas/ApiResponse_AuthOkDto/properties/data')
|
|
181
|
+
|
|
182
|
+
async def list_sessions(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.ListSessionsResponse:
|
|
183
|
+
"""list sessions
|
|
184
|
+
|
|
185
|
+
``GET /api/v1/auth/sessions``
|
|
186
|
+
"""
|
|
187
|
+
_sdk_result = await self._c.request(
|
|
188
|
+
"GET",
|
|
189
|
+
"/api/v1/auth/sessions",
|
|
190
|
+
request_id=request_id,
|
|
191
|
+
traceparent=traceparent,
|
|
192
|
+
)
|
|
193
|
+
return typed_result(_sdk_result, models.ListSessionsResponse, '#/components/schemas/ApiResponse_Vec_SessionDto/properties/data')
|
|
194
|
+
|
|
195
|
+
async def login(self, *, body: models.LoginRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.LoginOperationResponse:
|
|
196
|
+
"""login
|
|
197
|
+
|
|
198
|
+
``POST /api/v1/auth/login``
|
|
199
|
+
"""
|
|
200
|
+
_sdk_result = await self._c.request(
|
|
201
|
+
"POST",
|
|
202
|
+
"/api/v1/auth/login",
|
|
203
|
+
json=request_body(body),
|
|
204
|
+
request_id=request_id,
|
|
205
|
+
traceparent=traceparent,
|
|
206
|
+
)
|
|
207
|
+
return typed_result(_sdk_result, models.LoginOperationResponse, '#/components/schemas/ApiResponse_LoginResponse/properties/data')
|
|
208
|
+
|
|
209
|
+
async def logout(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.LogoutResponse:
|
|
210
|
+
"""logout
|
|
211
|
+
|
|
212
|
+
``POST /api/v1/auth/logout``
|
|
213
|
+
"""
|
|
214
|
+
_sdk_result = await self._c.request(
|
|
215
|
+
"POST",
|
|
216
|
+
"/api/v1/auth/logout",
|
|
217
|
+
request_id=request_id,
|
|
218
|
+
traceparent=traceparent,
|
|
219
|
+
)
|
|
220
|
+
return typed_result(_sdk_result, models.LogoutResponse, '#/components/schemas/ApiResponse_AuthOkDto/properties/data')
|
|
221
|
+
|
|
222
|
+
async def logout_all(self, *, body: models.LogoutAllRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.LogoutAllResponse:
|
|
223
|
+
"""logout all
|
|
224
|
+
|
|
225
|
+
``POST /api/v1/auth/logout-all``
|
|
226
|
+
"""
|
|
227
|
+
_sdk_result = await self._c.request(
|
|
228
|
+
"POST",
|
|
229
|
+
"/api/v1/auth/logout-all",
|
|
230
|
+
json=request_body(body),
|
|
231
|
+
request_id=request_id,
|
|
232
|
+
traceparent=traceparent,
|
|
233
|
+
)
|
|
234
|
+
return typed_result(_sdk_result, models.LogoutAllResponse, '#/components/schemas/ApiResponse_AuthOkDto/properties/data')
|
|
235
|
+
|
|
236
|
+
async def me(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.MeOperationResponse:
|
|
237
|
+
"""me
|
|
238
|
+
|
|
239
|
+
``GET /api/v1/auth/me``
|
|
240
|
+
"""
|
|
241
|
+
_sdk_result = await self._c.request(
|
|
242
|
+
"GET",
|
|
243
|
+
"/api/v1/auth/me",
|
|
244
|
+
request_id=request_id,
|
|
245
|
+
traceparent=traceparent,
|
|
246
|
+
)
|
|
247
|
+
return typed_result(_sdk_result, models.MeOperationResponse, '#/components/schemas/ApiResponse_MeResponse/properties/data')
|
|
248
|
+
|
|
249
|
+
async def mfa_disable(self, *, body: models.MfaDisableRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaDisableResponse:
|
|
250
|
+
"""mfa disable
|
|
251
|
+
|
|
252
|
+
``DELETE /api/v1/auth/mfa``
|
|
253
|
+
"""
|
|
254
|
+
_sdk_result = await self._c.request(
|
|
255
|
+
"DELETE",
|
|
256
|
+
"/api/v1/auth/mfa",
|
|
257
|
+
json=request_body(body),
|
|
258
|
+
request_id=request_id,
|
|
259
|
+
traceparent=traceparent,
|
|
260
|
+
)
|
|
261
|
+
return typed_result(_sdk_result, models.MfaDisableResponse, '#/components/schemas/ApiResponse_AuthOkDto/properties/data')
|
|
262
|
+
|
|
263
|
+
async def mfa_enroll(self, *, body: models.MfaEnrollRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaEnrollOperationResponse:
|
|
264
|
+
"""mfa enroll
|
|
265
|
+
|
|
266
|
+
``POST /api/v1/auth/mfa/enroll``
|
|
267
|
+
"""
|
|
268
|
+
_sdk_result = await self._c.request(
|
|
269
|
+
"POST",
|
|
270
|
+
"/api/v1/auth/mfa/enroll",
|
|
271
|
+
json=request_body(body),
|
|
272
|
+
request_id=request_id,
|
|
273
|
+
traceparent=traceparent,
|
|
274
|
+
)
|
|
275
|
+
return typed_result(_sdk_result, models.MfaEnrollOperationResponse, '#/components/schemas/ApiResponse_MfaEnrollResponse/properties/data')
|
|
276
|
+
|
|
277
|
+
async def mfa_enroll_verify(self, *, body: models.MfaEnrollVerifyRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaEnrollVerifyResponse:
|
|
278
|
+
"""mfa enroll verify
|
|
279
|
+
|
|
280
|
+
``POST /api/v1/auth/mfa/enroll/verify``
|
|
281
|
+
"""
|
|
282
|
+
_sdk_result = await self._c.request(
|
|
283
|
+
"POST",
|
|
284
|
+
"/api/v1/auth/mfa/enroll/verify",
|
|
285
|
+
json=request_body(body),
|
|
286
|
+
request_id=request_id,
|
|
287
|
+
traceparent=traceparent,
|
|
288
|
+
)
|
|
289
|
+
return typed_result(_sdk_result, models.MfaEnrollVerifyResponse, '#/components/schemas/ApiResponse_MfaRecoveryCodesResponse/properties/data')
|
|
290
|
+
|
|
291
|
+
async def mfa_enrollment_start(self, *, body: models.EnrollmentStartRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaEnrollmentStartResponse:
|
|
292
|
+
"""mfa enrollment start
|
|
293
|
+
|
|
294
|
+
``POST /api/v1/auth/mfa/enrollment/start``
|
|
295
|
+
"""
|
|
296
|
+
_sdk_result = await self._c.request(
|
|
297
|
+
"POST",
|
|
298
|
+
"/api/v1/auth/mfa/enrollment/start",
|
|
299
|
+
json=request_body(body),
|
|
300
|
+
request_id=request_id,
|
|
301
|
+
traceparent=traceparent,
|
|
302
|
+
)
|
|
303
|
+
return typed_result(_sdk_result, models.MfaEnrollmentStartResponse, '#/components/schemas/ApiResponse_EnrollmentStartResponse/properties/data')
|
|
304
|
+
|
|
305
|
+
async def mfa_enrollment_verify(self, *, body: models.EnrollmentVerifyRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaEnrollmentVerifyResponse:
|
|
306
|
+
"""mfa enrollment verify
|
|
307
|
+
|
|
308
|
+
``POST /api/v1/auth/mfa/enrollment/verify``
|
|
309
|
+
"""
|
|
310
|
+
_sdk_result = await self._c.request(
|
|
311
|
+
"POST",
|
|
312
|
+
"/api/v1/auth/mfa/enrollment/verify",
|
|
313
|
+
json=request_body(body),
|
|
314
|
+
request_id=request_id,
|
|
315
|
+
traceparent=traceparent,
|
|
316
|
+
)
|
|
317
|
+
return typed_result(_sdk_result, models.MfaEnrollmentVerifyResponse, '#/components/schemas/ApiResponse_EnrollmentVerifyResponse/properties/data')
|
|
318
|
+
|
|
319
|
+
async def mfa_recovery(self, *, body: models.MfaRecoveryRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaRecoveryResponse:
|
|
320
|
+
"""mfa recovery
|
|
321
|
+
|
|
322
|
+
``POST /api/v1/auth/mfa/recovery``
|
|
323
|
+
"""
|
|
324
|
+
_sdk_result = await self._c.request(
|
|
325
|
+
"POST",
|
|
326
|
+
"/api/v1/auth/mfa/recovery",
|
|
327
|
+
json=request_body(body),
|
|
328
|
+
request_id=request_id,
|
|
329
|
+
traceparent=traceparent,
|
|
330
|
+
)
|
|
331
|
+
return typed_result(_sdk_result, models.MfaRecoveryResponse, '#/components/schemas/ApiResponse_TokenPair/properties/data')
|
|
332
|
+
|
|
333
|
+
async def mfa_regenerate_recovery_codes(self, *, body: models.MfaRegenerateRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaRegenerateRecoveryCodesResponse:
|
|
334
|
+
"""mfa regenerate recovery codes
|
|
335
|
+
|
|
336
|
+
``POST /api/v1/auth/mfa/recovery-codes/regenerate``
|
|
337
|
+
"""
|
|
338
|
+
_sdk_result = await self._c.request(
|
|
339
|
+
"POST",
|
|
340
|
+
"/api/v1/auth/mfa/recovery-codes/regenerate",
|
|
341
|
+
json=request_body(body),
|
|
342
|
+
request_id=request_id,
|
|
343
|
+
traceparent=traceparent,
|
|
344
|
+
)
|
|
345
|
+
return typed_result(_sdk_result, models.MfaRegenerateRecoveryCodesResponse, '#/components/schemas/ApiResponse_MfaRecoveryCodesResponse/properties/data')
|
|
346
|
+
|
|
347
|
+
async def mfa_status(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.MfaStatusOperationResponse:
|
|
348
|
+
"""mfa status
|
|
349
|
+
|
|
350
|
+
``GET /api/v1/auth/mfa/status``
|
|
351
|
+
"""
|
|
352
|
+
_sdk_result = await self._c.request(
|
|
353
|
+
"GET",
|
|
354
|
+
"/api/v1/auth/mfa/status",
|
|
355
|
+
request_id=request_id,
|
|
356
|
+
traceparent=traceparent,
|
|
357
|
+
)
|
|
358
|
+
return typed_result(_sdk_result, models.MfaStatusOperationResponse, '#/components/schemas/ApiResponse_MfaStatusResponse/properties/data')
|
|
359
|
+
|
|
360
|
+
async def mfa_verify(self, *, body: models.MfaVerifyRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.MfaVerifyResponse:
|
|
361
|
+
"""mfa verify
|
|
362
|
+
|
|
363
|
+
``POST /api/v1/auth/mfa/verify``
|
|
364
|
+
"""
|
|
365
|
+
_sdk_result = await self._c.request(
|
|
366
|
+
"POST",
|
|
367
|
+
"/api/v1/auth/mfa/verify",
|
|
368
|
+
json=request_body(body),
|
|
369
|
+
request_id=request_id,
|
|
370
|
+
traceparent=traceparent,
|
|
371
|
+
)
|
|
372
|
+
return typed_result(_sdk_result, models.MfaVerifyResponse, '#/components/schemas/ApiResponse_TokenPair/properties/data')
|
|
373
|
+
|
|
374
|
+
async def refresh(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.RefreshResponse:
|
|
375
|
+
"""refresh
|
|
376
|
+
|
|
377
|
+
``POST /api/v1/auth/refresh``
|
|
378
|
+
"""
|
|
379
|
+
_sdk_result = await self._c.request(
|
|
380
|
+
"POST",
|
|
381
|
+
"/api/v1/auth/refresh",
|
|
382
|
+
request_id=request_id,
|
|
383
|
+
traceparent=traceparent,
|
|
384
|
+
)
|
|
385
|
+
return typed_result(_sdk_result, models.RefreshResponse, '#/components/schemas/ApiResponse_TokenPair/properties/data')
|
|
386
|
+
|
|
387
|
+
async def revoke_session(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.RevokeSessionResponse:
|
|
388
|
+
"""revoke session
|
|
389
|
+
|
|
390
|
+
``DELETE /api/v1/auth/sessions/{id}``
|
|
391
|
+
"""
|
|
392
|
+
_sdk_result = await self._c.request(
|
|
393
|
+
"DELETE",
|
|
394
|
+
_path("/api/v1/auth/sessions/{id}", id=id),
|
|
395
|
+
request_id=request_id,
|
|
396
|
+
traceparent=traceparent,
|
|
397
|
+
)
|
|
398
|
+
return typed_result(_sdk_result, models.RevokeSessionResponse, '#/components/schemas/ApiResponse_AuthOkDto/properties/data')
|
|
399
|
+
|
|
400
|
+
|
|
401
|
+
class AuthzApi:
|
|
402
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
403
|
+
self._c = client
|
|
404
|
+
|
|
405
|
+
async def batch_check(self, *, body: models.BatchCheckRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.BatchCheckOperationResponse:
|
|
406
|
+
"""batch check
|
|
407
|
+
|
|
408
|
+
``POST /api/v1/authz/batch-check``
|
|
409
|
+
"""
|
|
410
|
+
_sdk_result = await self._c.request(
|
|
411
|
+
"POST",
|
|
412
|
+
"/api/v1/authz/batch-check",
|
|
413
|
+
json=request_body(body),
|
|
414
|
+
request_id=request_id,
|
|
415
|
+
traceparent=traceparent,
|
|
416
|
+
)
|
|
417
|
+
return typed_result(_sdk_result, models.BatchCheckOperationResponse, '#/components/schemas/ApiResponse_BatchCheckResponse/properties/data')
|
|
418
|
+
|
|
419
|
+
async def check(self, *, body: models.CheckRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.CheckOperationResponse:
|
|
420
|
+
"""check
|
|
421
|
+
|
|
422
|
+
``POST /api/v1/authz/check``
|
|
423
|
+
"""
|
|
424
|
+
_sdk_result = await self._c.request(
|
|
425
|
+
"POST",
|
|
426
|
+
"/api/v1/authz/check",
|
|
427
|
+
json=request_body(body),
|
|
428
|
+
request_id=request_id,
|
|
429
|
+
traceparent=traceparent,
|
|
430
|
+
)
|
|
431
|
+
return typed_result(_sdk_result, models.CheckOperationResponse, '#/components/schemas/ApiResponse_CheckResponse/properties/data')
|
|
432
|
+
|
|
433
|
+
async def explain(self, *, body: models.ExplainRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.ExplainOperationResponse:
|
|
434
|
+
"""explain
|
|
435
|
+
|
|
436
|
+
``POST /api/v1/authz/explain``
|
|
437
|
+
"""
|
|
438
|
+
_sdk_result = await self._c.request(
|
|
439
|
+
"POST",
|
|
440
|
+
"/api/v1/authz/explain",
|
|
441
|
+
json=request_body(body),
|
|
442
|
+
request_id=request_id,
|
|
443
|
+
traceparent=traceparent,
|
|
444
|
+
)
|
|
445
|
+
return typed_result(_sdk_result, models.ExplainOperationResponse, '#/components/schemas/ApiResponse_ExplainResponse/properties/data')
|
|
446
|
+
|
|
447
|
+
async def list_authorized_resources(self, *, body: models.ListResourcesRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.ListAuthorizedResourcesResponse:
|
|
448
|
+
"""list authorized resources
|
|
449
|
+
|
|
450
|
+
``POST /api/v1/authz/list-resources``
|
|
451
|
+
"""
|
|
452
|
+
_sdk_result = await self._c.request(
|
|
453
|
+
"POST",
|
|
454
|
+
"/api/v1/authz/list-resources",
|
|
455
|
+
json=request_body(body),
|
|
456
|
+
request_id=request_id,
|
|
457
|
+
traceparent=traceparent,
|
|
458
|
+
)
|
|
459
|
+
return typed_result(_sdk_result, models.ListAuthorizedResourcesResponse, '#/components/schemas/PagedResponse_AuthzResourceRef/properties/data')
|
|
460
|
+
|
|
461
|
+
async def revision(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.RevisionOperationResponse:
|
|
462
|
+
"""revision
|
|
463
|
+
|
|
464
|
+
``GET /api/v1/authz/revision``
|
|
465
|
+
"""
|
|
466
|
+
_sdk_result = await self._c.request(
|
|
467
|
+
"GET",
|
|
468
|
+
"/api/v1/authz/revision",
|
|
469
|
+
request_id=request_id,
|
|
470
|
+
traceparent=traceparent,
|
|
471
|
+
)
|
|
472
|
+
return typed_result(_sdk_result, models.RevisionOperationResponse, '#/components/schemas/ApiResponse_RevisionResponse/properties/data')
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
class DashboardApi:
|
|
476
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
477
|
+
self._c = client
|
|
478
|
+
|
|
479
|
+
async def dashboard_summary(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.DashboardSummaryResponse:
|
|
480
|
+
"""控制台摘要。
|
|
481
|
+
|
|
482
|
+
``GET /api/v1/dashboard/summary``
|
|
483
|
+
"""
|
|
484
|
+
_sdk_result = await self._c.request(
|
|
485
|
+
"GET",
|
|
486
|
+
"/api/v1/dashboard/summary",
|
|
487
|
+
request_id=request_id,
|
|
488
|
+
traceparent=traceparent,
|
|
489
|
+
)
|
|
490
|
+
return typed_result(_sdk_result, models.DashboardSummaryResponse, '#/components/schemas/ApiResponse_DashboardSummaryDto/properties/data')
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
class HealthApi:
|
|
494
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
495
|
+
self._c = client
|
|
496
|
+
|
|
497
|
+
async def live(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.LiveOperationResponse:
|
|
498
|
+
"""`GET /health/live`:只证明进程可响应,不触碰数据库。
|
|
499
|
+
|
|
500
|
+
``GET /health/live``
|
|
501
|
+
"""
|
|
502
|
+
_sdk_result = await self._c.request(
|
|
503
|
+
"GET",
|
|
504
|
+
"/health/live",
|
|
505
|
+
request_id=request_id,
|
|
506
|
+
traceparent=traceparent,
|
|
507
|
+
envelope=False,
|
|
508
|
+
)
|
|
509
|
+
return typed_result(_sdk_result, models.LiveOperationResponse, '#/components/schemas/LiveResponse')
|
|
510
|
+
|
|
511
|
+
async def ready(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.ReadyOperationResponse:
|
|
512
|
+
"""`GET /health/ready`:全部检查通过才 200,否则 503 + `NOT_READY`。
|
|
513
|
+
|
|
514
|
+
``GET /health/ready``
|
|
515
|
+
"""
|
|
516
|
+
_sdk_result = await self._c.request(
|
|
517
|
+
"GET",
|
|
518
|
+
"/health/ready",
|
|
519
|
+
request_id=request_id,
|
|
520
|
+
traceparent=traceparent,
|
|
521
|
+
envelope=False,
|
|
522
|
+
)
|
|
523
|
+
return typed_result(_sdk_result, models.ReadyOperationResponse, '#/components/schemas/ReadyResponse')
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
class PermissionsApi:
|
|
527
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
528
|
+
self._c = client
|
|
529
|
+
|
|
530
|
+
async def create_permission(self, *, body: models.CreatePermissionRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreatePermissionResponse:
|
|
531
|
+
"""创建权限点(`code` 由服务端按 `resource_type:action` 生成)。
|
|
532
|
+
|
|
533
|
+
``POST /api/v1/permissions``
|
|
534
|
+
"""
|
|
535
|
+
_sdk_result = await self._c.request(
|
|
536
|
+
"POST",
|
|
537
|
+
"/api/v1/permissions",
|
|
538
|
+
json=request_body(body),
|
|
539
|
+
idempotency_key=idempotency_key,
|
|
540
|
+
request_id=request_id,
|
|
541
|
+
traceparent=traceparent,
|
|
542
|
+
)
|
|
543
|
+
return typed_result(_sdk_result, models.CreatePermissionResponse, '#/components/schemas/ApiResponse_PermissionDto/properties/data')
|
|
544
|
+
|
|
545
|
+
async def deprecate_permission(self, id: str, *, if_match: str, idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.DeprecatePermissionResponse:
|
|
546
|
+
"""弃用权限点(阻止新引用;不物理删除)。
|
|
547
|
+
|
|
548
|
+
``POST /api/v1/permissions/{id}/deprecate``
|
|
549
|
+
"""
|
|
550
|
+
_sdk_result = await self._c.request(
|
|
551
|
+
"POST",
|
|
552
|
+
_path("/api/v1/permissions/{id}/deprecate", id=id),
|
|
553
|
+
if_match=if_match,
|
|
554
|
+
idempotency_key=idempotency_key,
|
|
555
|
+
request_id=request_id,
|
|
556
|
+
traceparent=traceparent,
|
|
557
|
+
)
|
|
558
|
+
return typed_result(_sdk_result, models.DeprecatePermissionResponse, '#/components/schemas/ApiResponse_PermissionDto/properties/data')
|
|
559
|
+
|
|
560
|
+
async def get_permission(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetPermissionResponse:
|
|
561
|
+
"""权限点详情(含引用计数)。
|
|
562
|
+
|
|
563
|
+
``GET /api/v1/permissions/{id}``
|
|
564
|
+
"""
|
|
565
|
+
_sdk_result = await self._c.request(
|
|
566
|
+
"GET",
|
|
567
|
+
_path("/api/v1/permissions/{id}", id=id),
|
|
568
|
+
request_id=request_id,
|
|
569
|
+
traceparent=traceparent,
|
|
570
|
+
)
|
|
571
|
+
return typed_result(_sdk_result, models.GetPermissionResponse, '#/components/schemas/ApiResponse_PermissionDto/properties/data')
|
|
572
|
+
|
|
573
|
+
async def list_permissions(self, *, cursor: str | None = None, limit: int | None = None, resource_type: str | None = None, action: str | None = None, q: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListPermissionsResponse:
|
|
574
|
+
"""权限点分页。
|
|
575
|
+
|
|
576
|
+
``GET /api/v1/permissions``
|
|
577
|
+
"""
|
|
578
|
+
_sdk_result = await self._c.request(
|
|
579
|
+
"GET",
|
|
580
|
+
"/api/v1/permissions",
|
|
581
|
+
query={"cursor": cursor, "limit": limit, "resource_type": resource_type, "action": action, "q": q},
|
|
582
|
+
request_id=request_id,
|
|
583
|
+
traceparent=traceparent,
|
|
584
|
+
)
|
|
585
|
+
return typed_result(_sdk_result, models.ListPermissionsResponse, '#/components/schemas/PagedResponse_PermissionDto/properties/data')
|
|
586
|
+
|
|
587
|
+
async def undeprecate_permission(self, id: str, *, if_match: str, idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.UndeprecatePermissionResponse:
|
|
588
|
+
"""取消弃用权限点(允许新增引用;保留既有引用)。
|
|
589
|
+
|
|
590
|
+
``POST /api/v1/permissions/{id}/undeprecate``
|
|
591
|
+
"""
|
|
592
|
+
_sdk_result = await self._c.request(
|
|
593
|
+
"POST",
|
|
594
|
+
_path("/api/v1/permissions/{id}/undeprecate", id=id),
|
|
595
|
+
if_match=if_match,
|
|
596
|
+
idempotency_key=idempotency_key,
|
|
597
|
+
request_id=request_id,
|
|
598
|
+
traceparent=traceparent,
|
|
599
|
+
)
|
|
600
|
+
return typed_result(_sdk_result, models.UndeprecatePermissionResponse, '#/components/schemas/ApiResponse_PermissionDto/properties/data')
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
class PoliciesApi:
|
|
604
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
605
|
+
self._c = client
|
|
606
|
+
|
|
607
|
+
async def compile_preview(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.CompilePreviewResponse:
|
|
608
|
+
"""compile preview
|
|
609
|
+
|
|
610
|
+
``POST /api/v1/policies/{id}/compile-preview``
|
|
611
|
+
"""
|
|
612
|
+
_sdk_result = await self._c.request(
|
|
613
|
+
"POST",
|
|
614
|
+
_path("/api/v1/policies/{id}/compile-preview", id=id),
|
|
615
|
+
request_id=request_id,
|
|
616
|
+
traceparent=traceparent,
|
|
617
|
+
)
|
|
618
|
+
return typed_result(_sdk_result, models.CompilePreviewResponse, '#/components/schemas/ApiResponse_CompilePreviewDto/properties/data')
|
|
619
|
+
|
|
620
|
+
async def create_policy(self, *, body: models.CreatePolicyRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreatePolicyResponse:
|
|
621
|
+
"""create policy
|
|
622
|
+
|
|
623
|
+
``POST /api/v1/policies``
|
|
624
|
+
"""
|
|
625
|
+
_sdk_result = await self._c.request(
|
|
626
|
+
"POST",
|
|
627
|
+
"/api/v1/policies",
|
|
628
|
+
json=request_body(body),
|
|
629
|
+
idempotency_key=idempotency_key,
|
|
630
|
+
request_id=request_id,
|
|
631
|
+
traceparent=traceparent,
|
|
632
|
+
)
|
|
633
|
+
return typed_result(_sdk_result, models.CreatePolicyResponse, '#/components/schemas/ApiResponse_PolicyDetailDto/properties/data')
|
|
634
|
+
|
|
635
|
+
async def delete_policy(self, id: str, *, if_match: str, idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.DeletePolicyResponse:
|
|
636
|
+
"""delete policy
|
|
637
|
+
|
|
638
|
+
``DELETE /api/v1/policies/{id}``
|
|
639
|
+
"""
|
|
640
|
+
_sdk_result = await self._c.request(
|
|
641
|
+
"DELETE",
|
|
642
|
+
_path("/api/v1/policies/{id}", id=id),
|
|
643
|
+
if_match=if_match,
|
|
644
|
+
idempotency_key=idempotency_key,
|
|
645
|
+
request_id=request_id,
|
|
646
|
+
traceparent=traceparent,
|
|
647
|
+
)
|
|
648
|
+
return typed_result(_sdk_result, models.DeletePolicyResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
649
|
+
|
|
650
|
+
async def disable_policy(self, id: str, *, if_match: str, idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.DisablePolicyResponse:
|
|
651
|
+
"""disable policy
|
|
652
|
+
|
|
653
|
+
``POST /api/v1/policies/{id}/disable``
|
|
654
|
+
"""
|
|
655
|
+
_sdk_result = await self._c.request(
|
|
656
|
+
"POST",
|
|
657
|
+
_path("/api/v1/policies/{id}/disable", id=id),
|
|
658
|
+
if_match=if_match,
|
|
659
|
+
idempotency_key=idempotency_key,
|
|
660
|
+
request_id=request_id,
|
|
661
|
+
traceparent=traceparent,
|
|
662
|
+
)
|
|
663
|
+
return typed_result(_sdk_result, models.DisablePolicyResponse, '#/components/schemas/ApiResponse_PolicyDto/properties/data')
|
|
664
|
+
|
|
665
|
+
async def get_policy(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetPolicyResponse:
|
|
666
|
+
"""get policy
|
|
667
|
+
|
|
668
|
+
``GET /api/v1/policies/{id}``
|
|
669
|
+
"""
|
|
670
|
+
_sdk_result = await self._c.request(
|
|
671
|
+
"GET",
|
|
672
|
+
_path("/api/v1/policies/{id}", id=id),
|
|
673
|
+
request_id=request_id,
|
|
674
|
+
traceparent=traceparent,
|
|
675
|
+
)
|
|
676
|
+
return typed_result(_sdk_result, models.GetPolicyResponse, '#/components/schemas/ApiResponse_PolicyDetailDto/properties/data')
|
|
677
|
+
|
|
678
|
+
async def impact_preview(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.ImpactPreviewResponse:
|
|
679
|
+
"""impact preview
|
|
680
|
+
|
|
681
|
+
``POST /api/v1/policies/{id}/impact-preview``
|
|
682
|
+
"""
|
|
683
|
+
_sdk_result = await self._c.request(
|
|
684
|
+
"POST",
|
|
685
|
+
_path("/api/v1/policies/{id}/impact-preview", id=id),
|
|
686
|
+
request_id=request_id,
|
|
687
|
+
traceparent=traceparent,
|
|
688
|
+
)
|
|
689
|
+
return typed_result(_sdk_result, models.ImpactPreviewResponse, '#/components/schemas/ApiResponse_ImpactPreviewDto/properties/data')
|
|
690
|
+
|
|
691
|
+
async def list_policies(self, *, cursor: str | None = None, limit: int | None = None, lifecycle: str | None = None, q: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListPoliciesResponse:
|
|
692
|
+
"""list policies
|
|
693
|
+
|
|
694
|
+
``GET /api/v1/policies``
|
|
695
|
+
"""
|
|
696
|
+
_sdk_result = await self._c.request(
|
|
697
|
+
"GET",
|
|
698
|
+
"/api/v1/policies",
|
|
699
|
+
query={"cursor": cursor, "limit": limit, "lifecycle": lifecycle, "q": q},
|
|
700
|
+
request_id=request_id,
|
|
701
|
+
traceparent=traceparent,
|
|
702
|
+
)
|
|
703
|
+
return typed_result(_sdk_result, models.ListPoliciesResponse, '#/components/schemas/PagedResponse_PolicyDto/properties/data')
|
|
704
|
+
|
|
705
|
+
async def list_policy_tests(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.ListPolicyTestsResponse:
|
|
706
|
+
"""list policy tests
|
|
707
|
+
|
|
708
|
+
``GET /api/v1/policies/{id}/tests``
|
|
709
|
+
"""
|
|
710
|
+
_sdk_result = await self._c.request(
|
|
711
|
+
"GET",
|
|
712
|
+
_path("/api/v1/policies/{id}/tests", id=id),
|
|
713
|
+
request_id=request_id,
|
|
714
|
+
traceparent=traceparent,
|
|
715
|
+
)
|
|
716
|
+
return typed_result(_sdk_result, models.ListPolicyTestsResponse, '#/components/schemas/ApiResponse_Vec_PolicyTestCaseDto/properties/data')
|
|
717
|
+
|
|
718
|
+
async def patch_policy(self, id: str, *, if_match: str, body: models.PatchPolicyRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PatchPolicyResponse:
|
|
719
|
+
"""patch policy
|
|
720
|
+
|
|
721
|
+
``PATCH /api/v1/policies/{id}``
|
|
722
|
+
"""
|
|
723
|
+
_sdk_result = await self._c.request(
|
|
724
|
+
"PATCH",
|
|
725
|
+
_path("/api/v1/policies/{id}", id=id),
|
|
726
|
+
json=request_body(body),
|
|
727
|
+
if_match=if_match,
|
|
728
|
+
idempotency_key=idempotency_key,
|
|
729
|
+
request_id=request_id,
|
|
730
|
+
traceparent=traceparent,
|
|
731
|
+
)
|
|
732
|
+
return typed_result(_sdk_result, models.PatchPolicyResponse, '#/components/schemas/ApiResponse_PolicyDetailDto/properties/data')
|
|
733
|
+
|
|
734
|
+
async def policies_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.PoliciesStatsResponse:
|
|
735
|
+
"""策略计数。
|
|
736
|
+
|
|
737
|
+
``GET /api/v1/policies/stats``
|
|
738
|
+
"""
|
|
739
|
+
_sdk_result = await self._c.request(
|
|
740
|
+
"GET",
|
|
741
|
+
"/api/v1/policies/stats",
|
|
742
|
+
request_id=request_id,
|
|
743
|
+
traceparent=traceparent,
|
|
744
|
+
)
|
|
745
|
+
return typed_result(_sdk_result, models.PoliciesStatsResponse, '#/components/schemas/ApiResponse_PoliciesStatsDto/properties/data')
|
|
746
|
+
|
|
747
|
+
async def publish_policy(self, id: str, *, if_match: str, body: models.PublishPolicyRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PublishPolicyResponse:
|
|
748
|
+
"""publish policy
|
|
749
|
+
|
|
750
|
+
``POST /api/v1/policies/{id}/publish``
|
|
751
|
+
"""
|
|
752
|
+
_sdk_result = await self._c.request(
|
|
753
|
+
"POST",
|
|
754
|
+
_path("/api/v1/policies/{id}/publish", id=id),
|
|
755
|
+
json=request_body(body),
|
|
756
|
+
if_match=if_match,
|
|
757
|
+
idempotency_key=idempotency_key,
|
|
758
|
+
request_id=request_id,
|
|
759
|
+
traceparent=traceparent,
|
|
760
|
+
)
|
|
761
|
+
return typed_result(_sdk_result, models.PublishPolicyResponse, '#/components/schemas/ApiResponse_PublishPolicyResultDto/properties/data')
|
|
762
|
+
|
|
763
|
+
async def upsert_policy_test(self, id: str, *, if_match: str, body: models.UpsertPolicyTestCaseRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.UpsertPolicyTestResponse:
|
|
764
|
+
"""upsert policy test
|
|
765
|
+
|
|
766
|
+
``POST /api/v1/policies/{id}/tests``
|
|
767
|
+
"""
|
|
768
|
+
_sdk_result = await self._c.request(
|
|
769
|
+
"POST",
|
|
770
|
+
_path("/api/v1/policies/{id}/tests", id=id),
|
|
771
|
+
json=request_body(body),
|
|
772
|
+
if_match=if_match,
|
|
773
|
+
idempotency_key=idempotency_key,
|
|
774
|
+
request_id=request_id,
|
|
775
|
+
traceparent=traceparent,
|
|
776
|
+
)
|
|
777
|
+
return typed_result(_sdk_result, models.UpsertPolicyTestResponse, '#/components/schemas/ApiResponse_PolicyTestCaseWriteDto/properties/data')
|
|
778
|
+
|
|
779
|
+
async def validate_expression(self, *, body: models.ValidatePolicyRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.ValidateExpressionResponse:
|
|
780
|
+
"""validate expression
|
|
781
|
+
|
|
782
|
+
``POST /api/v1/policies/validate``
|
|
783
|
+
"""
|
|
784
|
+
_sdk_result = await self._c.request(
|
|
785
|
+
"POST",
|
|
786
|
+
"/api/v1/policies/validate",
|
|
787
|
+
json=request_body(body),
|
|
788
|
+
request_id=request_id,
|
|
789
|
+
traceparent=traceparent,
|
|
790
|
+
)
|
|
791
|
+
return typed_result(_sdk_result, models.ValidateExpressionResponse, '#/components/schemas/ApiResponse_PolicyValidationDto/properties/data')
|
|
792
|
+
|
|
793
|
+
async def validate_policy(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.ValidatePolicyResponse:
|
|
794
|
+
"""validate policy
|
|
795
|
+
|
|
796
|
+
``POST /api/v1/policies/{id}/validate``
|
|
797
|
+
"""
|
|
798
|
+
_sdk_result = await self._c.request(
|
|
799
|
+
"POST",
|
|
800
|
+
_path("/api/v1/policies/{id}/validate", id=id),
|
|
801
|
+
request_id=request_id,
|
|
802
|
+
traceparent=traceparent,
|
|
803
|
+
)
|
|
804
|
+
return typed_result(_sdk_result, models.ValidatePolicyResponse, '#/components/schemas/ApiResponse_PolicyValidationDto/properties/data')
|
|
805
|
+
|
|
806
|
+
|
|
807
|
+
class PolicyBindingsApi:
|
|
808
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
809
|
+
self._c = client
|
|
810
|
+
|
|
811
|
+
async def create_policy_binding(self, *, body: models.CreatePolicyBindingRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreatePolicyBindingResponse:
|
|
812
|
+
"""create policy binding
|
|
813
|
+
|
|
814
|
+
``POST /api/v1/policy-bindings``
|
|
815
|
+
"""
|
|
816
|
+
_sdk_result = await self._c.request(
|
|
817
|
+
"POST",
|
|
818
|
+
"/api/v1/policy-bindings",
|
|
819
|
+
json=request_body(body),
|
|
820
|
+
idempotency_key=idempotency_key,
|
|
821
|
+
request_id=request_id,
|
|
822
|
+
traceparent=traceparent,
|
|
823
|
+
)
|
|
824
|
+
return typed_result(_sdk_result, models.CreatePolicyBindingResponse, '#/components/schemas/ApiResponse_PolicyBindingDto/properties/data')
|
|
825
|
+
|
|
826
|
+
async def delete_policy_binding(self, id: str, *, if_match: str, request_id: str | None = None, traceparent: str | None = None) -> models.DeletePolicyBindingResponse:
|
|
827
|
+
"""delete policy binding
|
|
828
|
+
|
|
829
|
+
``DELETE /api/v1/policy-bindings/{id}``
|
|
830
|
+
"""
|
|
831
|
+
_sdk_result = await self._c.request(
|
|
832
|
+
"DELETE",
|
|
833
|
+
_path("/api/v1/policy-bindings/{id}", id=id),
|
|
834
|
+
if_match=if_match,
|
|
835
|
+
request_id=request_id,
|
|
836
|
+
traceparent=traceparent,
|
|
837
|
+
)
|
|
838
|
+
return typed_result(_sdk_result, models.DeletePolicyBindingResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
839
|
+
|
|
840
|
+
async def list_policy_bindings(self, *, cursor: str | None = None, limit: int | None = None, policy_id: str | None = None, resource_type: str | None = None, permission: str | None = None, enabled: bool | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListPolicyBindingsResponse:
|
|
841
|
+
"""list policy bindings
|
|
842
|
+
|
|
843
|
+
``GET /api/v1/policy-bindings``
|
|
844
|
+
"""
|
|
845
|
+
_sdk_result = await self._c.request(
|
|
846
|
+
"GET",
|
|
847
|
+
"/api/v1/policy-bindings",
|
|
848
|
+
query={"cursor": cursor, "limit": limit, "policy_id": policy_id, "resource_type": resource_type, "permission": permission, "enabled": enabled},
|
|
849
|
+
request_id=request_id,
|
|
850
|
+
traceparent=traceparent,
|
|
851
|
+
)
|
|
852
|
+
return typed_result(_sdk_result, models.ListPolicyBindingsResponse, '#/components/schemas/PagedResponse_PolicyBindingDto/properties/data')
|
|
853
|
+
|
|
854
|
+
async def patch_policy_binding(self, id: str, *, if_match: str, body: models.PatchPolicyBindingRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.PatchPolicyBindingResponse:
|
|
855
|
+
"""patch policy binding
|
|
856
|
+
|
|
857
|
+
``PATCH /api/v1/policy-bindings/{id}``
|
|
858
|
+
"""
|
|
859
|
+
_sdk_result = await self._c.request(
|
|
860
|
+
"PATCH",
|
|
861
|
+
_path("/api/v1/policy-bindings/{id}", id=id),
|
|
862
|
+
json=request_body(body),
|
|
863
|
+
if_match=if_match,
|
|
864
|
+
request_id=request_id,
|
|
865
|
+
traceparent=traceparent,
|
|
866
|
+
)
|
|
867
|
+
return typed_result(_sdk_result, models.PatchPolicyBindingResponse, '#/components/schemas/ApiResponse_PolicyBindingDto/properties/data')
|
|
868
|
+
|
|
869
|
+
async def policy_bindings_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.PolicyBindingsStatsResponse:
|
|
870
|
+
"""Binding 计数。
|
|
871
|
+
|
|
872
|
+
``GET /api/v1/policy-bindings/stats``
|
|
873
|
+
"""
|
|
874
|
+
_sdk_result = await self._c.request(
|
|
875
|
+
"GET",
|
|
876
|
+
"/api/v1/policy-bindings/stats",
|
|
877
|
+
request_id=request_id,
|
|
878
|
+
traceparent=traceparent,
|
|
879
|
+
)
|
|
880
|
+
return typed_result(_sdk_result, models.PolicyBindingsStatsResponse, '#/components/schemas/ApiResponse_BindingsStatsDto/properties/data')
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
class RelationDefinitionsApi:
|
|
884
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
885
|
+
self._c = client
|
|
886
|
+
|
|
887
|
+
async def create_relation_definition(self, *, body: models.CreateRelationDefinitionRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateRelationDefinitionResponse:
|
|
888
|
+
"""create relation definition
|
|
889
|
+
|
|
890
|
+
``POST /api/v1/relation-definitions``
|
|
891
|
+
"""
|
|
892
|
+
_sdk_result = await self._c.request(
|
|
893
|
+
"POST",
|
|
894
|
+
"/api/v1/relation-definitions",
|
|
895
|
+
json=request_body(body),
|
|
896
|
+
idempotency_key=idempotency_key,
|
|
897
|
+
request_id=request_id,
|
|
898
|
+
traceparent=traceparent,
|
|
899
|
+
)
|
|
900
|
+
return typed_result(_sdk_result, models.CreateRelationDefinitionResponse, '#/components/schemas/ApiResponse_RelationDefinitionDto/properties/data')
|
|
901
|
+
|
|
902
|
+
async def delete_relation_definition(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.DeleteRelationDefinitionResponse:
|
|
903
|
+
"""delete relation definition
|
|
904
|
+
|
|
905
|
+
``DELETE /api/v1/relation-definitions/{id}``
|
|
906
|
+
"""
|
|
907
|
+
_sdk_result = await self._c.request(
|
|
908
|
+
"DELETE",
|
|
909
|
+
_path("/api/v1/relation-definitions/{id}", id=id),
|
|
910
|
+
request_id=request_id,
|
|
911
|
+
traceparent=traceparent,
|
|
912
|
+
)
|
|
913
|
+
return typed_result(_sdk_result, models.DeleteRelationDefinitionResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
914
|
+
|
|
915
|
+
async def list_relation_definitions(self, *, cursor: str | None = None, limit: int | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListRelationDefinitionsResponse:
|
|
916
|
+
"""list relation definitions
|
|
917
|
+
|
|
918
|
+
``GET /api/v1/relation-definitions``
|
|
919
|
+
"""
|
|
920
|
+
_sdk_result = await self._c.request(
|
|
921
|
+
"GET",
|
|
922
|
+
"/api/v1/relation-definitions",
|
|
923
|
+
query={"cursor": cursor, "limit": limit},
|
|
924
|
+
request_id=request_id,
|
|
925
|
+
traceparent=traceparent,
|
|
926
|
+
)
|
|
927
|
+
return typed_result(_sdk_result, models.ListRelationDefinitionsResponse, '#/components/schemas/PagedResponse_RelationDefinitionDto/properties/data')
|
|
928
|
+
|
|
929
|
+
|
|
930
|
+
class RelationTuplesApi:
|
|
931
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
932
|
+
self._c = client
|
|
933
|
+
|
|
934
|
+
async def create_relation_tuple(self, *, body: models.CreateRelationTupleRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateRelationTupleResponse:
|
|
935
|
+
"""create relation tuple
|
|
936
|
+
|
|
937
|
+
``POST /api/v1/relation-tuples``
|
|
938
|
+
"""
|
|
939
|
+
_sdk_result = await self._c.request(
|
|
940
|
+
"POST",
|
|
941
|
+
"/api/v1/relation-tuples",
|
|
942
|
+
json=request_body(body),
|
|
943
|
+
idempotency_key=idempotency_key,
|
|
944
|
+
request_id=request_id,
|
|
945
|
+
traceparent=traceparent,
|
|
946
|
+
)
|
|
947
|
+
return typed_result(_sdk_result, models.CreateRelationTupleResponse, '#/components/schemas/ApiResponse_RelationTupleDto/properties/data')
|
|
948
|
+
|
|
949
|
+
async def delete_relation_tuple(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.DeleteRelationTupleResponse:
|
|
950
|
+
"""delete relation tuple
|
|
951
|
+
|
|
952
|
+
``DELETE /api/v1/relation-tuples/{id}``
|
|
953
|
+
"""
|
|
954
|
+
_sdk_result = await self._c.request(
|
|
955
|
+
"DELETE",
|
|
956
|
+
_path("/api/v1/relation-tuples/{id}", id=id),
|
|
957
|
+
request_id=request_id,
|
|
958
|
+
traceparent=traceparent,
|
|
959
|
+
)
|
|
960
|
+
return typed_result(_sdk_result, models.DeleteRelationTupleResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
961
|
+
|
|
962
|
+
async def list_relation_tuples(self, *, subject_type: str | None = None, subject_id: str | None = None, relation: str | None = None, object_type: str | None = None, object_id: str | None = None, cursor: str | None = None, limit: int | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListRelationTuplesResponse:
|
|
963
|
+
"""list relation tuples
|
|
964
|
+
|
|
965
|
+
``GET /api/v1/relation-tuples``
|
|
966
|
+
"""
|
|
967
|
+
_sdk_result = await self._c.request(
|
|
968
|
+
"GET",
|
|
969
|
+
"/api/v1/relation-tuples",
|
|
970
|
+
query={"subject_type": subject_type, "subject_id": subject_id, "relation": relation, "object_type": object_type, "object_id": object_id, "cursor": cursor, "limit": limit},
|
|
971
|
+
request_id=request_id,
|
|
972
|
+
traceparent=traceparent,
|
|
973
|
+
)
|
|
974
|
+
return typed_result(_sdk_result, models.ListRelationTuplesResponse, '#/components/schemas/PagedResponse_RelationTupleDto/properties/data')
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
class ResourceTypesApi:
|
|
978
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
979
|
+
self._c = client
|
|
980
|
+
|
|
981
|
+
async def create_resource_type(self, *, body: models.CreateResourceTypeRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateResourceTypeResponse:
|
|
982
|
+
"""create resource type
|
|
983
|
+
|
|
984
|
+
``POST /api/v1/resource-types``
|
|
985
|
+
"""
|
|
986
|
+
_sdk_result = await self._c.request(
|
|
987
|
+
"POST",
|
|
988
|
+
"/api/v1/resource-types",
|
|
989
|
+
json=request_body(body),
|
|
990
|
+
idempotency_key=idempotency_key,
|
|
991
|
+
request_id=request_id,
|
|
992
|
+
traceparent=traceparent,
|
|
993
|
+
)
|
|
994
|
+
return typed_result(_sdk_result, models.CreateResourceTypeResponse, '#/components/schemas/ApiResponse_ResourceTypeDto/properties/data')
|
|
995
|
+
|
|
996
|
+
async def get_resource_type(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetResourceTypeResponse:
|
|
997
|
+
"""get resource type
|
|
998
|
+
|
|
999
|
+
``GET /api/v1/resource-types/{id}``
|
|
1000
|
+
"""
|
|
1001
|
+
_sdk_result = await self._c.request(
|
|
1002
|
+
"GET",
|
|
1003
|
+
_path("/api/v1/resource-types/{id}", id=id),
|
|
1004
|
+
request_id=request_id,
|
|
1005
|
+
traceparent=traceparent,
|
|
1006
|
+
)
|
|
1007
|
+
return typed_result(_sdk_result, models.GetResourceTypeResponse, '#/components/schemas/ApiResponse_ResourceTypeDto/properties/data')
|
|
1008
|
+
|
|
1009
|
+
async def list_resource_types(self, *, cursor: str | None = None, limit: int | None = None, q: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListResourceTypesResponse:
|
|
1010
|
+
"""list resource types
|
|
1011
|
+
|
|
1012
|
+
``GET /api/v1/resource-types``
|
|
1013
|
+
"""
|
|
1014
|
+
_sdk_result = await self._c.request(
|
|
1015
|
+
"GET",
|
|
1016
|
+
"/api/v1/resource-types",
|
|
1017
|
+
query={"cursor": cursor, "limit": limit, "q": q},
|
|
1018
|
+
request_id=request_id,
|
|
1019
|
+
traceparent=traceparent,
|
|
1020
|
+
)
|
|
1021
|
+
return typed_result(_sdk_result, models.ListResourceTypesResponse, '#/components/schemas/PagedResponse_ResourceTypeDto/properties/data')
|
|
1022
|
+
|
|
1023
|
+
async def patch_resource_type(self, id: str, *, if_match: str, body: models.PatchResourceTypeRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PatchResourceTypeResponse:
|
|
1024
|
+
"""patch resource type
|
|
1025
|
+
|
|
1026
|
+
``PATCH /api/v1/resource-types/{id}``
|
|
1027
|
+
"""
|
|
1028
|
+
_sdk_result = await self._c.request(
|
|
1029
|
+
"PATCH",
|
|
1030
|
+
_path("/api/v1/resource-types/{id}", id=id),
|
|
1031
|
+
json=request_body(body),
|
|
1032
|
+
if_match=if_match,
|
|
1033
|
+
idempotency_key=idempotency_key,
|
|
1034
|
+
request_id=request_id,
|
|
1035
|
+
traceparent=traceparent,
|
|
1036
|
+
)
|
|
1037
|
+
return typed_result(_sdk_result, models.PatchResourceTypeResponse, '#/components/schemas/ApiResponse_ResourceTypeDto/properties/data')
|
|
1038
|
+
|
|
1039
|
+
async def resource_types_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.ResourceTypesStatsResponse:
|
|
1040
|
+
"""资源类型计数。
|
|
1041
|
+
|
|
1042
|
+
``GET /api/v1/resource-types/stats``
|
|
1043
|
+
"""
|
|
1044
|
+
_sdk_result = await self._c.request(
|
|
1045
|
+
"GET",
|
|
1046
|
+
"/api/v1/resource-types/stats",
|
|
1047
|
+
request_id=request_id,
|
|
1048
|
+
traceparent=traceparent,
|
|
1049
|
+
)
|
|
1050
|
+
return typed_result(_sdk_result, models.ResourceTypesStatsResponse, '#/components/schemas/ApiResponse_ResourceTypesStatsDto/properties/data')
|
|
1051
|
+
|
|
1052
|
+
|
|
1053
|
+
class ResourcesApi:
|
|
1054
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
1055
|
+
self._c = client
|
|
1056
|
+
|
|
1057
|
+
async def create_resource(self, *, body: models.CreateResourceRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateResourceResponse:
|
|
1058
|
+
"""create resource
|
|
1059
|
+
|
|
1060
|
+
``POST /api/v1/resources``
|
|
1061
|
+
"""
|
|
1062
|
+
_sdk_result = await self._c.request(
|
|
1063
|
+
"POST",
|
|
1064
|
+
"/api/v1/resources",
|
|
1065
|
+
json=request_body(body),
|
|
1066
|
+
idempotency_key=idempotency_key,
|
|
1067
|
+
request_id=request_id,
|
|
1068
|
+
traceparent=traceparent,
|
|
1069
|
+
)
|
|
1070
|
+
return typed_result(_sdk_result, models.CreateResourceResponse, '#/components/schemas/ApiResponse_ResourceDto/properties/data')
|
|
1071
|
+
|
|
1072
|
+
async def delete_resource(self, id: str, *, if_match: str, request_id: str | None = None, traceparent: str | None = None) -> models.DeleteResourceResponse:
|
|
1073
|
+
"""delete resource
|
|
1074
|
+
|
|
1075
|
+
``DELETE /api/v1/resources/{id}``
|
|
1076
|
+
"""
|
|
1077
|
+
_sdk_result = await self._c.request(
|
|
1078
|
+
"DELETE",
|
|
1079
|
+
_path("/api/v1/resources/{id}", id=id),
|
|
1080
|
+
if_match=if_match,
|
|
1081
|
+
request_id=request_id,
|
|
1082
|
+
traceparent=traceparent,
|
|
1083
|
+
)
|
|
1084
|
+
return typed_result(_sdk_result, models.DeleteResourceResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
1085
|
+
|
|
1086
|
+
async def get_resource(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetResourceResponse:
|
|
1087
|
+
"""get resource
|
|
1088
|
+
|
|
1089
|
+
``GET /api/v1/resources/{id}``
|
|
1090
|
+
"""
|
|
1091
|
+
_sdk_result = await self._c.request(
|
|
1092
|
+
"GET",
|
|
1093
|
+
_path("/api/v1/resources/{id}", id=id),
|
|
1094
|
+
request_id=request_id,
|
|
1095
|
+
traceparent=traceparent,
|
|
1096
|
+
)
|
|
1097
|
+
return typed_result(_sdk_result, models.GetResourceResponse, '#/components/schemas/ApiResponse_ResourceDto/properties/data')
|
|
1098
|
+
|
|
1099
|
+
async def get_resource_attributes(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetResourceAttributesResponse:
|
|
1100
|
+
"""get resource attributes
|
|
1101
|
+
|
|
1102
|
+
``GET /api/v1/resources/{id}/attributes``
|
|
1103
|
+
"""
|
|
1104
|
+
_sdk_result = await self._c.request(
|
|
1105
|
+
"GET",
|
|
1106
|
+
_path("/api/v1/resources/{id}/attributes", id=id),
|
|
1107
|
+
request_id=request_id,
|
|
1108
|
+
traceparent=traceparent,
|
|
1109
|
+
)
|
|
1110
|
+
return typed_result(_sdk_result, models.GetResourceAttributesResponse, '#/components/schemas/ApiResponse_AttributesDto/properties/data')
|
|
1111
|
+
|
|
1112
|
+
async def list_resources(self, *, cursor: str | None = None, limit: int | None = None, resource_type: str | None = None, status: str | None = None, q: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListResourcesResponse:
|
|
1113
|
+
"""list resources
|
|
1114
|
+
|
|
1115
|
+
``GET /api/v1/resources``
|
|
1116
|
+
"""
|
|
1117
|
+
_sdk_result = await self._c.request(
|
|
1118
|
+
"GET",
|
|
1119
|
+
"/api/v1/resources",
|
|
1120
|
+
query={"cursor": cursor, "limit": limit, "resource_type": resource_type, "status": status, "q": q},
|
|
1121
|
+
request_id=request_id,
|
|
1122
|
+
traceparent=traceparent,
|
|
1123
|
+
)
|
|
1124
|
+
return typed_result(_sdk_result, models.ListResourcesResponse, '#/components/schemas/PagedResponse_ResourceDto/properties/data')
|
|
1125
|
+
|
|
1126
|
+
async def patch_resource(self, id: str, *, if_match: str, body: models.PatchResourceRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PatchResourceResponse:
|
|
1127
|
+
"""patch resource
|
|
1128
|
+
|
|
1129
|
+
``PATCH /api/v1/resources/{id}``
|
|
1130
|
+
"""
|
|
1131
|
+
_sdk_result = await self._c.request(
|
|
1132
|
+
"PATCH",
|
|
1133
|
+
_path("/api/v1/resources/{id}", id=id),
|
|
1134
|
+
json=request_body(body),
|
|
1135
|
+
if_match=if_match,
|
|
1136
|
+
idempotency_key=idempotency_key,
|
|
1137
|
+
request_id=request_id,
|
|
1138
|
+
traceparent=traceparent,
|
|
1139
|
+
)
|
|
1140
|
+
return typed_result(_sdk_result, models.PatchResourceResponse, '#/components/schemas/ApiResponse_ResourceDto/properties/data')
|
|
1141
|
+
|
|
1142
|
+
async def replace_resource_attributes(self, id: str, *, if_match: str, body: models.ReplaceAttributesRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ReplaceResourceAttributesResponse:
|
|
1143
|
+
"""replace resource attributes
|
|
1144
|
+
|
|
1145
|
+
``PUT /api/v1/resources/{id}/attributes``
|
|
1146
|
+
"""
|
|
1147
|
+
_sdk_result = await self._c.request(
|
|
1148
|
+
"PUT",
|
|
1149
|
+
_path("/api/v1/resources/{id}/attributes", id=id),
|
|
1150
|
+
json=request_body(body),
|
|
1151
|
+
if_match=if_match,
|
|
1152
|
+
idempotency_key=idempotency_key,
|
|
1153
|
+
request_id=request_id,
|
|
1154
|
+
traceparent=traceparent,
|
|
1155
|
+
)
|
|
1156
|
+
return typed_result(_sdk_result, models.ReplaceResourceAttributesResponse, '#/components/schemas/ApiResponse_AttributesDto/properties/data')
|
|
1157
|
+
|
|
1158
|
+
async def resources_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.ResourcesStatsResponse:
|
|
1159
|
+
"""资源计数。
|
|
1160
|
+
|
|
1161
|
+
``GET /api/v1/resources/stats``
|
|
1162
|
+
"""
|
|
1163
|
+
_sdk_result = await self._c.request(
|
|
1164
|
+
"GET",
|
|
1165
|
+
"/api/v1/resources/stats",
|
|
1166
|
+
request_id=request_id,
|
|
1167
|
+
traceparent=traceparent,
|
|
1168
|
+
)
|
|
1169
|
+
return typed_result(_sdk_result, models.ResourcesStatsResponse, '#/components/schemas/ApiResponse_ResourcesStatsDto/properties/data')
|
|
1170
|
+
|
|
1171
|
+
|
|
1172
|
+
class RolesApi:
|
|
1173
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
1174
|
+
self._c = client
|
|
1175
|
+
|
|
1176
|
+
async def create_role(self, *, body: models.CreateRoleRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateRoleResponse:
|
|
1177
|
+
"""创建角色。
|
|
1178
|
+
|
|
1179
|
+
``POST /api/v1/roles``
|
|
1180
|
+
"""
|
|
1181
|
+
_sdk_result = await self._c.request(
|
|
1182
|
+
"POST",
|
|
1183
|
+
"/api/v1/roles",
|
|
1184
|
+
json=request_body(body),
|
|
1185
|
+
idempotency_key=idempotency_key,
|
|
1186
|
+
request_id=request_id,
|
|
1187
|
+
traceparent=traceparent,
|
|
1188
|
+
)
|
|
1189
|
+
return typed_result(_sdk_result, models.CreateRoleResponse, '#/components/schemas/ApiResponse_RoleDto/properties/data')
|
|
1190
|
+
|
|
1191
|
+
async def delete_role(self, id: str, *, if_match: str, request_id: str | None = None, traceparent: str | None = None) -> models.DeleteRoleResponse:
|
|
1192
|
+
"""删除角色(有成员或系统角色时 409,不级联)。
|
|
1193
|
+
|
|
1194
|
+
``DELETE /api/v1/roles/{id}``
|
|
1195
|
+
"""
|
|
1196
|
+
_sdk_result = await self._c.request(
|
|
1197
|
+
"DELETE",
|
|
1198
|
+
_path("/api/v1/roles/{id}", id=id),
|
|
1199
|
+
if_match=if_match,
|
|
1200
|
+
request_id=request_id,
|
|
1201
|
+
traceparent=traceparent,
|
|
1202
|
+
)
|
|
1203
|
+
return typed_result(_sdk_result, models.DeleteRoleResponse, '#/components/schemas/ApiResponse_MutationAckDto/properties/data')
|
|
1204
|
+
|
|
1205
|
+
async def get_role(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetRoleResponse:
|
|
1206
|
+
"""角色详情。
|
|
1207
|
+
|
|
1208
|
+
``GET /api/v1/roles/{id}``
|
|
1209
|
+
"""
|
|
1210
|
+
_sdk_result = await self._c.request(
|
|
1211
|
+
"GET",
|
|
1212
|
+
_path("/api/v1/roles/{id}", id=id),
|
|
1213
|
+
request_id=request_id,
|
|
1214
|
+
traceparent=traceparent,
|
|
1215
|
+
)
|
|
1216
|
+
return typed_result(_sdk_result, models.GetRoleResponse, '#/components/schemas/ApiResponse_RoleDto/properties/data')
|
|
1217
|
+
|
|
1218
|
+
async def get_role_permissions(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetRolePermissionsResponse:
|
|
1219
|
+
"""角色权限集合。
|
|
1220
|
+
|
|
1221
|
+
``GET /api/v1/roles/{id}/permissions``
|
|
1222
|
+
"""
|
|
1223
|
+
_sdk_result = await self._c.request(
|
|
1224
|
+
"GET",
|
|
1225
|
+
_path("/api/v1/roles/{id}/permissions", id=id),
|
|
1226
|
+
request_id=request_id,
|
|
1227
|
+
traceparent=traceparent,
|
|
1228
|
+
)
|
|
1229
|
+
return typed_result(_sdk_result, models.GetRolePermissionsResponse, '#/components/schemas/ApiResponse_RolePermissionsDto/properties/data')
|
|
1230
|
+
|
|
1231
|
+
async def list_roles(self, *, cursor: str | None = None, limit: int | None = None, q: str | None = None, enabled: bool | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListRolesResponse:
|
|
1232
|
+
"""角色分页。
|
|
1233
|
+
|
|
1234
|
+
``GET /api/v1/roles``
|
|
1235
|
+
"""
|
|
1236
|
+
_sdk_result = await self._c.request(
|
|
1237
|
+
"GET",
|
|
1238
|
+
"/api/v1/roles",
|
|
1239
|
+
query={"cursor": cursor, "limit": limit, "q": q, "enabled": enabled},
|
|
1240
|
+
request_id=request_id,
|
|
1241
|
+
traceparent=traceparent,
|
|
1242
|
+
)
|
|
1243
|
+
return typed_result(_sdk_result, models.ListRolesResponse, '#/components/schemas/PagedResponse_RoleDto/properties/data')
|
|
1244
|
+
|
|
1245
|
+
async def patch_role(self, id: str, *, if_match: str, body: models.PatchRoleRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PatchRoleResponse:
|
|
1246
|
+
"""更新角色(`code` / `is_system` 不可变)。
|
|
1247
|
+
|
|
1248
|
+
``PATCH /api/v1/roles/{id}``
|
|
1249
|
+
"""
|
|
1250
|
+
_sdk_result = await self._c.request(
|
|
1251
|
+
"PATCH",
|
|
1252
|
+
_path("/api/v1/roles/{id}", id=id),
|
|
1253
|
+
json=request_body(body),
|
|
1254
|
+
if_match=if_match,
|
|
1255
|
+
idempotency_key=idempotency_key,
|
|
1256
|
+
request_id=request_id,
|
|
1257
|
+
traceparent=traceparent,
|
|
1258
|
+
)
|
|
1259
|
+
return typed_result(_sdk_result, models.PatchRoleResponse, '#/components/schemas/ApiResponse_RoleDto/properties/data')
|
|
1260
|
+
|
|
1261
|
+
async def replace_role_permissions(self, id: str, *, if_match: str, body: models.ReplaceRolePermissionsRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ReplaceRolePermissionsResponse:
|
|
1262
|
+
"""全量替换角色权限(exact set)。
|
|
1263
|
+
|
|
1264
|
+
``PUT /api/v1/roles/{id}/permissions``
|
|
1265
|
+
"""
|
|
1266
|
+
_sdk_result = await self._c.request(
|
|
1267
|
+
"PUT",
|
|
1268
|
+
_path("/api/v1/roles/{id}/permissions", id=id),
|
|
1269
|
+
json=request_body(body),
|
|
1270
|
+
if_match=if_match,
|
|
1271
|
+
idempotency_key=idempotency_key,
|
|
1272
|
+
request_id=request_id,
|
|
1273
|
+
traceparent=traceparent,
|
|
1274
|
+
)
|
|
1275
|
+
return typed_result(_sdk_result, models.ReplaceRolePermissionsResponse, '#/components/schemas/ApiResponse_RolePermissionsDto/properties/data')
|
|
1276
|
+
|
|
1277
|
+
async def roles_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.RolesStatsResponse:
|
|
1278
|
+
"""角色计数。
|
|
1279
|
+
|
|
1280
|
+
``GET /api/v1/roles/stats``
|
|
1281
|
+
"""
|
|
1282
|
+
_sdk_result = await self._c.request(
|
|
1283
|
+
"GET",
|
|
1284
|
+
"/api/v1/roles/stats",
|
|
1285
|
+
request_id=request_id,
|
|
1286
|
+
traceparent=traceparent,
|
|
1287
|
+
)
|
|
1288
|
+
return typed_result(_sdk_result, models.RolesStatsResponse, '#/components/schemas/ApiResponse_RolesStatsDto/properties/data')
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
class SetupApi:
|
|
1292
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
1293
|
+
self._c = client
|
|
1294
|
+
|
|
1295
|
+
async def create_admin(self, *, body: models.SetupAdminRequest | Mapping[str, object], request_id: str | None = None, traceparent: str | None = None) -> models.CreateAdminResponse:
|
|
1296
|
+
"""`POST /api/v1/setup/admin`。
|
|
1297
|
+
|
|
1298
|
+
``POST /api/v1/setup/admin``
|
|
1299
|
+
"""
|
|
1300
|
+
_sdk_result = await self._c.request(
|
|
1301
|
+
"POST",
|
|
1302
|
+
"/api/v1/setup/admin",
|
|
1303
|
+
json=request_body(body),
|
|
1304
|
+
request_id=request_id,
|
|
1305
|
+
traceparent=traceparent,
|
|
1306
|
+
envelope=False,
|
|
1307
|
+
)
|
|
1308
|
+
return typed_result(_sdk_result, models.CreateAdminResponse, '#/components/schemas/SetupAdminDto')
|
|
1309
|
+
|
|
1310
|
+
async def setup_state(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.SetupStateResponse:
|
|
1311
|
+
"""`GET /api/v1/setup/admin`。
|
|
1312
|
+
|
|
1313
|
+
``GET /api/v1/setup/admin``
|
|
1314
|
+
"""
|
|
1315
|
+
_sdk_result = await self._c.request(
|
|
1316
|
+
"GET",
|
|
1317
|
+
"/api/v1/setup/admin",
|
|
1318
|
+
request_id=request_id,
|
|
1319
|
+
traceparent=traceparent,
|
|
1320
|
+
envelope=False,
|
|
1321
|
+
)
|
|
1322
|
+
return typed_result(_sdk_result, models.SetupStateResponse, '#/components/schemas/SetupStatusDto')
|
|
1323
|
+
|
|
1324
|
+
|
|
1325
|
+
class UsersApi:
|
|
1326
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
1327
|
+
self._c = client
|
|
1328
|
+
|
|
1329
|
+
async def create_user(self, *, body: models.CreateUserRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.CreateUserResponse:
|
|
1330
|
+
"""创建用户(Argon2id 散列;可带 `Idempotency-Key`)。
|
|
1331
|
+
|
|
1332
|
+
``POST /api/v1/users``
|
|
1333
|
+
"""
|
|
1334
|
+
_sdk_result = await self._c.request(
|
|
1335
|
+
"POST",
|
|
1336
|
+
"/api/v1/users",
|
|
1337
|
+
json=request_body(body),
|
|
1338
|
+
idempotency_key=idempotency_key,
|
|
1339
|
+
request_id=request_id,
|
|
1340
|
+
traceparent=traceparent,
|
|
1341
|
+
)
|
|
1342
|
+
return typed_result(_sdk_result, models.CreateUserResponse, '#/components/schemas/ApiResponse_UserDto/properties/data')
|
|
1343
|
+
|
|
1344
|
+
async def disable_user(self, id: str, *, if_match: str, request_id: str | None = None, traceparent: str | None = None) -> models.DisableUserResponse:
|
|
1345
|
+
"""禁用用户(`auth_version++` 并撤销会话;含身份安全副作用)。
|
|
1346
|
+
|
|
1347
|
+
``POST /api/v1/users/{id}/disable``
|
|
1348
|
+
"""
|
|
1349
|
+
_sdk_result = await self._c.request(
|
|
1350
|
+
"POST",
|
|
1351
|
+
_path("/api/v1/users/{id}/disable", id=id),
|
|
1352
|
+
if_match=if_match,
|
|
1353
|
+
request_id=request_id,
|
|
1354
|
+
traceparent=traceparent,
|
|
1355
|
+
)
|
|
1356
|
+
return typed_result(_sdk_result, models.DisableUserResponse, '#/components/schemas/ApiResponse_UserDto/properties/data')
|
|
1357
|
+
|
|
1358
|
+
async def effective_permissions(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.EffectivePermissionsResponse:
|
|
1359
|
+
"""有效权限(只统计功能权限,不含资源级预测)。
|
|
1360
|
+
|
|
1361
|
+
``GET /api/v1/users/{id}/effective-permissions``
|
|
1362
|
+
"""
|
|
1363
|
+
_sdk_result = await self._c.request(
|
|
1364
|
+
"GET",
|
|
1365
|
+
_path("/api/v1/users/{id}/effective-permissions", id=id),
|
|
1366
|
+
request_id=request_id,
|
|
1367
|
+
traceparent=traceparent,
|
|
1368
|
+
)
|
|
1369
|
+
return typed_result(_sdk_result, models.EffectivePermissionsResponse, '#/components/schemas/ApiResponse_EffectivePermissionsDto/properties/data')
|
|
1370
|
+
|
|
1371
|
+
async def enable_user(self, id: str, *, if_match: str, request_id: str | None = None, traceparent: str | None = None) -> models.EnableUserResponse:
|
|
1372
|
+
"""启用用户。
|
|
1373
|
+
|
|
1374
|
+
``POST /api/v1/users/{id}/enable``
|
|
1375
|
+
"""
|
|
1376
|
+
_sdk_result = await self._c.request(
|
|
1377
|
+
"POST",
|
|
1378
|
+
_path("/api/v1/users/{id}/enable", id=id),
|
|
1379
|
+
if_match=if_match,
|
|
1380
|
+
request_id=request_id,
|
|
1381
|
+
traceparent=traceparent,
|
|
1382
|
+
)
|
|
1383
|
+
return typed_result(_sdk_result, models.EnableUserResponse, '#/components/schemas/ApiResponse_UserDto/properties/data')
|
|
1384
|
+
|
|
1385
|
+
async def get_user(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetUserResponse:
|
|
1386
|
+
"""读取用户详情。
|
|
1387
|
+
|
|
1388
|
+
``GET /api/v1/users/{id}``
|
|
1389
|
+
"""
|
|
1390
|
+
_sdk_result = await self._c.request(
|
|
1391
|
+
"GET",
|
|
1392
|
+
_path("/api/v1/users/{id}", id=id),
|
|
1393
|
+
request_id=request_id,
|
|
1394
|
+
traceparent=traceparent,
|
|
1395
|
+
)
|
|
1396
|
+
return typed_result(_sdk_result, models.GetUserResponse, '#/components/schemas/ApiResponse_UserDto/properties/data')
|
|
1397
|
+
|
|
1398
|
+
async def get_user_mfa_policy(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetUserMfaPolicyResponse:
|
|
1399
|
+
"""读取用户 MFA 策略(ETag 锚定 `users.version`)。
|
|
1400
|
+
|
|
1401
|
+
``GET /api/v1/users/{id}/mfa-policy``
|
|
1402
|
+
"""
|
|
1403
|
+
_sdk_result = await self._c.request(
|
|
1404
|
+
"GET",
|
|
1405
|
+
_path("/api/v1/users/{id}/mfa-policy", id=id),
|
|
1406
|
+
request_id=request_id,
|
|
1407
|
+
traceparent=traceparent,
|
|
1408
|
+
)
|
|
1409
|
+
return typed_result(_sdk_result, models.GetUserMfaPolicyResponse, '#/components/schemas/ApiResponse_UserMfaPolicyDto/properties/data')
|
|
1410
|
+
|
|
1411
|
+
async def get_user_roles(self, id: str, *, request_id: str | None = None, traceparent: str | None = None) -> models.GetUserRolesResponse:
|
|
1412
|
+
"""读取用户的角色集合。
|
|
1413
|
+
|
|
1414
|
+
``GET /api/v1/users/{id}/roles``
|
|
1415
|
+
"""
|
|
1416
|
+
_sdk_result = await self._c.request(
|
|
1417
|
+
"GET",
|
|
1418
|
+
_path("/api/v1/users/{id}/roles", id=id),
|
|
1419
|
+
request_id=request_id,
|
|
1420
|
+
traceparent=traceparent,
|
|
1421
|
+
)
|
|
1422
|
+
return typed_result(_sdk_result, models.GetUserRolesResponse, '#/components/schemas/ApiResponse_UserRolesDto/properties/data')
|
|
1423
|
+
|
|
1424
|
+
async def list_users(self, *, cursor: str | None = None, page: int | None = None, limit: int | None = None, q: str | None = None, status: str | None = None, role_id: str | None = None, mfa_status: str | None = None, created_from: str | None = None, created_to: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ListUsersResponse:
|
|
1425
|
+
"""统一的 404/403 语义:资源模式路由由端口按「存在性 + 权限」返回,Handler 不自行猜测。
|
|
1426
|
+
|
|
1427
|
+
``GET /api/v1/users``
|
|
1428
|
+
"""
|
|
1429
|
+
_sdk_result = await self._c.request(
|
|
1430
|
+
"GET",
|
|
1431
|
+
"/api/v1/users",
|
|
1432
|
+
query={"cursor": cursor, "page": page, "limit": limit, "q": q, "status": status, "role_id": role_id, "mfa_status": mfa_status, "created_from": created_from, "created_to": created_to},
|
|
1433
|
+
request_id=request_id,
|
|
1434
|
+
traceparent=traceparent,
|
|
1435
|
+
)
|
|
1436
|
+
return typed_result(_sdk_result, models.ListUsersResponse, '#/components/schemas/PagedResponse_UserDto/properties/data')
|
|
1437
|
+
|
|
1438
|
+
async def patch_user(self, id: str, *, if_match: str, body: models.PatchUserRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.PatchUserResponse:
|
|
1439
|
+
"""更新用户资料(白名单字段;未知字段 400)。
|
|
1440
|
+
|
|
1441
|
+
``PATCH /api/v1/users/{id}``
|
|
1442
|
+
"""
|
|
1443
|
+
_sdk_result = await self._c.request(
|
|
1444
|
+
"PATCH",
|
|
1445
|
+
_path("/api/v1/users/{id}", id=id),
|
|
1446
|
+
json=request_body(body),
|
|
1447
|
+
if_match=if_match,
|
|
1448
|
+
idempotency_key=idempotency_key,
|
|
1449
|
+
request_id=request_id,
|
|
1450
|
+
traceparent=traceparent,
|
|
1451
|
+
)
|
|
1452
|
+
return typed_result(_sdk_result, models.PatchUserResponse, '#/components/schemas/ApiResponse_UserDto/properties/data')
|
|
1453
|
+
|
|
1454
|
+
async def replace_user_roles(self, id: str, *, if_match: str, body: models.ReplaceUserRolesRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ReplaceUserRolesResponse:
|
|
1455
|
+
"""全量替换用户角色(exact set)。
|
|
1456
|
+
|
|
1457
|
+
``PUT /api/v1/users/{id}/roles``
|
|
1458
|
+
"""
|
|
1459
|
+
_sdk_result = await self._c.request(
|
|
1460
|
+
"PUT",
|
|
1461
|
+
_path("/api/v1/users/{id}/roles", id=id),
|
|
1462
|
+
json=request_body(body),
|
|
1463
|
+
if_match=if_match,
|
|
1464
|
+
idempotency_key=idempotency_key,
|
|
1465
|
+
request_id=request_id,
|
|
1466
|
+
traceparent=traceparent,
|
|
1467
|
+
)
|
|
1468
|
+
return typed_result(_sdk_result, models.ReplaceUserRolesResponse, '#/components/schemas/ApiResponse_UserRolesDto/properties/data')
|
|
1469
|
+
|
|
1470
|
+
async def reset_password(self, id: str, *, if_match: str, body: models.ResetPasswordRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.ResetPasswordResponse:
|
|
1471
|
+
"""重置他人密码(高风险:要求 assurance + `user:reset_password`)。
|
|
1472
|
+
|
|
1473
|
+
``POST /api/v1/users/{id}/reset-password``
|
|
1474
|
+
"""
|
|
1475
|
+
_sdk_result = await self._c.request(
|
|
1476
|
+
"POST",
|
|
1477
|
+
_path("/api/v1/users/{id}/reset-password", id=id),
|
|
1478
|
+
json=request_body(body),
|
|
1479
|
+
if_match=if_match,
|
|
1480
|
+
idempotency_key=idempotency_key,
|
|
1481
|
+
request_id=request_id,
|
|
1482
|
+
traceparent=traceparent,
|
|
1483
|
+
)
|
|
1484
|
+
return typed_result(_sdk_result, models.ResetPasswordResponse, '#/components/schemas/ApiResponse_UserDto/properties/data')
|
|
1485
|
+
|
|
1486
|
+
async def set_user_mfa_policy(self, id: str, *, if_match: str, body: models.SetUserMfaPolicyRequest | Mapping[str, object], idempotency_key: str | None = None, request_id: str | None = None, traceparent: str | None = None) -> models.SetUserMfaPolicyResponse:
|
|
1487
|
+
"""设置或清除用户 MFA 覆盖(必填可 null 的 mode;本次重验)。
|
|
1488
|
+
|
|
1489
|
+
``PUT /api/v1/users/{id}/mfa-policy``
|
|
1490
|
+
"""
|
|
1491
|
+
_sdk_result = await self._c.request(
|
|
1492
|
+
"PUT",
|
|
1493
|
+
_path("/api/v1/users/{id}/mfa-policy", id=id),
|
|
1494
|
+
json=request_body(body),
|
|
1495
|
+
if_match=if_match,
|
|
1496
|
+
idempotency_key=idempotency_key,
|
|
1497
|
+
request_id=request_id,
|
|
1498
|
+
traceparent=traceparent,
|
|
1499
|
+
)
|
|
1500
|
+
return typed_result(_sdk_result, models.SetUserMfaPolicyResponse, '#/components/schemas/ApiResponse_UserMfaPolicyDto/properties/data')
|
|
1501
|
+
|
|
1502
|
+
async def users_stats(self, *, request_id: str | None = None, traceparent: str | None = None) -> models.UsersStatsResponse:
|
|
1503
|
+
"""用户计数。
|
|
1504
|
+
|
|
1505
|
+
``GET /api/v1/users/stats``
|
|
1506
|
+
"""
|
|
1507
|
+
_sdk_result = await self._c.request(
|
|
1508
|
+
"GET",
|
|
1509
|
+
"/api/v1/users/stats",
|
|
1510
|
+
request_id=request_id,
|
|
1511
|
+
traceparent=traceparent,
|
|
1512
|
+
)
|
|
1513
|
+
return typed_result(_sdk_result, models.UsersStatsResponse, '#/components/schemas/ApiResponse_UsersStatsDto/properties/data')
|
|
1514
|
+
|
|
1515
|
+
|
|
1516
|
+
class AsyncAdminClient:
|
|
1517
|
+
"""Every ``/api/v1`` operation grouped by OpenAPI tag (``admin.users.list_users`` ...)."""
|
|
1518
|
+
|
|
1519
|
+
def __init__(self, client: AsyncRequester) -> None:
|
|
1520
|
+
self.attributes = AttributesApi(client)
|
|
1521
|
+
self.audit = AuditApi(client)
|
|
1522
|
+
self.auth = AuthApi(client)
|
|
1523
|
+
self.authz = AuthzApi(client)
|
|
1524
|
+
self.dashboard = DashboardApi(client)
|
|
1525
|
+
self.health = HealthApi(client)
|
|
1526
|
+
self.permissions = PermissionsApi(client)
|
|
1527
|
+
self.policies = PoliciesApi(client)
|
|
1528
|
+
self.policy_bindings = PolicyBindingsApi(client)
|
|
1529
|
+
self.relation_definitions = RelationDefinitionsApi(client)
|
|
1530
|
+
self.relation_tuples = RelationTuplesApi(client)
|
|
1531
|
+
self.resource_types = ResourceTypesApi(client)
|
|
1532
|
+
self.resources = ResourcesApi(client)
|
|
1533
|
+
self.roles = RolesApi(client)
|
|
1534
|
+
self.setup = SetupApi(client)
|
|
1535
|
+
self.users = UsersApi(client)
|