intellif-aihub 0.1.5__py3-none-any.whl → 0.1.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intellif-aihub might be problematic. Click here for more details.
- aihub/__init__.py +1 -1
- aihub/client.py +35 -12
- aihub/models/data_warehouse.py +95 -0
- aihub/models/dataset_management.py +99 -61
- aihub/models/document_center.py +26 -18
- aihub/models/eval.py +20 -11
- aihub/models/labelfree.py +12 -38
- aihub/models/model_center.py +141 -0
- aihub/models/model_training_platform.py +182 -149
- aihub/models/quota_schedule_management.py +196 -150
- aihub/models/tag_resource_management.py +30 -24
- aihub/models/task_center.py +43 -38
- aihub/models/user_system.py +159 -125
- aihub/models/workflow_center.py +461 -0
- aihub/services/artifact.py +22 -15
- aihub/services/data_warehouse.py +97 -0
- aihub/services/dataset_management.py +142 -23
- aihub/services/document_center.py +24 -5
- aihub/services/eval.py +14 -7
- aihub/services/labelfree.py +11 -0
- aihub/services/model_center.py +183 -0
- aihub/services/model_training_platform.py +132 -59
- aihub/services/quota_schedule_management.py +104 -7
- aihub/services/tag_resource_management.py +33 -2
- aihub/services/task_center.py +23 -9
- aihub/services/user_system.py +237 -2
- aihub/services/workflow_center.py +522 -0
- aihub/utils/download.py +19 -3
- {intellif_aihub-0.1.5.dist-info → intellif_aihub-0.1.7.dist-info}/METADATA +4 -4
- intellif_aihub-0.1.7.dist-info/RECORD +42 -0
- intellif_aihub-0.1.5.dist-info/RECORD +0 -36
- {intellif_aihub-0.1.5.dist-info → intellif_aihub-0.1.7.dist-info}/WHEEL +0 -0
- {intellif_aihub-0.1.5.dist-info → intellif_aihub-0.1.7.dist-info}/licenses/LICENSE +0 -0
- {intellif_aihub-0.1.5.dist-info → intellif_aihub-0.1.7.dist-info}/top_level.txt +0 -0
aihub/services/user_system.py
CHANGED
|
@@ -1,15 +1,58 @@
|
|
|
1
1
|
# !/usr/bin/env python
|
|
2
|
-
# -*-coding:utf-8 -*-
|
|
2
|
+
# -*- coding:utf-8 -*-
|
|
3
|
+
"""用户系统服务模块
|
|
4
|
+
|
|
5
|
+
封装 **Auth / Menu / Role / User** 四大类接口:
|
|
6
|
+
|
|
7
|
+
- **统一登录 / 注册**
|
|
8
|
+
- **菜单**(增删改查 & 角色绑定)
|
|
9
|
+
- **角色**(增删改查 & 菜单绑定)
|
|
10
|
+
- **用户**(增删改查 & 角色 / 菜单查询)
|
|
11
|
+
"""
|
|
3
12
|
from __future__ import annotations
|
|
4
13
|
|
|
14
|
+
from typing import List
|
|
15
|
+
|
|
5
16
|
import httpx
|
|
6
17
|
|
|
7
18
|
from ..exceptions import APIError
|
|
8
19
|
from ..models.common import APIWrapper
|
|
9
|
-
from ..models.user_system import
|
|
20
|
+
from ..models.user_system import (
|
|
21
|
+
LoginRequest,
|
|
22
|
+
LoginResponse,
|
|
23
|
+
SignupRequest,
|
|
24
|
+
SignupResponse,
|
|
25
|
+
Menu,
|
|
26
|
+
TreeMenu,
|
|
27
|
+
ListMenusResponse,
|
|
28
|
+
CreateMenuRequest,
|
|
29
|
+
CreateMenuResponse,
|
|
30
|
+
UpdateMenuRequest,
|
|
31
|
+
GetMenuRolesResponse,
|
|
32
|
+
Role,
|
|
33
|
+
ListRolesRequest,
|
|
34
|
+
ListRolesResponse,
|
|
35
|
+
CreateRoleRequest,
|
|
36
|
+
CreateRoleResponse,
|
|
37
|
+
UpdateRoleRequest,
|
|
38
|
+
GetRoleMenusResponse,
|
|
39
|
+
SearchRolesRequest,
|
|
40
|
+
SearchRolesResponse,
|
|
41
|
+
User,
|
|
42
|
+
ListUsersRequest,
|
|
43
|
+
ListUsersResponse,
|
|
44
|
+
CreateUserRequest,
|
|
45
|
+
CreateUserResponse,
|
|
46
|
+
UpdateUserRequest,
|
|
47
|
+
SetUserRolesRequest,
|
|
48
|
+
GetUserMenusResponse,
|
|
49
|
+
SearchUsersRequest,
|
|
50
|
+
SearchUsersResponse,
|
|
51
|
+
)
|
|
10
52
|
|
|
11
53
|
|
|
12
54
|
class UserSystemService:
|
|
55
|
+
"""用户系统服务"""
|
|
13
56
|
|
|
14
57
|
def __init__(self, http: httpx.Client):
|
|
15
58
|
self._auth = _Auth(http)
|
|
@@ -21,90 +64,282 @@ class UserSystemService:
|
|
|
21
64
|
# AUTH 一级方法
|
|
22
65
|
# ==================================================
|
|
23
66
|
def login(self, payload: LoginRequest) -> LoginResponse:
|
|
67
|
+
"""登录
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
payload: 登录请求体,包含 *username* / *password*
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
LoginResponse: 登录成功后返回用户 ID 与 token
|
|
74
|
+
"""
|
|
24
75
|
return self._auth.login(payload)
|
|
25
76
|
|
|
26
77
|
def signup(self, payload: SignupRequest) -> SignupResponse:
|
|
78
|
+
"""注册
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
payload: 注册请求体
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
SignupResponse: 新用户 ID
|
|
85
|
+
"""
|
|
27
86
|
return self._auth.signup(payload)
|
|
28
87
|
|
|
29
88
|
# ==================================================
|
|
30
89
|
# MENU 一级方法
|
|
31
90
|
# ==================================================
|
|
32
91
|
def list_menus(self, need_roles: bool = False) -> ListMenusResponse:
|
|
92
|
+
"""查询所有菜单
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
need_roles: 是否返回每个菜单已绑定角色
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
ListMenusResponse
|
|
99
|
+
"""
|
|
33
100
|
return self._menu.list(need_roles)
|
|
34
101
|
|
|
35
102
|
def get_menu(self, menu_id: int) -> Menu:
|
|
103
|
+
"""获取单个菜单详情
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
menu_id: 菜单 ID
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Menu: 菜单对象(含父级、权限等字段)
|
|
110
|
+
"""
|
|
36
111
|
return self._menu.get(menu_id)
|
|
37
112
|
|
|
38
113
|
def create_menu(self, payload: CreateMenuRequest) -> int:
|
|
114
|
+
"""新建菜单
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
payload: 菜单创建请求体,包含名称 / 父级 / 权限标识等
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
int: 新菜单的 ID
|
|
121
|
+
"""
|
|
39
122
|
return self._menu.create(payload)
|
|
40
123
|
|
|
41
124
|
def update_menu(self, menu_id: int, payload: UpdateMenuRequest) -> None:
|
|
125
|
+
"""编辑菜单
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
menu_id: 待更新菜单 ID
|
|
129
|
+
payload: 更新字段(名称 / 父级 / 权限 / 角色绑定)
|
|
130
|
+
"""
|
|
42
131
|
self._menu.update(menu_id, payload)
|
|
43
132
|
|
|
44
133
|
def delete_menu(self, menu_id: int) -> None:
|
|
134
|
+
"""删除菜单
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
menu_id: 目标菜单 ID
|
|
138
|
+
"""
|
|
45
139
|
self._menu.delete(menu_id)
|
|
46
140
|
|
|
47
141
|
def get_menu_roles(self, menu_id: int) -> List[int]:
|
|
142
|
+
"""查询菜单已绑定的角色
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
menu_id: 菜单 ID
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
list[int]: 角色 ID 列表
|
|
149
|
+
"""
|
|
48
150
|
return self._menu.get_roles(menu_id)
|
|
49
151
|
|
|
50
152
|
def set_menu_roles(self, menu_id: int, role_ids: List[int]) -> None:
|
|
153
|
+
"""重新绑定菜单角色
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
menu_id: 菜单 ID
|
|
157
|
+
role_ids: 需绑定的角色 ID 列表
|
|
158
|
+
"""
|
|
51
159
|
self._menu.set_roles(menu_id, role_ids)
|
|
52
160
|
|
|
53
161
|
# ==================================================
|
|
54
162
|
# ROLE 一级方法
|
|
55
163
|
# ==================================================
|
|
56
164
|
def list_roles(self, payload: ListRolesRequest) -> ListRolesResponse:
|
|
165
|
+
"""分页查询角色
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
payload: 分页与过滤条件
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
ListRolesResponse: 角色分页结果
|
|
172
|
+
"""
|
|
57
173
|
return self._role.list(payload)
|
|
58
174
|
|
|
59
175
|
def get_role(self, role_id: int) -> Role:
|
|
176
|
+
"""获取角色详情
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
role_id: 角色 ID
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
Role: 角色对象,含菜单绑定信息(可选)
|
|
183
|
+
"""
|
|
60
184
|
return self._role.get(role_id)
|
|
61
185
|
|
|
62
186
|
def create_role(self, payload: CreateRoleRequest) -> int:
|
|
187
|
+
"""新建角色
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
payload: 角色创建请求体,支持初始菜单绑定
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
int: 新角色 ID
|
|
194
|
+
"""
|
|
63
195
|
return self._role.create(payload)
|
|
64
196
|
|
|
65
197
|
def update_role(self, role_id: int, payload: UpdateRoleRequest) -> None:
|
|
198
|
+
"""编辑角色
|
|
199
|
+
|
|
200
|
+
Args:
|
|
201
|
+
role_id: 角色 ID
|
|
202
|
+
payload: 更新字段(名称 / 类型 / 菜单绑定)
|
|
203
|
+
"""
|
|
66
204
|
self._role.update(role_id, payload)
|
|
67
205
|
|
|
68
206
|
def delete_role(self, role_id: int) -> None:
|
|
207
|
+
"""删除角色
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
role_id: 目标角色 ID
|
|
211
|
+
"""
|
|
69
212
|
self._role.delete(role_id)
|
|
70
213
|
|
|
71
214
|
def get_role_menus(self, role_id: int) -> List[int]:
|
|
215
|
+
"""获取角色已绑定菜单
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
role_id: 角色 ID
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
list[int]: 菜单 ID 列表
|
|
222
|
+
"""
|
|
72
223
|
return self._role.get_menus(role_id)
|
|
73
224
|
|
|
74
225
|
def set_role_menus(self, role_id: int, menu_ids: List[int]) -> None:
|
|
226
|
+
"""设置角色菜单绑定
|
|
227
|
+
|
|
228
|
+
Args:
|
|
229
|
+
role_id: 角色 ID
|
|
230
|
+
menu_ids: 菜单 ID 列表
|
|
231
|
+
"""
|
|
75
232
|
self._role.set_menus(role_id, menu_ids)
|
|
76
233
|
|
|
77
234
|
def search_roles(self, payload: SearchRolesRequest) -> SearchRolesResponse:
|
|
235
|
+
"""条件检索角色
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
payload: 检索条件(名称 / 角色 ID / 菜单 ID 等)
|
|
239
|
+
|
|
240
|
+
Returns:
|
|
241
|
+
SearchRolesResponse: 检索结果
|
|
242
|
+
"""
|
|
78
243
|
return self._role.search(payload)
|
|
79
244
|
|
|
80
245
|
# ==================================================
|
|
81
246
|
# USER 一级方法
|
|
82
247
|
# ==================================================
|
|
83
248
|
def list_users(self, payload: ListUsersRequest) -> ListUsersResponse:
|
|
249
|
+
"""分页查询用户
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
payload: 分页与关键词过滤
|
|
253
|
+
|
|
254
|
+
Returns:
|
|
255
|
+
ListUsersResponse: 用户分页结果
|
|
256
|
+
"""
|
|
84
257
|
return self._user.list(payload)
|
|
85
258
|
|
|
86
259
|
def get_user(self, user_id: int) -> User:
|
|
260
|
+
"""获取用户详情
|
|
261
|
+
|
|
262
|
+
Args:
|
|
263
|
+
user_id: 用户 ID
|
|
264
|
+
|
|
265
|
+
Returns:
|
|
266
|
+
User: 用户完整信息(含角色 / 标签等)
|
|
267
|
+
"""
|
|
87
268
|
return self._user.get(user_id)
|
|
88
269
|
|
|
89
270
|
def create_user(self, payload: CreateUserRequest) -> int:
|
|
271
|
+
"""新建用户
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
payload: 用户创建请求体
|
|
275
|
+
|
|
276
|
+
Returns:
|
|
277
|
+
int: 新用户 ID
|
|
278
|
+
"""
|
|
90
279
|
return self._user.create(payload)
|
|
91
280
|
|
|
92
281
|
def update_user(self, user_id: int, payload: UpdateUserRequest) -> None:
|
|
282
|
+
"""编辑用户
|
|
283
|
+
|
|
284
|
+
Args:
|
|
285
|
+
user_id: 用户 ID
|
|
286
|
+
payload: 更新字段(昵称 / 邮箱 / 角色 / 标签等)
|
|
287
|
+
"""
|
|
93
288
|
self._user.update(user_id, payload)
|
|
94
289
|
|
|
95
290
|
def delete_user(self, user_id: int) -> None:
|
|
291
|
+
"""删除用户
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
user_id: 目标用户 ID
|
|
295
|
+
"""
|
|
96
296
|
self._user.delete(user_id)
|
|
97
297
|
|
|
98
298
|
def set_user_roles(self, user_id: int, payload: SetUserRolesRequest) -> None:
|
|
299
|
+
"""重新绑定用户角色
|
|
300
|
+
|
|
301
|
+
Args:
|
|
302
|
+
user_id: 用户 ID
|
|
303
|
+
payload: 角色 ID 列表封装
|
|
304
|
+
"""
|
|
99
305
|
self._user.set_roles(user_id, payload)
|
|
100
306
|
|
|
101
307
|
def get_user_menus(self, user_id: int, parent_id: int | None = None, auth: str | None = None, ) -> List[TreeMenu]:
|
|
308
|
+
"""查询用户可见菜单
|
|
309
|
+
|
|
310
|
+
Args:
|
|
311
|
+
user_id: 用户 ID
|
|
312
|
+
parent_id: 仅返回指定父级菜单下的子菜单(可选)
|
|
313
|
+
auth: 仅返回特定权限标识的菜单(可选)
|
|
314
|
+
|
|
315
|
+
Returns:
|
|
316
|
+
list[TreeMenu]: 菜单树
|
|
317
|
+
"""
|
|
102
318
|
return self._user.get_menus(user_id, parent_id=parent_id, auth=auth)
|
|
103
319
|
|
|
104
320
|
def search_users(self, payload: SearchUsersRequest) -> SearchUsersResponse:
|
|
321
|
+
"""条件搜索用户
|
|
322
|
+
|
|
323
|
+
Args:
|
|
324
|
+
payload: 搜索条件(用户名 / 邮箱 / 角色等)
|
|
325
|
+
|
|
326
|
+
Returns:
|
|
327
|
+
SearchUsersResponse: 搜索结果
|
|
328
|
+
"""
|
|
105
329
|
return self._user.search(payload)
|
|
106
330
|
|
|
107
331
|
def search_one(self, payload: SearchUsersRequest) -> int:
|
|
332
|
+
"""搜索单个用户并返回其 ID
|
|
333
|
+
|
|
334
|
+
Args:
|
|
335
|
+
payload: 搜索条件
|
|
336
|
+
|
|
337
|
+
Returns:
|
|
338
|
+
int: 命中的用户 ID
|
|
339
|
+
|
|
340
|
+
Raises:
|
|
341
|
+
APIError: 未找到用户时抛出
|
|
342
|
+
"""
|
|
108
343
|
return self._user.search_one(payload)
|
|
109
344
|
|
|
110
345
|
@property
|