Skip to content

Commit 74c9fda

Browse files
committed
model conversion and fitures
1 parent 2dd48d4 commit 74c9fda

File tree

3 files changed

+31
-30
lines changed

3 files changed

+31
-30
lines changed

packages/models-library/src/models_library/api_schemas_webserver/groups.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from contextlib import suppress
2-
from typing import Annotated
2+
from typing import Annotated, Self
33

44
from common_library.basic_types import DEFAULT_FACTORY
55
from models_library.basic_types import IDStr
@@ -16,6 +16,7 @@
1616
)
1717

1818
from ..emails import LowerCaseEmailStr
19+
from ..groups import AccessRightsDict, Group
1920
from ..users import UserID
2021
from ..utils.common_validators import create__check_only_one_is_set__root_validator
2122
from ._base import InputSchema, OutputSchema
@@ -59,6 +60,16 @@ class GroupGet(OutputSchema):
5960
),
6061
] = DEFAULT_FACTORY
6162

63+
@classmethod
64+
def from_model(cls, group: Group, access_rights: AccessRightsDict) -> Self:
65+
# Fuses both dataset into GroupSet
66+
return cls.model_validate(
67+
{
68+
**group.model_dump(),
69+
"access_rights": access_rights,
70+
}
71+
)
72+
6273
model_config = ConfigDict(
6374
json_schema_extra={
6475
"examples": [

packages/pytest-simcore/src/pytest_simcore/simcore_webserver_groups_fixtures.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,19 @@
1616
from aiohttp import web
1717
from aiohttp.test_utils import TestClient
1818
from models_library.api_schemas_webserver.groups import GroupGet
19+
from models_library.groups import GroupsByTypeTuple
1920
from models_library.users import UserID
2021
from pytest_simcore.helpers.webserver_login import NewUser, UserInfoDict
2122
from simcore_service_webserver.groups import _groups_db
22-
from simcore_service_webserver.groups._common.types import GroupsByTypeTuple
2323
from simcore_service_webserver.groups._groups_api import (
24+
add_user_in_group,
25+
delete_organization,
2426
list_user_groups_with_read_access,
2527
)
26-
from simcore_service_webserver.groups.api import add_user_in_group, delete_user_group
2728

2829

2930
def _to_group_get_json(group, access_rights) -> dict[str, Any]:
30-
return GroupGet.model_validate(
31-
{
32-
**group.model_dump(),
33-
"access_rights": access_rights,
34-
}
35-
).model_dump(mode="json")
31+
return GroupGet.from_model(group, access_rights).model_dump(mode="json")
3632

3733

3834
#
@@ -72,7 +68,7 @@ async def logged_user_groups_by_type(
7268
assert client.app
7369

7470
groups_by_type = await list_user_groups_with_read_access(
75-
client.app, logged_user["id"]
71+
client.app, user_id=logged_user["id"]
7672
)
7773
assert groups_by_type.primary
7874
assert groups_by_type.everyone
@@ -152,8 +148,12 @@ async def standard_groups(
152148
yield standard_groups
153149

154150
# clean groups
155-
await delete_user_group(client.app, owner_user["id"], sparc_group["gid"])
156-
await delete_user_group(client.app, owner_user["id"], team_black_group["gid"])
151+
await delete_organization(
152+
client.app, user_id=owner_user["id"], group_id=sparc_group["gid"]
153+
)
154+
await delete_organization(
155+
client.app, user_id=owner_user["id"], group_id=team_black_group["gid"]
156+
)
157157

158158

159159
@pytest.fixture

services/web/server/src/simcore_service_webserver/groups/_groups_handlers.py

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
GroupUserUpdate,
1212
MyGroupsGet,
1313
)
14-
from models_library.groups import AccessRightsDict, Group, GroupMember
14+
from models_library.groups import GroupMember
1515
from servicelib.aiohttp import status
1616
from servicelib.aiohttp.requests_validation import (
1717
parse_request_body_as,
@@ -38,16 +38,6 @@
3838
routes = web.RouteTableDef()
3939

4040

41-
def _to_groupget_model(group: Group, access_rights: AccessRightsDict) -> GroupGet:
42-
# Fuses both dataset into GroupSet
43-
return GroupGet.model_validate(
44-
{
45-
**group.model_dump(),
46-
"access_rights": access_rights,
47-
}
48-
)
49-
50-
5141
@routes.get(f"/{API_VTAG}/groups", name="list_groups")
5242
@login_required
5343
@permission_required("groups.read")
@@ -78,10 +68,10 @@ async def list_groups(request: web.Request):
7868
)
7969

8070
my_groups = MyGroupsGet(
81-
me=_to_groupget_model(*groups_by_type.primary),
82-
organizations=[_to_groupget_model(*gi) for gi in groups_by_type.standard],
83-
all=_to_groupget_model(*groups_by_type.everyone),
84-
product=_to_groupget_model(*my_product_group) if my_product_group else None,
71+
me=GroupGet.from_model(*groups_by_type.primary),
72+
organizations=[GroupGet.from_model(*gi) for gi in groups_by_type.standard],
73+
all=GroupGet.from_model(*groups_by_type.everyone),
74+
product=GroupGet.from_model(*my_product_group) if my_product_group else None,
8575
)
8676

8777
return envelope_json_response(my_groups)
@@ -105,7 +95,7 @@ async def get_group(request: web.Request):
10595
request.app, user_id=req_ctx.user_id, group_id=path_params.gid
10696
)
10797

108-
group = _to_groupget_model(group, access_rights)
98+
group = GroupGet.from_model(group, access_rights)
10999
return envelope_json_response(group)
110100

111101

@@ -125,7 +115,7 @@ async def create_group(request: web.Request):
125115
new_group_values=create.model_dump(mode="json", exclude_unset=True),
126116
)
127117

128-
created_group = _to_groupget_model(group, access_rights)
118+
created_group = GroupGet.from_model(group, access_rights)
129119
return envelope_json_response(created_group, status_cls=web.HTTPCreated)
130120

131121

@@ -147,7 +137,7 @@ async def update_group(request: web.Request):
147137
new_group_values=new_group_values,
148138
)
149139

150-
updated_group = _to_groupget_model(group, access_rights)
140+
updated_group = GroupGet.from_model(group, access_rights)
151141
return envelope_json_response(updated_group)
152142

153143

0 commit comments

Comments
 (0)