circle-so-python-sdk 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.
- circle/__init__.py +24 -0
- circle/api/__init__.py +1 -0
- circle/api/admin_access_groups.py +133 -0
- circle/api/admin_community.py +122 -0
- circle/api/admin_courses.py +172 -0
- circle/api/admin_events.py +101 -0
- circle/api/admin_misc.py +305 -0
- circle/api/admin_posts.py +200 -0
- circle/api/admin_spaces.py +301 -0
- circle/api/admin_tags.py +146 -0
- circle/api/auth.py +63 -0
- circle/api/headless_chat_notif_members.py +323 -0
- circle/api/headless_misc.py +218 -0
- circle/api/headless_spaces_posts.py +279 -0
- circle/client.py +197 -0
- circle/constants.py +5 -0
- circle/exceptions.py +34 -0
- circle/http.py +227 -0
- circle/models/__init__.py +5 -0
- circle/models/admin/__init__.py +47 -0
- circle/models/admin/community.py +82 -0
- circle/models/admin/courses.py +30 -0
- circle/models/admin/events.py +67 -0
- circle/models/admin/members.py +105 -0
- circle/models/admin/misc.py +240 -0
- circle/models/admin/posts.py +172 -0
- circle/models/admin/spaces.py +146 -0
- circle/models/admin/tags.py +85 -0
- circle/models/auth.py +21 -0
- circle/models/base.py +28 -0
- circle/models/headless/__init__.py +50 -0
- circle/models/headless/chat.py +134 -0
- circle/models/headless/comments.py +60 -0
- circle/models/headless/courses.py +109 -0
- circle/models/headless/members.py +105 -0
- circle/models/headless/misc.py +120 -0
- circle/models/headless/notifications.py +66 -0
- circle/models/headless/posts.py +137 -0
- circle/models/headless/spaces.py +80 -0
- circle/pagination.py +116 -0
- circle/py.typed +1 -0
- circle/rate_limit.py +36 -0
- circle/validation.py +67 -0
- circle/webhooks.py +39 -0
- circle_so_python_sdk-0.1.0.dist-info/METADATA +120 -0
- circle_so_python_sdk-0.1.0.dist-info/RECORD +48 -0
- circle_so_python_sdk-0.1.0.dist-info/WHEEL +4 -0
- circle_so_python_sdk-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"""Admin API -- Spaces, Space Groups, Space Members."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Any, Dict, Optional, Tuple
|
|
4
|
+
from circle.constants import ADMIN_V2_PREFIX as _P
|
|
5
|
+
from circle.http import AsyncTransport, SyncTransport
|
|
6
|
+
from circle.models.admin.spaces import (
|
|
7
|
+
Space, SpaceList, SpaceCreateResponse, SpaceGroup, SpaceGroupList,
|
|
8
|
+
SpaceMember, SpaceMemberList, SpaceGroupMember, SpaceGroupMemberList, SpaceAISummary,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
# -- Request descriptor type: (method, path, kwargs) --
|
|
12
|
+
_Req = Tuple[str, str, Dict[str, Any]]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# -- Spaces helpers --
|
|
16
|
+
|
|
17
|
+
def _list_spaces(page: int, per_page: int, sort: Optional[str]) -> _Req:
|
|
18
|
+
p: Dict[str, Any] = {"page": page, "per_page": per_page}
|
|
19
|
+
if sort:
|
|
20
|
+
p["sort"] = sort
|
|
21
|
+
return "GET", f"{_P}/spaces", {"params": p}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _create_space(kwargs: Dict[str, Any]) -> _Req:
|
|
25
|
+
return "POST", f"{_P}/spaces", {"json": kwargs}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _show_space(space_id: int) -> _Req:
|
|
29
|
+
return "GET", f"{_P}/spaces/{space_id}", {}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _update_space(space_id: int, kwargs: Dict[str, Any]) -> _Req:
|
|
33
|
+
return "PUT", f"{_P}/spaces/{space_id}", {"json": kwargs}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _delete_space(space_id: int) -> _Req:
|
|
37
|
+
return "DELETE", f"{_P}/spaces/{space_id}", {}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _get_space_ai_summary(space_id: int, date_from: Optional[str],
|
|
41
|
+
first_unread_message_id: Optional[int]) -> _Req:
|
|
42
|
+
p: Dict[str, Any] = {}
|
|
43
|
+
if date_from:
|
|
44
|
+
p["date_from"] = date_from
|
|
45
|
+
if first_unread_message_id:
|
|
46
|
+
p["first_unread_message_id"] = first_unread_message_id
|
|
47
|
+
return "GET", f"{_P}/spaces/{space_id}/ai_summaries", {"params": p}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# -- Space Groups helpers --
|
|
51
|
+
|
|
52
|
+
def _list_space_groups(page: int, per_page: int, name: Optional[str]) -> _Req:
|
|
53
|
+
p: Dict[str, Any] = {"page": page, "per_page": per_page}
|
|
54
|
+
if name:
|
|
55
|
+
p["name"] = name
|
|
56
|
+
return "GET", f"{_P}/space_groups", {"params": p}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _create_space_group(name: str, slug: str, kwargs: Dict[str, Any]) -> _Req:
|
|
60
|
+
return "POST", f"{_P}/space_groups", {"json": {"name": name, "slug": slug, **kwargs}}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _show_space_group(space_group_id: int) -> _Req:
|
|
64
|
+
return "GET", f"{_P}/space_groups/{space_group_id}", {}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _update_space_group(space_group_id: int, kwargs: Dict[str, Any]) -> _Req:
|
|
68
|
+
return "PUT", f"{_P}/space_groups/{space_group_id}", {"json": kwargs}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _delete_space_group(space_group_id: int) -> _Req:
|
|
72
|
+
return "DELETE", f"{_P}/space_groups/{space_group_id}", {}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# -- Space Members helpers --
|
|
76
|
+
|
|
77
|
+
def _list_space_members(space_id: int, page: int, per_page: int,
|
|
78
|
+
status: Optional[str]) -> _Req:
|
|
79
|
+
p: Dict[str, Any] = {"space_id": space_id, "page": page, "per_page": per_page}
|
|
80
|
+
if status:
|
|
81
|
+
p["status"] = status
|
|
82
|
+
return "GET", f"{_P}/space_members", {"params": p}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _show_space_member(email: str, space_id: int) -> _Req:
|
|
86
|
+
return "GET", f"{_P}/space_member", {"params": {"email": email, "space_id": space_id}}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _add_space_member(email: str, space_id: int) -> _Req:
|
|
90
|
+
return "POST", f"{_P}/space_members", {"json": {"email": email, "space_id": space_id}}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _remove_space_member(email: str, space_id: int) -> _Req:
|
|
94
|
+
return "DELETE", f"{_P}/space_members", {"params": {"email": email, "space_id": space_id}}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# -- Space Group Members helpers --
|
|
98
|
+
|
|
99
|
+
def _list_space_group_members(space_group_id: int, page: int, per_page: int,
|
|
100
|
+
status: Optional[str]) -> _Req:
|
|
101
|
+
p: Dict[str, Any] = {"space_group_id": space_group_id, "page": page, "per_page": per_page}
|
|
102
|
+
if status:
|
|
103
|
+
p["status"] = status
|
|
104
|
+
return "GET", f"{_P}/space_group_members", {"params": p}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def _show_space_group_member(email: str, space_group_id: int) -> _Req:
|
|
108
|
+
return "GET", f"{_P}/space_group_member", {"params": {"email": email, "space_group_id": space_group_id}}
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _create_space_group_member(email: str, space_group_id: int) -> _Req:
|
|
112
|
+
return "POST", f"{_P}/space_group_members", {"json": {"email": email, "space_group_id": space_group_id}}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _destroy_space_group_member(email: str, space_group_id: int) -> _Req:
|
|
116
|
+
return "DELETE", f"{_P}/space_group_members", {"params": {"email": email, "space_group_id": space_group_id}}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
# ---------------------------------------------------------------------------
|
|
120
|
+
# Sync client
|
|
121
|
+
# ---------------------------------------------------------------------------
|
|
122
|
+
|
|
123
|
+
class SpacesClient:
|
|
124
|
+
def __init__(self, transport: SyncTransport) -> None:
|
|
125
|
+
self._t = transport
|
|
126
|
+
|
|
127
|
+
# -- Spaces --
|
|
128
|
+
def list_spaces(self, *, page: int = 1, per_page: int = 60, sort: Optional[str] = None) -> SpaceList:
|
|
129
|
+
m, p, kw = _list_spaces(page, per_page, sort)
|
|
130
|
+
return SpaceList.model_validate(self._t.request(m, p, **kw))
|
|
131
|
+
|
|
132
|
+
def create_space(self, **kwargs: Any) -> SpaceCreateResponse:
|
|
133
|
+
m, p, kw = _create_space(kwargs)
|
|
134
|
+
return SpaceCreateResponse.model_validate(self._t.request(m, p, **kw))
|
|
135
|
+
|
|
136
|
+
def show_space(self, space_id: int) -> Space:
|
|
137
|
+
m, p, kw = _show_space(space_id)
|
|
138
|
+
return Space.model_validate(self._t.request(m, p, **kw))
|
|
139
|
+
|
|
140
|
+
def update_space(self, space_id: int, **kwargs: Any) -> Space:
|
|
141
|
+
m, p, kw = _update_space(space_id, kwargs)
|
|
142
|
+
return Space.model_validate(self._t.request(m, p, **kw))
|
|
143
|
+
|
|
144
|
+
def delete_space(self, space_id: int) -> Dict[str, Any]:
|
|
145
|
+
m, p, kw = _delete_space(space_id)
|
|
146
|
+
return self._t.request(m, p, **kw)
|
|
147
|
+
|
|
148
|
+
def get_space_ai_summary(self, space_id: int, *, date_from: Optional[str] = None,
|
|
149
|
+
first_unread_message_id: Optional[int] = None) -> SpaceAISummary:
|
|
150
|
+
m, p, kw = _get_space_ai_summary(space_id, date_from, first_unread_message_id)
|
|
151
|
+
return SpaceAISummary.model_validate(self._t.request(m, p, **kw))
|
|
152
|
+
|
|
153
|
+
# -- Space Groups --
|
|
154
|
+
def list_space_groups(self, *, page: int = 1, per_page: int = 60, name: Optional[str] = None) -> SpaceGroupList:
|
|
155
|
+
m, p, kw = _list_space_groups(page, per_page, name)
|
|
156
|
+
return SpaceGroupList.model_validate(self._t.request(m, p, **kw))
|
|
157
|
+
|
|
158
|
+
def create_space_group(self, *, name: str, slug: str, **kwargs: Any) -> SpaceGroup:
|
|
159
|
+
m, p, kw = _create_space_group(name, slug, kwargs)
|
|
160
|
+
return SpaceGroup.model_validate(self._t.request(m, p, **kw))
|
|
161
|
+
|
|
162
|
+
def show_space_group(self, space_group_id: int) -> SpaceGroup:
|
|
163
|
+
m, p, kw = _show_space_group(space_group_id)
|
|
164
|
+
return SpaceGroup.model_validate(self._t.request(m, p, **kw))
|
|
165
|
+
|
|
166
|
+
def update_space_group(self, space_group_id: int, **kwargs: Any) -> SpaceGroup:
|
|
167
|
+
m, p, kw = _update_space_group(space_group_id, kwargs)
|
|
168
|
+
return SpaceGroup.model_validate(self._t.request(m, p, **kw))
|
|
169
|
+
|
|
170
|
+
def delete_space_group(self, space_group_id: int) -> Dict[str, Any]:
|
|
171
|
+
m, p, kw = _delete_space_group(space_group_id)
|
|
172
|
+
return self._t.request(m, p, **kw)
|
|
173
|
+
|
|
174
|
+
# -- Space Members --
|
|
175
|
+
def list_space_members(self, *, space_id: int, page: int = 1, per_page: int = 60,
|
|
176
|
+
status: Optional[str] = None) -> SpaceMemberList:
|
|
177
|
+
m, p, kw = _list_space_members(space_id, page, per_page, status)
|
|
178
|
+
return SpaceMemberList.model_validate(self._t.request(m, p, **kw))
|
|
179
|
+
|
|
180
|
+
def show_space_member(self, *, email: str, space_id: int) -> SpaceMember:
|
|
181
|
+
m, p, kw = _show_space_member(email, space_id)
|
|
182
|
+
return SpaceMember.model_validate(self._t.request(m, p, **kw))
|
|
183
|
+
|
|
184
|
+
def add_space_member(self, *, email: str, space_id: int) -> Dict[str, Any]:
|
|
185
|
+
m, p, kw = _add_space_member(email, space_id)
|
|
186
|
+
return self._t.request(m, p, **kw)
|
|
187
|
+
|
|
188
|
+
def remove_space_member(self, *, email: str, space_id: int) -> Dict[str, Any]:
|
|
189
|
+
m, p, kw = _remove_space_member(email, space_id)
|
|
190
|
+
return self._t.request(m, p, **kw)
|
|
191
|
+
|
|
192
|
+
# -- Space Group Members --
|
|
193
|
+
def list_space_group_members(self, *, space_group_id: int, page: int = 1, per_page: int = 60,
|
|
194
|
+
status: Optional[str] = None) -> SpaceGroupMemberList:
|
|
195
|
+
m, p, kw = _list_space_group_members(space_group_id, page, per_page, status)
|
|
196
|
+
return SpaceGroupMemberList.model_validate(self._t.request(m, p, **kw))
|
|
197
|
+
|
|
198
|
+
def show_space_group_member(self, *, email: str, space_group_id: int) -> SpaceGroupMember:
|
|
199
|
+
m, p, kw = _show_space_group_member(email, space_group_id)
|
|
200
|
+
return SpaceGroupMember.model_validate(self._t.request(m, p, **kw))
|
|
201
|
+
|
|
202
|
+
def create_space_group_member(self, *, email: str, space_group_id: int) -> Dict[str, Any]:
|
|
203
|
+
m, p, kw = _create_space_group_member(email, space_group_id)
|
|
204
|
+
return self._t.request(m, p, **kw)
|
|
205
|
+
|
|
206
|
+
def destroy_space_group_member(self, *, email: str, space_group_id: int) -> Dict[str, Any]:
|
|
207
|
+
m, p, kw = _destroy_space_group_member(email, space_group_id)
|
|
208
|
+
return self._t.request(m, p, **kw)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
# ---------------------------------------------------------------------------
|
|
212
|
+
# Async client
|
|
213
|
+
# ---------------------------------------------------------------------------
|
|
214
|
+
|
|
215
|
+
class AsyncSpacesClient:
|
|
216
|
+
def __init__(self, transport: AsyncTransport) -> None:
|
|
217
|
+
self._t = transport
|
|
218
|
+
|
|
219
|
+
# -- Spaces --
|
|
220
|
+
async def list_spaces(self, *, page: int = 1, per_page: int = 60, sort: Optional[str] = None) -> SpaceList:
|
|
221
|
+
m, p, kw = _list_spaces(page, per_page, sort)
|
|
222
|
+
return SpaceList.model_validate(await self._t.request(m, p, **kw))
|
|
223
|
+
|
|
224
|
+
async def create_space(self, **kwargs: Any) -> SpaceCreateResponse:
|
|
225
|
+
m, p, kw = _create_space(kwargs)
|
|
226
|
+
return SpaceCreateResponse.model_validate(await self._t.request(m, p, **kw))
|
|
227
|
+
|
|
228
|
+
async def show_space(self, space_id: int) -> Space:
|
|
229
|
+
m, p, kw = _show_space(space_id)
|
|
230
|
+
return Space.model_validate(await self._t.request(m, p, **kw))
|
|
231
|
+
|
|
232
|
+
async def update_space(self, space_id: int, **kwargs: Any) -> Space:
|
|
233
|
+
m, p, kw = _update_space(space_id, kwargs)
|
|
234
|
+
return Space.model_validate(await self._t.request(m, p, **kw))
|
|
235
|
+
|
|
236
|
+
async def delete_space(self, space_id: int) -> Dict[str, Any]:
|
|
237
|
+
m, p, kw = _delete_space(space_id)
|
|
238
|
+
return await self._t.request(m, p, **kw)
|
|
239
|
+
|
|
240
|
+
async def get_space_ai_summary(self, space_id: int, *, date_from: Optional[str] = None,
|
|
241
|
+
first_unread_message_id: Optional[int] = None) -> SpaceAISummary:
|
|
242
|
+
m, p, kw = _get_space_ai_summary(space_id, date_from, first_unread_message_id)
|
|
243
|
+
return SpaceAISummary.model_validate(await self._t.request(m, p, **kw))
|
|
244
|
+
|
|
245
|
+
# -- Space Groups --
|
|
246
|
+
async def list_space_groups(self, *, page: int = 1, per_page: int = 60,
|
|
247
|
+
name: Optional[str] = None) -> SpaceGroupList:
|
|
248
|
+
m, p, kw = _list_space_groups(page, per_page, name)
|
|
249
|
+
return SpaceGroupList.model_validate(await self._t.request(m, p, **kw))
|
|
250
|
+
|
|
251
|
+
async def create_space_group(self, *, name: str, slug: str, **kwargs: Any) -> SpaceGroup:
|
|
252
|
+
m, p, kw = _create_space_group(name, slug, kwargs)
|
|
253
|
+
return SpaceGroup.model_validate(await self._t.request(m, p, **kw))
|
|
254
|
+
|
|
255
|
+
async def show_space_group(self, space_group_id: int) -> SpaceGroup:
|
|
256
|
+
m, p, kw = _show_space_group(space_group_id)
|
|
257
|
+
return SpaceGroup.model_validate(await self._t.request(m, p, **kw))
|
|
258
|
+
|
|
259
|
+
async def update_space_group(self, space_group_id: int, **kwargs: Any) -> SpaceGroup:
|
|
260
|
+
m, p, kw = _update_space_group(space_group_id, kwargs)
|
|
261
|
+
return SpaceGroup.model_validate(await self._t.request(m, p, **kw))
|
|
262
|
+
|
|
263
|
+
async def delete_space_group(self, space_group_id: int) -> Dict[str, Any]:
|
|
264
|
+
m, p, kw = _delete_space_group(space_group_id)
|
|
265
|
+
return await self._t.request(m, p, **kw)
|
|
266
|
+
|
|
267
|
+
# -- Space Members --
|
|
268
|
+
async def list_space_members(self, *, space_id: int, page: int = 1, per_page: int = 60,
|
|
269
|
+
status: Optional[str] = None) -> SpaceMemberList:
|
|
270
|
+
m, p, kw = _list_space_members(space_id, page, per_page, status)
|
|
271
|
+
return SpaceMemberList.model_validate(await self._t.request(m, p, **kw))
|
|
272
|
+
|
|
273
|
+
async def show_space_member(self, *, email: str, space_id: int) -> SpaceMember:
|
|
274
|
+
m, p, kw = _show_space_member(email, space_id)
|
|
275
|
+
return SpaceMember.model_validate(await self._t.request(m, p, **kw))
|
|
276
|
+
|
|
277
|
+
async def add_space_member(self, *, email: str, space_id: int) -> Dict[str, Any]:
|
|
278
|
+
m, p, kw = _add_space_member(email, space_id)
|
|
279
|
+
return await self._t.request(m, p, **kw)
|
|
280
|
+
|
|
281
|
+
async def remove_space_member(self, *, email: str, space_id: int) -> Dict[str, Any]:
|
|
282
|
+
m, p, kw = _remove_space_member(email, space_id)
|
|
283
|
+
return await self._t.request(m, p, **kw)
|
|
284
|
+
|
|
285
|
+
# -- Space Group Members --
|
|
286
|
+
async def list_space_group_members(self, *, space_group_id: int, page: int = 1, per_page: int = 60,
|
|
287
|
+
status: Optional[str] = None) -> SpaceGroupMemberList:
|
|
288
|
+
m, p, kw = _list_space_group_members(space_group_id, page, per_page, status)
|
|
289
|
+
return SpaceGroupMemberList.model_validate(await self._t.request(m, p, **kw))
|
|
290
|
+
|
|
291
|
+
async def show_space_group_member(self, *, email: str, space_group_id: int) -> SpaceGroupMember:
|
|
292
|
+
m, p, kw = _show_space_group_member(email, space_group_id)
|
|
293
|
+
return SpaceGroupMember.model_validate(await self._t.request(m, p, **kw))
|
|
294
|
+
|
|
295
|
+
async def create_space_group_member(self, *, email: str, space_group_id: int) -> Dict[str, Any]:
|
|
296
|
+
m, p, kw = _create_space_group_member(email, space_group_id)
|
|
297
|
+
return await self._t.request(m, p, **kw)
|
|
298
|
+
|
|
299
|
+
async def destroy_space_group_member(self, *, email: str, space_group_id: int) -> Dict[str, Any]:
|
|
300
|
+
m, p, kw = _destroy_space_group_member(email, space_group_id)
|
|
301
|
+
return await self._t.request(m, p, **kw)
|
circle/api/admin_tags.py
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""Admin API -- Member Tags, Tagged Members, Profile Fields."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Any, Dict, List, Optional
|
|
4
|
+
from circle.constants import ADMIN_V2_PREFIX as _P
|
|
5
|
+
from circle.http import AsyncTransport, SyncTransport
|
|
6
|
+
from circle.models.admin.tags import (
|
|
7
|
+
MemberTag, MemberTagList, TaggedMember, TaggedMemberList, ProfileField, ProfileFieldList,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _list_member_tags_params(
|
|
12
|
+
page: int, per_page: int,
|
|
13
|
+
name: Optional[str], is_public: Optional[bool], sort: Optional[str],
|
|
14
|
+
) -> Dict[str, Any]:
|
|
15
|
+
p: Dict[str, Any] = {"page": page, "per_page": per_page}
|
|
16
|
+
if name:
|
|
17
|
+
p["name"] = name
|
|
18
|
+
if is_public is not None:
|
|
19
|
+
p["is_public"] = is_public
|
|
20
|
+
if sort:
|
|
21
|
+
p["sort"] = sort
|
|
22
|
+
return p
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _list_profile_fields_params(
|
|
26
|
+
page: int, per_page: int,
|
|
27
|
+
label: Optional[str], archived: Optional[str],
|
|
28
|
+
) -> Dict[str, Any]:
|
|
29
|
+
p: Dict[str, Any] = {"page": page, "per_page": per_page}
|
|
30
|
+
if label:
|
|
31
|
+
p["label"] = label
|
|
32
|
+
if archived:
|
|
33
|
+
p["archived"] = archived
|
|
34
|
+
return p
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class TagsClient:
|
|
38
|
+
def __init__(self, transport: SyncTransport) -> None:
|
|
39
|
+
self._t = transport
|
|
40
|
+
|
|
41
|
+
# -- Member Tags --
|
|
42
|
+
def list_member_tags(self, *, page: int = 1, per_page: int = 10, name: Optional[str] = None,
|
|
43
|
+
is_public: Optional[bool] = None, sort: Optional[str] = None) -> MemberTagList:
|
|
44
|
+
return MemberTagList.model_validate(
|
|
45
|
+
self._t.request("GET", f"{_P}/member_tags",
|
|
46
|
+
params=_list_member_tags_params(page, per_page, name, is_public, sort)))
|
|
47
|
+
|
|
48
|
+
def create_member_tag(self, **kwargs: Any) -> MemberTag:
|
|
49
|
+
return MemberTag.model_validate(self._t.request("POST", f"{_P}/member_tags", json=kwargs))
|
|
50
|
+
|
|
51
|
+
def show_member_tag(self, tag_id: int) -> MemberTag:
|
|
52
|
+
return MemberTag.model_validate(self._t.request("GET", f"{_P}/member_tags/{tag_id}"))
|
|
53
|
+
|
|
54
|
+
def update_member_tag(self, tag_id: int, **kwargs: Any) -> MemberTag:
|
|
55
|
+
return MemberTag.model_validate(self._t.request("PUT", f"{_P}/member_tags/{tag_id}", json=kwargs))
|
|
56
|
+
|
|
57
|
+
def delete_member_tag(self, tag_id: int) -> Dict[str, Any]:
|
|
58
|
+
return self._t.request("DELETE", f"{_P}/member_tags/{tag_id}")
|
|
59
|
+
|
|
60
|
+
# -- Tagged Members --
|
|
61
|
+
def list_tagged_members(self, *, page: int = 1, per_page: int = 10) -> TaggedMemberList:
|
|
62
|
+
return TaggedMemberList.model_validate(
|
|
63
|
+
self._t.request("GET", f"{_P}/tagged_members", params={"page": page, "per_page": per_page}))
|
|
64
|
+
|
|
65
|
+
def show_tagged_member(self, tagged_member_id: int) -> TaggedMember:
|
|
66
|
+
return TaggedMember.model_validate(self._t.request("GET", f"{_P}/tagged_members/{tagged_member_id}"))
|
|
67
|
+
|
|
68
|
+
def create_tagged_member(self, *, member_tag_id: int, user_email: str) -> Dict[str, Any]:
|
|
69
|
+
return self._t.request("POST", f"{_P}/tagged_members",
|
|
70
|
+
json={"member_tag_id": member_tag_id, "user_email": user_email})
|
|
71
|
+
|
|
72
|
+
def delete_tagged_member(self, *, member_tag_id: int, user_email: str) -> Dict[str, Any]:
|
|
73
|
+
return self._t.request("DELETE", f"{_P}/tagged_members",
|
|
74
|
+
params={"member_tag_id": member_tag_id, "user_email": user_email})
|
|
75
|
+
|
|
76
|
+
# -- Profile Fields --
|
|
77
|
+
def list_profile_fields(self, *, page: int = 1, per_page: int = 10, label: Optional[str] = None,
|
|
78
|
+
archived: Optional[str] = None) -> ProfileFieldList:
|
|
79
|
+
return ProfileFieldList.model_validate(
|
|
80
|
+
self._t.request("GET", f"{_P}/profile_fields",
|
|
81
|
+
params=_list_profile_fields_params(page, per_page, label, archived)))
|
|
82
|
+
|
|
83
|
+
def archive_profile_field(self, field_id: int) -> Dict[str, Any]:
|
|
84
|
+
return self._t.request("PUT", f"{_P}/profile_fields/{field_id}/archive")
|
|
85
|
+
|
|
86
|
+
def unarchive_profile_field(self, field_id: int) -> Dict[str, Any]:
|
|
87
|
+
return self._t.request("PUT", f"{_P}/profile_fields/{field_id}/unarchive")
|
|
88
|
+
|
|
89
|
+
def get_page_profile_fields(self, *, page_name: str) -> List[Any]:
|
|
90
|
+
return self._t.request("GET", f"{_P}/page_profile_fields", params={"page_name": page_name})
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class AsyncTagsClient:
|
|
94
|
+
def __init__(self, transport: AsyncTransport) -> None:
|
|
95
|
+
self._t = transport
|
|
96
|
+
|
|
97
|
+
# -- Member Tags --
|
|
98
|
+
async def list_member_tags(self, *, page: int = 1, per_page: int = 10, name: Optional[str] = None,
|
|
99
|
+
is_public: Optional[bool] = None, sort: Optional[str] = None) -> MemberTagList:
|
|
100
|
+
return MemberTagList.model_validate(
|
|
101
|
+
await self._t.request("GET", f"{_P}/member_tags",
|
|
102
|
+
params=_list_member_tags_params(page, per_page, name, is_public, sort)))
|
|
103
|
+
|
|
104
|
+
async def create_member_tag(self, **kwargs: Any) -> MemberTag:
|
|
105
|
+
return MemberTag.model_validate(await self._t.request("POST", f"{_P}/member_tags", json=kwargs))
|
|
106
|
+
|
|
107
|
+
async def show_member_tag(self, tag_id: int) -> MemberTag:
|
|
108
|
+
return MemberTag.model_validate(await self._t.request("GET", f"{_P}/member_tags/{tag_id}"))
|
|
109
|
+
|
|
110
|
+
async def update_member_tag(self, tag_id: int, **kwargs: Any) -> MemberTag:
|
|
111
|
+
return MemberTag.model_validate(await self._t.request("PUT", f"{_P}/member_tags/{tag_id}", json=kwargs))
|
|
112
|
+
|
|
113
|
+
async def delete_member_tag(self, tag_id: int) -> Dict[str, Any]:
|
|
114
|
+
return await self._t.request("DELETE", f"{_P}/member_tags/{tag_id}")
|
|
115
|
+
|
|
116
|
+
# -- Tagged Members --
|
|
117
|
+
async def list_tagged_members(self, *, page: int = 1, per_page: int = 10) -> TaggedMemberList:
|
|
118
|
+
return TaggedMemberList.model_validate(
|
|
119
|
+
await self._t.request("GET", f"{_P}/tagged_members", params={"page": page, "per_page": per_page}))
|
|
120
|
+
|
|
121
|
+
async def show_tagged_member(self, tagged_member_id: int) -> TaggedMember:
|
|
122
|
+
return TaggedMember.model_validate(await self._t.request("GET", f"{_P}/tagged_members/{tagged_member_id}"))
|
|
123
|
+
|
|
124
|
+
async def create_tagged_member(self, *, member_tag_id: int, user_email: str) -> Dict[str, Any]:
|
|
125
|
+
return await self._t.request("POST", f"{_P}/tagged_members",
|
|
126
|
+
json={"member_tag_id": member_tag_id, "user_email": user_email})
|
|
127
|
+
|
|
128
|
+
async def delete_tagged_member(self, *, member_tag_id: int, user_email: str) -> Dict[str, Any]:
|
|
129
|
+
return await self._t.request("DELETE", f"{_P}/tagged_members",
|
|
130
|
+
params={"member_tag_id": member_tag_id, "user_email": user_email})
|
|
131
|
+
|
|
132
|
+
# -- Profile Fields --
|
|
133
|
+
async def list_profile_fields(self, *, page: int = 1, per_page: int = 10, label: Optional[str] = None,
|
|
134
|
+
archived: Optional[str] = None) -> ProfileFieldList:
|
|
135
|
+
return ProfileFieldList.model_validate(
|
|
136
|
+
await self._t.request("GET", f"{_P}/profile_fields",
|
|
137
|
+
params=_list_profile_fields_params(page, per_page, label, archived)))
|
|
138
|
+
|
|
139
|
+
async def archive_profile_field(self, field_id: int) -> Dict[str, Any]:
|
|
140
|
+
return await self._t.request("PUT", f"{_P}/profile_fields/{field_id}/archive")
|
|
141
|
+
|
|
142
|
+
async def unarchive_profile_field(self, field_id: int) -> Dict[str, Any]:
|
|
143
|
+
return await self._t.request("PUT", f"{_P}/profile_fields/{field_id}/unarchive")
|
|
144
|
+
|
|
145
|
+
async def get_page_profile_fields(self, *, page_name: str) -> List[Any]:
|
|
146
|
+
return await self._t.request("GET", f"{_P}/page_profile_fields", params={"page_name": page_name})
|
circle/api/auth.py
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Headless Auth API client."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Any, Dict, Optional
|
|
4
|
+
from circle.constants import HEADLESS_AUTH_PREFIX as _P
|
|
5
|
+
from circle.http import AsyncTransport, SyncTransport
|
|
6
|
+
from circle.models.auth import HeadlessAuthToken, RefreshedAccessToken
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _auth_body(sso_user_id=None, community_member_id=None, email=None):
|
|
10
|
+
body: Dict[str, Any] = {}
|
|
11
|
+
if sso_user_id is not None:
|
|
12
|
+
body["sso_user_id"] = sso_user_id
|
|
13
|
+
elif community_member_id is not None:
|
|
14
|
+
body["community_member_id"] = community_member_id
|
|
15
|
+
elif email is not None:
|
|
16
|
+
body["email"] = email
|
|
17
|
+
return body
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class HeadlessAuthClient:
|
|
21
|
+
"""Sync client for Headless Auth endpoints."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, transport: SyncTransport) -> None:
|
|
24
|
+
self._t = transport
|
|
25
|
+
|
|
26
|
+
def create_auth_token(self, *, sso_user_id: Optional[str] = None,
|
|
27
|
+
community_member_id: Optional[int] = None,
|
|
28
|
+
email: Optional[str] = None) -> HeadlessAuthToken:
|
|
29
|
+
return HeadlessAuthToken.model_validate(
|
|
30
|
+
self._t.request("POST", f"{_P}/auth_token", json=_auth_body(sso_user_id, community_member_id, email)))
|
|
31
|
+
|
|
32
|
+
def refresh_access_token(self, refresh_token: str) -> RefreshedAccessToken:
|
|
33
|
+
return RefreshedAccessToken.model_validate(
|
|
34
|
+
self._t.request("PATCH", f"{_P}/access_token/refresh", json={"refresh_token": refresh_token}))
|
|
35
|
+
|
|
36
|
+
def revoke_access_token(self, access_token: str) -> None:
|
|
37
|
+
self._t.request("POST", f"{_P}/access_token/revoke", json={"access_token": access_token})
|
|
38
|
+
|
|
39
|
+
def revoke_refresh_token(self, refresh_token: str) -> None:
|
|
40
|
+
self._t.request("POST", f"{_P}/refresh_token/revoke", json={"refresh_token": refresh_token})
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AsyncHeadlessAuthClient:
|
|
44
|
+
"""Async client for Headless Auth endpoints."""
|
|
45
|
+
|
|
46
|
+
def __init__(self, transport: AsyncTransport) -> None:
|
|
47
|
+
self._t = transport
|
|
48
|
+
|
|
49
|
+
async def create_auth_token(self, *, sso_user_id: Optional[str] = None,
|
|
50
|
+
community_member_id: Optional[int] = None,
|
|
51
|
+
email: Optional[str] = None) -> HeadlessAuthToken:
|
|
52
|
+
return HeadlessAuthToken.model_validate(
|
|
53
|
+
await self._t.request("POST", f"{_P}/auth_token", json=_auth_body(sso_user_id, community_member_id, email)))
|
|
54
|
+
|
|
55
|
+
async def refresh_access_token(self, refresh_token: str) -> RefreshedAccessToken:
|
|
56
|
+
return RefreshedAccessToken.model_validate(
|
|
57
|
+
await self._t.request("PATCH", f"{_P}/access_token/refresh", json={"refresh_token": refresh_token}))
|
|
58
|
+
|
|
59
|
+
async def revoke_access_token(self, access_token: str) -> None:
|
|
60
|
+
await self._t.request("POST", f"{_P}/access_token/revoke", json={"access_token": access_token})
|
|
61
|
+
|
|
62
|
+
async def revoke_refresh_token(self, refresh_token: str) -> None:
|
|
63
|
+
await self._t.request("POST", f"{_P}/refresh_token/revoke", json={"refresh_token": refresh_token})
|