Skip to content

Commit 8712d3e

Browse files
committed
Add way to list org cluster users
1 parent 63fe762 commit 8712d3e

File tree

3 files changed

+90
-10
lines changed

3 files changed

+90
-10
lines changed

neuro_admin_client/__init__.py

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,19 +103,28 @@ async def delete_cluster(self, name: str) -> Cluster:
103103

104104
@overload
105105
async def list_cluster_users(
106-
self, cluster_name: str, with_user_info: Literal[True]
106+
self,
107+
cluster_name: str,
108+
with_user_info: Literal[True],
109+
org_name: Optional[str] = None,
107110
) -> List[ClusterUserWithInfo]:
108111
...
109112

110113
@overload
111114
async def list_cluster_users(
112-
self, cluster_name: str, with_user_info: Literal[False] = ...
115+
self,
116+
cluster_name: str,
117+
with_user_info: Literal[False] = ...,
118+
org_name: Optional[str] = None,
113119
) -> List[ClusterUser]:
114120
...
115121

116122
@abstractmethod
117123
async def list_cluster_users(
118-
self, cluster_name: str, with_user_info: bool = False
124+
self,
125+
cluster_name: str,
126+
with_user_info: bool = False,
127+
org_name: Optional[str] = None,
119128
) -> Union[List[ClusterUser], List[ClusterUserWithInfo]]:
120129
...
121130

@@ -776,22 +785,35 @@ def _parse_cluster_user(
776785

777786
@overload
778787
async def list_cluster_users(
779-
self, cluster_name: str, with_user_info: Literal[True]
788+
self,
789+
cluster_name: str,
790+
with_user_info: Literal[True],
791+
org_name: Optional[str] = None,
780792
) -> List[ClusterUserWithInfo]:
781793
...
782794

783795
@overload
784796
async def list_cluster_users(
785-
self, cluster_name: str, with_user_info: Literal[False] = ...
797+
self,
798+
cluster_name: str,
799+
with_user_info: Literal[False] = ...,
800+
org_name: Optional[str] = None,
786801
) -> List[ClusterUser]:
787802
...
788803

789804
async def list_cluster_users(
790-
self, cluster_name: str, with_user_info: bool = False
805+
self,
806+
cluster_name: str,
807+
with_user_info: bool = False,
808+
org_name: Optional[str] = None,
791809
) -> Union[List[ClusterUser], List[ClusterUserWithInfo]]:
810+
if org_name:
811+
url = f"clusters/{cluster_name}/orgs/{org_name}/users"
812+
else:
813+
url = f"clusters/{cluster_name}/users"
792814
async with self._request(
793815
"GET",
794-
f"clusters/{cluster_name}/users",
816+
url,
795817
params={"with_user_info": _to_query_bool(with_user_info)},
796818
) as resp:
797819
resp.raise_for_status()
@@ -1804,18 +1826,27 @@ async def delete_cluster(self, name: str) -> Cluster:
18041826

18051827
@overload
18061828
async def list_cluster_users(
1807-
self, cluster_name: str, with_user_info: Literal[True]
1829+
self,
1830+
cluster_name: str,
1831+
with_user_info: Literal[True],
1832+
org_name: Optional[str] = None,
18081833
) -> List[ClusterUserWithInfo]:
18091834
...
18101835

18111836
@overload
18121837
async def list_cluster_users(
1813-
self, cluster_name: str, with_user_info: Literal[False] = ...
1838+
self,
1839+
cluster_name: str,
1840+
with_user_info: Literal[False] = ...,
1841+
org_name: Optional[str] = None,
18141842
) -> List[ClusterUser]:
18151843
...
18161844

18171845
async def list_cluster_users(
1818-
self, cluster_name: str, with_user_info: bool = False
1846+
self,
1847+
cluster_name: str,
1848+
with_user_info: bool = False,
1849+
org_name: Optional[str] = None,
18191850
) -> Union[List[ClusterUser], List[ClusterUserWithInfo]]:
18201851
return [self.DUMMY_CLUSTER_USER]
18211852

tests/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,12 +443,14 @@ async def handle_cluster_user_list(
443443
self, request: aiohttp.web.Request
444444
) -> aiohttp.web.Response:
445445
cluster_name = request.match_info["cname"]
446+
org_name = request.match_info.get("oname")
446447
resp = [
447448
self._serialize_cluster_user(
448449
cluster_user, _parse_bool(request.query.get("with_user_info", "false"))
449450
)
450451
for cluster_user in self.cluster_users
451452
if cluster_user.cluster_name == cluster_name
453+
and (org_name is None or cluster_user.org_name == org_name)
452454
]
453455
return aiohttp.web.json_response(resp)
454456

@@ -859,6 +861,10 @@ def _create_app() -> aiohttp.web.Application:
859861
admin_server.handle_org_cluster_delete,
860862
),
861863
# org user endpoints:
864+
aiohttp.web.get(
865+
"/api/v1/clusters/{cname}/orgs/{oname}/users",
866+
admin_server.handle_cluster_user_list,
867+
),
862868
aiohttp.web.get(
863869
"/api/v1/clusters/{cname}/orgs/{oname}/users/{uname}",
864870
admin_server.handle_cluster_user_get,

tests/test_admin_client.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,49 @@ async def test_list_clusters_user(self, mock_admin_server: AdminServer) -> None:
405405
assert len(cluster_users) == 2
406406
assert set(cluster_users) == set(mock_admin_server.cluster_users)
407407

408+
async def test_list_clusters_user_with_org(
409+
self, mock_admin_server: AdminServer
410+
) -> None:
411+
mock_admin_server.users = [
412+
User(
413+
name="test1",
414+
email="email",
415+
),
416+
User(
417+
name="test2",
418+
email="email",
419+
),
420+
]
421+
mock_admin_server.clusters = [
422+
Cluster(
423+
name="cluster",
424+
),
425+
]
426+
mock_admin_server.cluster_users = [
427+
ClusterUser(
428+
user_name="test1",
429+
cluster_name="cluster",
430+
org_name=None,
431+
balance=Balance(),
432+
quota=Quota(),
433+
role=ClusterUserRoleType.USER,
434+
),
435+
ClusterUser(
436+
user_name="test2",
437+
cluster_name="cluster",
438+
org_name="org1",
439+
balance=Balance(),
440+
quota=Quota(),
441+
role=ClusterUserRoleType.ADMIN,
442+
),
443+
]
444+
445+
async with AdminClient(base_url=mock_admin_server.url) as client:
446+
cluster_users = await client.list_cluster_users("cluster", org_name="org1")
447+
448+
assert len(cluster_users) == 1
449+
assert set(cluster_users) == {mock_admin_server.cluster_users[1]}
450+
408451
async def test_get_cluster_user(self, mock_admin_server: AdminServer) -> None:
409452
mock_admin_server.users = [
410453
User(

0 commit comments

Comments
 (0)