authpi-admin 0.3.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.
- authpi_admin/__init__.py +55 -0
- authpi_admin/_version.py +5 -0
- authpi_admin/client.py +155 -0
- authpi_admin/errors.py +218 -0
- authpi_admin/generated/__init__.py +28 -0
- authpi_admin/generated/models.py +380 -0
- authpi_admin/generated/resources/__init__.py +0 -0
- authpi_admin/generated/resources/accounts.py +157 -0
- authpi_admin/generated/resources/agents.py +177 -0
- authpi_admin/generated/resources/api_keys.py +213 -0
- authpi_admin/generated/resources/approvals.py +109 -0
- authpi_admin/generated/resources/auth_methods.py +148 -0
- authpi_admin/generated/resources/clients.py +197 -0
- authpi_admin/generated/resources/deliveries.py +83 -0
- authpi_admin/generated/resources/domains.py +194 -0
- authpi_admin/generated/resources/events.py +111 -0
- authpi_admin/generated/resources/groups.py +160 -0
- authpi_admin/generated/resources/invitations.py +202 -0
- authpi_admin/generated/resources/issuers.py +157 -0
- authpi_admin/generated/resources/members.py +154 -0
- authpi_admin/generated/resources/notes.py +192 -0
- authpi_admin/generated/resources/organizations.py +244 -0
- authpi_admin/generated/resources/sessions.py +125 -0
- authpi_admin/generated/resources/tokens.py +94 -0
- authpi_admin/generated/resources/trusted_devices.py +102 -0
- authpi_admin/generated/resources/users.py +224 -0
- authpi_admin/generated/resources/verifiers.py +102 -0
- authpi_admin/generated/resources/webhooks.py +167 -0
- authpi_admin/generated/scopes/__init__.py +0 -0
- authpi_admin/generated/scopes/agent_scope.py +84 -0
- authpi_admin/generated/scopes/issuer_scope.py +160 -0
- authpi_admin/generated/scopes/user_scope.py +102 -0
- authpi_admin/generated/scopes/webhook_scope.py +84 -0
- authpi_admin/http_client.py +305 -0
- authpi_admin/pagination.py +41 -0
- authpi_admin/py.typed +0 -0
- authpi_admin/user_agent.py +21 -0
- authpi_admin-0.3.0.dist-info/METADATA +285 -0
- authpi_admin-0.3.0.dist-info/RECORD +40 -0
- authpi_admin-0.3.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"""Generated resource class for users — DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, AsyncIterator
|
|
6
|
+
|
|
7
|
+
from authpi_admin.http_client import HttpClient, validate_path_segment as _validate_path_segment
|
|
8
|
+
from authpi_admin.pagination import Page, auto_paginate
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class UsersResource:
|
|
12
|
+
"""Operations on users."""
|
|
13
|
+
|
|
14
|
+
def __init__(self, client: HttpClient, base_path: str) -> None:
|
|
15
|
+
self._client = client
|
|
16
|
+
self._base_path = base_path
|
|
17
|
+
|
|
18
|
+
async def list(
|
|
19
|
+
self,
|
|
20
|
+
limit: int | None = None,
|
|
21
|
+
cursor: str | None = None,
|
|
22
|
+
status: str | None = None,
|
|
23
|
+
*,
|
|
24
|
+
timeout: float | None = None,
|
|
25
|
+
headers: dict[str, str] | None = None,
|
|
26
|
+
) -> Page[dict[str, Any]]:
|
|
27
|
+
"""List Users"""
|
|
28
|
+
query: dict[str, Any] = {}
|
|
29
|
+
if limit is not None:
|
|
30
|
+
query["limit"] = limit
|
|
31
|
+
if cursor is not None:
|
|
32
|
+
query["cursor"] = cursor
|
|
33
|
+
if status is not None:
|
|
34
|
+
query["status"] = status
|
|
35
|
+
resp = await self._client.request(
|
|
36
|
+
"GET",
|
|
37
|
+
self._base_path,
|
|
38
|
+
query=query or None,
|
|
39
|
+
timeout=timeout,
|
|
40
|
+
headers=headers,
|
|
41
|
+
)
|
|
42
|
+
data = resp.data
|
|
43
|
+
items = data.get("data", []) if data else []
|
|
44
|
+
return Page(
|
|
45
|
+
data=items,
|
|
46
|
+
has_more=data.get("has_more", False) if data else False,
|
|
47
|
+
next_cursor=data.get("next_cursor") if data else None,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
async def list_all(
|
|
51
|
+
self,
|
|
52
|
+
limit: int | None = None,
|
|
53
|
+
status: str | None = None,
|
|
54
|
+
*,
|
|
55
|
+
timeout: float | None = None,
|
|
56
|
+
headers: dict[str, str] | None = None,
|
|
57
|
+
) -> AsyncIterator[dict[str, Any]]:
|
|
58
|
+
"""Auto-paginating iterator over all users."""
|
|
59
|
+
async def _fetch(cursor: str | None = None) -> Page[dict[str, Any]]:
|
|
60
|
+
return await self.list(
|
|
61
|
+
limit=limit,
|
|
62
|
+
status=status,
|
|
63
|
+
cursor=cursor,
|
|
64
|
+
timeout=timeout,
|
|
65
|
+
headers=headers,
|
|
66
|
+
)
|
|
67
|
+
async for item in auto_paginate(_fetch):
|
|
68
|
+
yield item
|
|
69
|
+
|
|
70
|
+
async def create(
|
|
71
|
+
self,
|
|
72
|
+
body: dict[str, Any],
|
|
73
|
+
*,
|
|
74
|
+
idempotency_key: str | None = None,
|
|
75
|
+
timeout: float | None = None,
|
|
76
|
+
headers: dict[str, str] | None = None,
|
|
77
|
+
) -> dict[str, Any]:
|
|
78
|
+
"""Create User"""
|
|
79
|
+
req_headers: dict[str, str] = {}
|
|
80
|
+
if headers:
|
|
81
|
+
req_headers.update(headers)
|
|
82
|
+
if idempotency_key:
|
|
83
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
84
|
+
resp = await self._client.request(
|
|
85
|
+
"POST",
|
|
86
|
+
self._base_path,
|
|
87
|
+
body=body,
|
|
88
|
+
timeout=timeout,
|
|
89
|
+
headers=req_headers or None,
|
|
90
|
+
)
|
|
91
|
+
data = resp.data
|
|
92
|
+
if resp.etag and isinstance(data, dict):
|
|
93
|
+
data["_etag"] = resp.etag
|
|
94
|
+
return data
|
|
95
|
+
|
|
96
|
+
async def get(
|
|
97
|
+
self,
|
|
98
|
+
resource_id: str,
|
|
99
|
+
*,
|
|
100
|
+
timeout: float | None = None,
|
|
101
|
+
headers: dict[str, str] | None = None,
|
|
102
|
+
) -> dict[str, Any]:
|
|
103
|
+
"""Get User"""
|
|
104
|
+
path = f"{self._base_path}/{resource_id}"
|
|
105
|
+
resp = await self._client.request("GET", path, timeout=timeout, headers=headers)
|
|
106
|
+
data = resp.data
|
|
107
|
+
if resp.etag and isinstance(data, dict):
|
|
108
|
+
data["_etag"] = resp.etag
|
|
109
|
+
return data
|
|
110
|
+
|
|
111
|
+
async def update(
|
|
112
|
+
self,
|
|
113
|
+
resource_id: str,
|
|
114
|
+
body: dict[str, Any],
|
|
115
|
+
*,
|
|
116
|
+
if_match: str | None = None,
|
|
117
|
+
idempotency_key: str | None = None,
|
|
118
|
+
timeout: float | None = None,
|
|
119
|
+
headers: dict[str, str] | None = None,
|
|
120
|
+
) -> dict[str, Any]:
|
|
121
|
+
"""Update User"""
|
|
122
|
+
path = f"{self._base_path}/{resource_id}"
|
|
123
|
+
req_headers: dict[str, str] = {}
|
|
124
|
+
if headers:
|
|
125
|
+
req_headers.update(headers)
|
|
126
|
+
if if_match:
|
|
127
|
+
req_headers["if-match"] = if_match
|
|
128
|
+
if idempotency_key:
|
|
129
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
130
|
+
resp = await self._client.request(
|
|
131
|
+
"PATCH",
|
|
132
|
+
path,
|
|
133
|
+
body=body,
|
|
134
|
+
timeout=timeout,
|
|
135
|
+
headers=req_headers or None,
|
|
136
|
+
)
|
|
137
|
+
data = resp.data
|
|
138
|
+
if resp.etag and isinstance(data, dict):
|
|
139
|
+
data["_etag"] = resp.etag
|
|
140
|
+
return data
|
|
141
|
+
|
|
142
|
+
async def delete(
|
|
143
|
+
self,
|
|
144
|
+
resource_id: str,
|
|
145
|
+
*,
|
|
146
|
+
if_match: str | None = None,
|
|
147
|
+
timeout: float | None = None,
|
|
148
|
+
headers: dict[str, str] | None = None,
|
|
149
|
+
) -> None:
|
|
150
|
+
"""Delete User"""
|
|
151
|
+
path = f"{self._base_path}/{resource_id}"
|
|
152
|
+
req_headers: dict[str, str] = {}
|
|
153
|
+
if headers:
|
|
154
|
+
req_headers.update(headers)
|
|
155
|
+
if if_match:
|
|
156
|
+
req_headers["if-match"] = if_match
|
|
157
|
+
await self._client.request(
|
|
158
|
+
"DELETE",
|
|
159
|
+
path,
|
|
160
|
+
timeout=timeout,
|
|
161
|
+
headers=req_headers or None,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
async def revoke_all_trusted_devices(
|
|
165
|
+
self,
|
|
166
|
+
user_id: str,
|
|
167
|
+
*,
|
|
168
|
+
if_match: str | None = None,
|
|
169
|
+
idempotency_key: str | None = None,
|
|
170
|
+
timeout: float | None = None,
|
|
171
|
+
headers: dict[str, str] | None = None,
|
|
172
|
+
) -> dict[str, Any]:
|
|
173
|
+
"""Revoke All Trusted Devices"""
|
|
174
|
+
_validate_path_segment(user_id, "user_id")
|
|
175
|
+
path = f"{self._base_path}/{user_id}/trusted-devices/revoke-all"
|
|
176
|
+
req_headers: dict[str, str] = {}
|
|
177
|
+
if headers:
|
|
178
|
+
req_headers.update(headers)
|
|
179
|
+
if if_match:
|
|
180
|
+
req_headers["if-match"] = if_match
|
|
181
|
+
if idempotency_key:
|
|
182
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
183
|
+
resp = await self._client.request(
|
|
184
|
+
"POST",
|
|
185
|
+
path,
|
|
186
|
+
timeout=timeout,
|
|
187
|
+
headers=req_headers or None,
|
|
188
|
+
)
|
|
189
|
+
data = resp.data
|
|
190
|
+
if resp.etag and isinstance(data, dict):
|
|
191
|
+
data["_etag"] = resp.etag
|
|
192
|
+
return data
|
|
193
|
+
|
|
194
|
+
async def complete_enrollment_verifiers(
|
|
195
|
+
self,
|
|
196
|
+
user_id: str,
|
|
197
|
+
body: dict[str, Any] | None = None,
|
|
198
|
+
*,
|
|
199
|
+
if_match: str | None = None,
|
|
200
|
+
idempotency_key: str | None = None,
|
|
201
|
+
timeout: float | None = None,
|
|
202
|
+
headers: dict[str, str] | None = None,
|
|
203
|
+
) -> dict[str, Any]:
|
|
204
|
+
"""Complete Verifier Enrollment"""
|
|
205
|
+
_validate_path_segment(user_id, "user_id")
|
|
206
|
+
path = f"{self._base_path}/{user_id}/verifiers/complete-enrollment"
|
|
207
|
+
req_headers: dict[str, str] = {}
|
|
208
|
+
if headers:
|
|
209
|
+
req_headers.update(headers)
|
|
210
|
+
if if_match:
|
|
211
|
+
req_headers["if-match"] = if_match
|
|
212
|
+
if idempotency_key:
|
|
213
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
214
|
+
resp = await self._client.request(
|
|
215
|
+
"POST",
|
|
216
|
+
path,
|
|
217
|
+
body=body,
|
|
218
|
+
timeout=timeout,
|
|
219
|
+
headers=req_headers or None,
|
|
220
|
+
)
|
|
221
|
+
data = resp.data
|
|
222
|
+
if resp.etag and isinstance(data, dict):
|
|
223
|
+
data["_etag"] = resp.etag
|
|
224
|
+
return data
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"""Generated resource class for verifiers — DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, AsyncIterator
|
|
6
|
+
|
|
7
|
+
from authpi_admin.http_client import HttpClient, validate_path_segment as _validate_path_segment
|
|
8
|
+
from authpi_admin.pagination import Page, auto_paginate
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VerifiersResource:
|
|
12
|
+
"""Operations on verifiers."""
|
|
13
|
+
|
|
14
|
+
def __init__(self, client: HttpClient, base_path: str) -> None:
|
|
15
|
+
self._client = client
|
|
16
|
+
self._base_path = base_path
|
|
17
|
+
|
|
18
|
+
async def list(
|
|
19
|
+
self,
|
|
20
|
+
*,
|
|
21
|
+
timeout: float | None = None,
|
|
22
|
+
headers: dict[str, str] | None = None,
|
|
23
|
+
) -> Page[dict[str, Any]]:
|
|
24
|
+
"""List Agent Verifiers"""
|
|
25
|
+
query: dict[str, Any] = {}
|
|
26
|
+
resp = await self._client.request(
|
|
27
|
+
"GET",
|
|
28
|
+
self._base_path,
|
|
29
|
+
query=query or None,
|
|
30
|
+
timeout=timeout,
|
|
31
|
+
headers=headers,
|
|
32
|
+
)
|
|
33
|
+
data = resp.data
|
|
34
|
+
items = data.get("data", []) if data else []
|
|
35
|
+
return Page(
|
|
36
|
+
data=items,
|
|
37
|
+
has_more=data.get("has_more", False) if data else False,
|
|
38
|
+
next_cursor=data.get("next_cursor") if data else None,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
async def list_all(
|
|
42
|
+
self,
|
|
43
|
+
*,
|
|
44
|
+
timeout: float | None = None,
|
|
45
|
+
headers: dict[str, str] | None = None,
|
|
46
|
+
) -> AsyncIterator[dict[str, Any]]:
|
|
47
|
+
"""Auto-paginating iterator over all verifiers."""
|
|
48
|
+
async def _fetch(cursor: str | None = None) -> Page[dict[str, Any]]:
|
|
49
|
+
return await self.list(
|
|
50
|
+
timeout=timeout,
|
|
51
|
+
headers=headers,
|
|
52
|
+
)
|
|
53
|
+
async for item in auto_paginate(_fetch):
|
|
54
|
+
yield item
|
|
55
|
+
|
|
56
|
+
async def create(
|
|
57
|
+
self,
|
|
58
|
+
body: dict[str, Any],
|
|
59
|
+
*,
|
|
60
|
+
idempotency_key: str | None = None,
|
|
61
|
+
timeout: float | None = None,
|
|
62
|
+
headers: dict[str, str] | None = None,
|
|
63
|
+
) -> dict[str, Any]:
|
|
64
|
+
"""Add Agent Verifier"""
|
|
65
|
+
req_headers: dict[str, str] = {}
|
|
66
|
+
if headers:
|
|
67
|
+
req_headers.update(headers)
|
|
68
|
+
if idempotency_key:
|
|
69
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
70
|
+
resp = await self._client.request(
|
|
71
|
+
"POST",
|
|
72
|
+
self._base_path,
|
|
73
|
+
body=body,
|
|
74
|
+
timeout=timeout,
|
|
75
|
+
headers=req_headers or None,
|
|
76
|
+
)
|
|
77
|
+
data = resp.data
|
|
78
|
+
if resp.etag and isinstance(data, dict):
|
|
79
|
+
data["_etag"] = resp.etag
|
|
80
|
+
return data
|
|
81
|
+
|
|
82
|
+
async def delete(
|
|
83
|
+
self,
|
|
84
|
+
verifier_id: str,
|
|
85
|
+
*,
|
|
86
|
+
if_match: str | None = None,
|
|
87
|
+
timeout: float | None = None,
|
|
88
|
+
headers: dict[str, str] | None = None,
|
|
89
|
+
) -> None:
|
|
90
|
+
"""Remove Agent Verifier"""
|
|
91
|
+
path = f"{self._base_path}/{verifier_id}"
|
|
92
|
+
req_headers: dict[str, str] = {}
|
|
93
|
+
if headers:
|
|
94
|
+
req_headers.update(headers)
|
|
95
|
+
if if_match:
|
|
96
|
+
req_headers["if-match"] = if_match
|
|
97
|
+
await self._client.request(
|
|
98
|
+
"DELETE",
|
|
99
|
+
path,
|
|
100
|
+
timeout=timeout,
|
|
101
|
+
headers=req_headers or None,
|
|
102
|
+
)
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"""Generated resource class for webhooks — DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, AsyncIterator
|
|
6
|
+
|
|
7
|
+
from authpi_admin.http_client import HttpClient, validate_path_segment as _validate_path_segment
|
|
8
|
+
from authpi_admin.pagination import Page, auto_paginate
|
|
9
|
+
from authpi_admin.generated.models import (
|
|
10
|
+
WebhookListItem,
|
|
11
|
+
CreateWebhookInput,
|
|
12
|
+
UpdateWebhook,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class WebhooksResource:
|
|
17
|
+
"""Operations on webhooks."""
|
|
18
|
+
|
|
19
|
+
def __init__(self, client: HttpClient, base_path: str) -> None:
|
|
20
|
+
self._client = client
|
|
21
|
+
self._base_path = base_path
|
|
22
|
+
|
|
23
|
+
async def list(
|
|
24
|
+
self,
|
|
25
|
+
limit: int | None = None,
|
|
26
|
+
cursor: str | None = None,
|
|
27
|
+
status: str | None = None,
|
|
28
|
+
*,
|
|
29
|
+
timeout: float | None = None,
|
|
30
|
+
headers: dict[str, str] | None = None,
|
|
31
|
+
) -> Page[WebhookListItem]:
|
|
32
|
+
"""List Webhooks"""
|
|
33
|
+
query: dict[str, Any] = {}
|
|
34
|
+
if limit is not None:
|
|
35
|
+
query["limit"] = limit
|
|
36
|
+
if cursor is not None:
|
|
37
|
+
query["cursor"] = cursor
|
|
38
|
+
if status is not None:
|
|
39
|
+
query["status"] = status
|
|
40
|
+
resp = await self._client.request(
|
|
41
|
+
"GET",
|
|
42
|
+
self._base_path,
|
|
43
|
+
query=query or None,
|
|
44
|
+
timeout=timeout,
|
|
45
|
+
headers=headers,
|
|
46
|
+
)
|
|
47
|
+
data = resp.data
|
|
48
|
+
items = [WebhookListItem(**item) for item in data.get("data", [])] if data else []
|
|
49
|
+
return Page(
|
|
50
|
+
data=items,
|
|
51
|
+
has_more=data.get("has_more", False) if data else False,
|
|
52
|
+
next_cursor=data.get("next_cursor") if data else None,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
async def list_all(
|
|
56
|
+
self,
|
|
57
|
+
limit: int | None = None,
|
|
58
|
+
status: str | None = None,
|
|
59
|
+
*,
|
|
60
|
+
timeout: float | None = None,
|
|
61
|
+
headers: dict[str, str] | None = None,
|
|
62
|
+
) -> AsyncIterator[WebhookListItem]:
|
|
63
|
+
"""Auto-paginating iterator over all webhooks."""
|
|
64
|
+
async def _fetch(cursor: str | None = None) -> Page[WebhookListItem]:
|
|
65
|
+
return await self.list(
|
|
66
|
+
limit=limit,
|
|
67
|
+
status=status,
|
|
68
|
+
cursor=cursor,
|
|
69
|
+
timeout=timeout,
|
|
70
|
+
headers=headers,
|
|
71
|
+
)
|
|
72
|
+
async for item in auto_paginate(_fetch):
|
|
73
|
+
yield item
|
|
74
|
+
|
|
75
|
+
async def create(
|
|
76
|
+
self,
|
|
77
|
+
body: dict[str, Any],
|
|
78
|
+
*,
|
|
79
|
+
idempotency_key: str | None = None,
|
|
80
|
+
timeout: float | None = None,
|
|
81
|
+
headers: dict[str, str] | None = None,
|
|
82
|
+
) -> dict[str, Any]:
|
|
83
|
+
"""Create Webhook"""
|
|
84
|
+
req_headers: dict[str, str] = {}
|
|
85
|
+
if headers:
|
|
86
|
+
req_headers.update(headers)
|
|
87
|
+
if idempotency_key:
|
|
88
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
89
|
+
resp = await self._client.request(
|
|
90
|
+
"POST",
|
|
91
|
+
self._base_path,
|
|
92
|
+
body=body,
|
|
93
|
+
timeout=timeout,
|
|
94
|
+
headers=req_headers or None,
|
|
95
|
+
)
|
|
96
|
+
data = resp.data
|
|
97
|
+
if resp.etag and isinstance(data, dict):
|
|
98
|
+
data["_etag"] = resp.etag
|
|
99
|
+
return data
|
|
100
|
+
|
|
101
|
+
async def get(
|
|
102
|
+
self,
|
|
103
|
+
resource_id: str,
|
|
104
|
+
*,
|
|
105
|
+
timeout: float | None = None,
|
|
106
|
+
headers: dict[str, str] | None = None,
|
|
107
|
+
) -> dict[str, Any]:
|
|
108
|
+
"""Get Webhook"""
|
|
109
|
+
path = f"{self._base_path}/{resource_id}"
|
|
110
|
+
resp = await self._client.request("GET", path, timeout=timeout, headers=headers)
|
|
111
|
+
data = resp.data
|
|
112
|
+
if resp.etag and isinstance(data, dict):
|
|
113
|
+
data["_etag"] = resp.etag
|
|
114
|
+
return data
|
|
115
|
+
|
|
116
|
+
async def update(
|
|
117
|
+
self,
|
|
118
|
+
resource_id: str,
|
|
119
|
+
body: dict[str, Any],
|
|
120
|
+
*,
|
|
121
|
+
if_match: str | None = None,
|
|
122
|
+
idempotency_key: str | None = None,
|
|
123
|
+
timeout: float | None = None,
|
|
124
|
+
headers: dict[str, str] | None = None,
|
|
125
|
+
) -> dict[str, Any]:
|
|
126
|
+
"""Update Webhook"""
|
|
127
|
+
path = f"{self._base_path}/{resource_id}"
|
|
128
|
+
req_headers: dict[str, str] = {}
|
|
129
|
+
if headers:
|
|
130
|
+
req_headers.update(headers)
|
|
131
|
+
if if_match:
|
|
132
|
+
req_headers["if-match"] = if_match
|
|
133
|
+
if idempotency_key:
|
|
134
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
135
|
+
resp = await self._client.request(
|
|
136
|
+
"PATCH",
|
|
137
|
+
path,
|
|
138
|
+
body=body,
|
|
139
|
+
timeout=timeout,
|
|
140
|
+
headers=req_headers or None,
|
|
141
|
+
)
|
|
142
|
+
data = resp.data
|
|
143
|
+
if resp.etag and isinstance(data, dict):
|
|
144
|
+
data["_etag"] = resp.etag
|
|
145
|
+
return data
|
|
146
|
+
|
|
147
|
+
async def delete(
|
|
148
|
+
self,
|
|
149
|
+
resource_id: str,
|
|
150
|
+
*,
|
|
151
|
+
if_match: str | None = None,
|
|
152
|
+
timeout: float | None = None,
|
|
153
|
+
headers: dict[str, str] | None = None,
|
|
154
|
+
) -> None:
|
|
155
|
+
"""Delete Webhook"""
|
|
156
|
+
path = f"{self._base_path}/{resource_id}"
|
|
157
|
+
req_headers: dict[str, str] = {}
|
|
158
|
+
if headers:
|
|
159
|
+
req_headers.update(headers)
|
|
160
|
+
if if_match:
|
|
161
|
+
req_headers["if-match"] = if_match
|
|
162
|
+
await self._client.request(
|
|
163
|
+
"DELETE",
|
|
164
|
+
path,
|
|
165
|
+
timeout=timeout,
|
|
166
|
+
headers=req_headers or None,
|
|
167
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Generated scope class for AgentScope — DO NOT EDIT."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from functools import cached_property
|
|
6
|
+
from typing import Any, TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from authpi_admin.http_client import validate_path_segment as _validate_path_segment
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from authpi_admin.http_client import HttpClient
|
|
12
|
+
from authpi_admin.generated.resources.verifiers import VerifiersResource
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class AgentScope:
|
|
16
|
+
"""Scope for operations under a specific agent."""
|
|
17
|
+
|
|
18
|
+
def __init__(self, client: HttpClient, base_path: str, agent_id: str) -> None:
|
|
19
|
+
_validate_path_segment(agent_id, "agent_id")
|
|
20
|
+
self._client = client
|
|
21
|
+
self._base_path = base_path
|
|
22
|
+
self._agent_id = agent_id
|
|
23
|
+
self._path = f"{base_path}/{agent_id}"
|
|
24
|
+
|
|
25
|
+
@cached_property
|
|
26
|
+
def verifiers(self) -> VerifiersResource:
|
|
27
|
+
"""Access verifiers under this agent."""
|
|
28
|
+
return VerifiersResource(self._client, f"{self._path}/verifiers")
|
|
29
|
+
|
|
30
|
+
async def get(
|
|
31
|
+
self,
|
|
32
|
+
*,
|
|
33
|
+
timeout: float | None = None,
|
|
34
|
+
headers: dict[str, str] | None = None,
|
|
35
|
+
) -> Any:
|
|
36
|
+
"""Get Agent"""
|
|
37
|
+
resp = await self._client.request("GET", self._path, timeout=timeout, headers=headers)
|
|
38
|
+
return resp.data
|
|
39
|
+
|
|
40
|
+
async def update(
|
|
41
|
+
self,
|
|
42
|
+
body: dict[str, Any],
|
|
43
|
+
*,
|
|
44
|
+
if_match: str | None = None,
|
|
45
|
+
idempotency_key: str | None = None,
|
|
46
|
+
timeout: float | None = None,
|
|
47
|
+
headers: dict[str, str] | None = None,
|
|
48
|
+
) -> Any:
|
|
49
|
+
"""Update Agent"""
|
|
50
|
+
req_headers: dict[str, str] = {}
|
|
51
|
+
if headers:
|
|
52
|
+
req_headers.update(headers)
|
|
53
|
+
if if_match:
|
|
54
|
+
req_headers["if-match"] = if_match
|
|
55
|
+
if idempotency_key:
|
|
56
|
+
req_headers["idempotency-key"] = idempotency_key
|
|
57
|
+
resp = await self._client.request(
|
|
58
|
+
"PATCH",
|
|
59
|
+
self._path,
|
|
60
|
+
body=body,
|
|
61
|
+
timeout=timeout,
|
|
62
|
+
headers=req_headers or None,
|
|
63
|
+
)
|
|
64
|
+
return resp.data
|
|
65
|
+
|
|
66
|
+
async def delete(
|
|
67
|
+
self,
|
|
68
|
+
*,
|
|
69
|
+
if_match: str | None = None,
|
|
70
|
+
timeout: float | None = None,
|
|
71
|
+
headers: dict[str, str] | None = None,
|
|
72
|
+
) -> None:
|
|
73
|
+
"""Delete Agent"""
|
|
74
|
+
req_headers: dict[str, str] = {}
|
|
75
|
+
if headers:
|
|
76
|
+
req_headers.update(headers)
|
|
77
|
+
if if_match:
|
|
78
|
+
req_headers["if-match"] = if_match
|
|
79
|
+
await self._client.request(
|
|
80
|
+
"DELETE",
|
|
81
|
+
self._path,
|
|
82
|
+
timeout=timeout,
|
|
83
|
+
headers=req_headers or None,
|
|
84
|
+
)
|