Skip to content

Commit f00c127

Browse files
committed
renameing groups
1 parent aee07f9 commit f00c127

File tree

11 files changed

+88
-42
lines changed

11 files changed

+88
-42
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from models_library.groups import GroupsByTypeTuple, StandardGroupCreate
2020
from models_library.users import UserID
2121
from pytest_simcore.helpers.webserver_login import NewUser, UserInfoDict
22-
from simcore_service_webserver.groups._groups_api import (
22+
from simcore_service_webserver.groups._groups_service import (
2323
add_user_in_group,
2424
create_standard_group,
2525
delete_standard_group,

services/web/server/src/simcore_service_webserver/groups/_groups_db.py renamed to services/web/server/src/simcore_service_webserver/groups/_groups_repository.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import re
22
from copy import deepcopy
3+
from datetime import datetime
34

45
import sqlalchemy as sa
56
from aiohttp import web
67
from common_library.groups_enums import GroupType
8+
from common_library.users_enums import UserRole, UserStatus
79
from models_library.basic_types import IDStr
810
from models_library.groups import (
911
AccessRightsDict,
@@ -15,8 +17,10 @@
1517
StandardGroupCreate,
1618
StandardGroupUpdate,
1719
)
20+
from models_library.products import ProductName
1821
from models_library.users import UserID
1922
from simcore_postgres_database.errors import UniqueViolation
23+
from simcore_postgres_database.models.users import users
2024
from simcore_postgres_database.utils_products import execute_get_or_create_product_group
2125
from simcore_postgres_database.utils_repos import (
2226
pass_or_acquire_connection,
@@ -747,3 +751,34 @@ async def auto_add_user_to_product_group(
747751
.on_conflict_do_nothing() # in case the user was already added to this group
748752
)
749753
return product_group_id
754+
755+
756+
async def auto_create_guest_user_and_add_to_product_group(
757+
app: web.Application,
758+
connection: AsyncConnection | None = None,
759+
*,
760+
random_user_name: str,
761+
email: str,
762+
password_hash: str,
763+
expires_at: datetime,
764+
product_name: ProductName,
765+
):
766+
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
767+
query = (
768+
users.insert()
769+
.values(
770+
name=random_user_name,
771+
email=email,
772+
password_hash=password_hash,
773+
status=UserStatus.ACTIVE,
774+
role=UserRole.GUEST,
775+
expires_at=expires_at,
776+
)
777+
.returning(users.c.id)
778+
)
779+
780+
user_id = await conn.scalar(query)
781+
782+
await auto_add_user_to_product_group(
783+
app, connection, user_id=user_id, product_name=product_name
784+
)

services/web/server/src/simcore_service_webserver/groups/_groups_handlers.py renamed to services/web/server/src/simcore_service_webserver/groups/_groups_rest.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from ..products.api import Product, get_current_product
2323
from ..security.decorators import permission_required
2424
from ..utils_aiohttp import envelope_json_response
25-
from . import _groups_api
25+
from . import _groups_service
2626
from ._common.exceptions_handlers import handle_plugin_requests_exceptions
2727
from ._common.schemas import (
2828
GroupsPathParams,
@@ -48,7 +48,7 @@ async def list_groups(request: web.Request):
4848
product: Product = get_current_product(request)
4949
req_ctx = GroupsRequestContext.model_validate(request)
5050

51-
groups_by_type = await _groups_api.list_user_groups_with_read_access(
51+
groups_by_type = await _groups_service.list_user_groups_with_read_access(
5252
request.app, user_id=req_ctx.user_id
5353
)
5454

@@ -60,7 +60,7 @@ async def list_groups(request: web.Request):
6060
if product.group_id:
6161
with suppress(GroupNotFoundError):
6262
# Product is optional
63-
my_product_group = await _groups_api.get_product_group_for_user(
63+
my_product_group = await _groups_service.get_product_group_for_user(
6464
app=request.app,
6565
user_id=req_ctx.user_id,
6666
product_gid=product.group_id,
@@ -90,7 +90,7 @@ async def get_group(request: web.Request):
9090
req_ctx = GroupsRequestContext.model_validate(request)
9191
path_params = parse_request_path_parameters_as(GroupsPathParams, request)
9292

93-
group, access_rights = await _groups_api.get_associated_group(
93+
group, access_rights = await _groups_service.get_associated_group(
9494
request.app, user_id=req_ctx.user_id, group_id=path_params.gid
9595
)
9696

@@ -107,7 +107,7 @@ async def create_group(request: web.Request):
107107

108108
create = await parse_request_body_as(GroupCreate, request)
109109

110-
group, access_rights = await _groups_api.create_standard_group(
110+
group, access_rights = await _groups_service.create_standard_group(
111111
request.app,
112112
user_id=req_ctx.user_id,
113113
create=create.to_model(),
@@ -127,7 +127,7 @@ async def update_group(request: web.Request):
127127
path_params = parse_request_path_parameters_as(GroupsPathParams, request)
128128
update: GroupUpdate = await parse_request_body_as(GroupUpdate, request)
129129

130-
group, access_rights = await _groups_api.update_standard_group(
130+
group, access_rights = await _groups_service.update_standard_group(
131131
request.app,
132132
user_id=req_ctx.user_id,
133133
group_id=path_params.gid,
@@ -147,7 +147,7 @@ async def delete_group(request: web.Request):
147147
req_ctx = GroupsRequestContext.model_validate(request)
148148
path_params = parse_request_path_parameters_as(GroupsPathParams, request)
149149

150-
await _groups_api.delete_standard_group(
150+
await _groups_service.delete_standard_group(
151151
request.app, user_id=req_ctx.user_id, group_id=path_params.gid
152152
)
153153

@@ -168,7 +168,7 @@ async def get_all_group_users(request: web.Request):
168168
req_ctx = GroupsRequestContext.model_validate(request)
169169
path_params = parse_request_path_parameters_as(GroupsPathParams, request)
170170

171-
users_in_group = await _groups_api.list_group_members(
171+
users_in_group = await _groups_service.list_group_members(
172172
request.app, req_ctx.user_id, path_params.gid
173173
)
174174

@@ -189,7 +189,7 @@ async def add_group_user(request: web.Request):
189189
path_params = parse_request_path_parameters_as(GroupsPathParams, request)
190190
added: GroupUserAdd = await parse_request_body_as(GroupUserAdd, request)
191191

192-
await _groups_api.add_user_in_group(
192+
await _groups_service.add_user_in_group(
193193
request.app,
194194
req_ctx.user_id,
195195
path_params.gid,
@@ -212,7 +212,7 @@ async def get_group_user(request: web.Request):
212212
req_ctx = GroupsRequestContext.model_validate(request)
213213
path_params = parse_request_path_parameters_as(GroupsUsersPathParams, request)
214214

215-
user = await _groups_api.get_group_member(
215+
user = await _groups_service.get_group_member(
216216
request.app, req_ctx.user_id, path_params.gid, path_params.uid
217217
)
218218

@@ -228,7 +228,7 @@ async def update_group_user(request: web.Request):
228228
path_params = parse_request_path_parameters_as(GroupsUsersPathParams, request)
229229
update: GroupUserUpdate = await parse_request_body_as(GroupUserUpdate, request)
230230

231-
user = await _groups_api.update_group_member(
231+
user = await _groups_service.update_group_member(
232232
request.app,
233233
user_id=req_ctx.user_id,
234234
group_id=path_params.gid,
@@ -246,7 +246,7 @@ async def update_group_user(request: web.Request):
246246
async def delete_group_user(request: web.Request):
247247
req_ctx = GroupsRequestContext.model_validate(request)
248248
path_params = parse_request_path_parameters_as(GroupsUsersPathParams, request)
249-
await _groups_api.delete_group_member(
249+
await _groups_service.delete_group_member(
250250
request.app, req_ctx.user_id, path_params.gid, path_params.uid
251251
)
252252

services/web/server/src/simcore_service_webserver/groups/_groups_api.py renamed to services/web/server/src/simcore_service_webserver/groups/_groups_service.py

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from pydantic import EmailStr
1616

1717
from ..users.api import get_user
18-
from . import _groups_db
18+
from . import _groups_repository
1919
from .exceptions import GroupsError
2020

2121
#
@@ -24,7 +24,7 @@
2424

2525

2626
async def get_group_from_gid(app: web.Application, group_id: GroupID) -> Group | None:
27-
group_db = await _groups_db.get_group_from_gid(app, group_id=group_id)
27+
group_db = await _groups_repository.get_group_from_gid(app, group_id=group_id)
2828

2929
if group_db:
3030
return Group.model_construct(**group_db.model_dump())
@@ -45,21 +45,23 @@ async def list_user_groups_with_read_access(
4545
# NOTE: Careful! It seems we are filtering out groups, such as Product Groups,
4646
# because they do not have read access. I believe this was done because the
4747
# frontend did not want to display them.
48-
return await _groups_db.get_all_user_groups_with_read_access(app, user_id=user_id)
48+
return await _groups_repository.get_all_user_groups_with_read_access(
49+
app, user_id=user_id
50+
)
4951

5052

5153
async def list_user_groups_ids_with_read_access(
5254
app: web.Application, *, user_id: UserID
5355
) -> list[GroupID]:
54-
return await _groups_db.get_ids_of_all_user_groups_with_read_access(
56+
return await _groups_repository.get_ids_of_all_user_groups_with_read_access(
5557
app, user_id=user_id
5658
)
5759

5860

5961
async def list_all_user_groups_ids(
6062
app: web.Application, *, user_id: UserID
6163
) -> list[GroupID]:
62-
return await _groups_db.get_ids_of_all_user_groups(app, user_id=user_id)
64+
return await _groups_repository.get_ids_of_all_user_groups(app, user_id=user_id)
6365

6466

6567
async def get_product_group_for_user(
@@ -69,7 +71,7 @@ async def get_product_group_for_user(
6971
Returns product's group if user belongs to it, otherwise it
7072
raises GroupNotFoundError
7173
"""
72-
return await _groups_db.get_product_group_for_user(
74+
return await _groups_repository.get_product_group_for_user(
7375
app, user_id=user_id, product_gid=product_gid
7476
)
7577

@@ -90,7 +92,7 @@ async def create_standard_group(
9092
raises GroupNotFoundError
9193
raises UserInsufficientRightsError: needs WRITE access
9294
"""
93-
return await _groups_db.create_standard_group(
95+
return await _groups_repository.create_standard_group(
9496
app,
9597
user_id=user_id,
9698
create=create,
@@ -108,7 +110,9 @@ async def get_associated_group(
108110
raises GroupNotFoundError
109111
raises UserInsufficientRightsError: needs READ access
110112
"""
111-
return await _groups_db.get_user_group(app, user_id=user_id, group_id=group_id)
113+
return await _groups_repository.get_user_group(
114+
app, user_id=user_id, group_id=group_id
115+
)
112116

113117

114118
async def update_standard_group(
@@ -124,7 +128,7 @@ async def update_standard_group(
124128
raises UserInsufficientRightsError: needs WRITE access
125129
"""
126130

127-
return await _groups_db.update_standard_group(
131+
return await _groups_repository.update_standard_group(
128132
app,
129133
user_id=user_id,
130134
group_id=group_id,
@@ -140,7 +144,7 @@ async def delete_standard_group(
140144
raises GroupNotFoundError
141145
raises UserInsufficientRightsError: needs DELETE access
142146
"""
143-
return await _groups_db.delete_standard_group(
147+
return await _groups_repository.delete_standard_group(
144148
app, user_id=user_id, group_id=group_id
145149
)
146150

@@ -153,7 +157,9 @@ async def delete_standard_group(
153157
async def list_group_members(
154158
app: web.Application, user_id: UserID, group_id: GroupID
155159
) -> list[GroupMember]:
156-
return await _groups_db.list_users_in_group(app, user_id=user_id, group_id=group_id)
160+
return await _groups_repository.list_users_in_group(
161+
app, user_id=user_id, group_id=group_id
162+
)
157163

158164

159165
async def get_group_member(
@@ -163,7 +169,7 @@ async def get_group_member(
163169
the_user_id_in_group: UserID,
164170
) -> GroupMember:
165171

166-
return await _groups_db.get_user_in_group(
172+
return await _groups_repository.get_user_in_group(
167173
app,
168174
user_id=user_id,
169175
group_id=group_id,
@@ -178,7 +184,7 @@ async def update_group_member(
178184
the_user_id_in_group: UserID,
179185
access_rights: AccessRightsDict,
180186
) -> GroupMember:
181-
return await _groups_db.update_user_in_group(
187+
return await _groups_repository.update_user_in_group(
182188
app,
183189
user_id=user_id,
184190
group_id=group_id,
@@ -193,7 +199,7 @@ async def delete_group_member(
193199
group_id: GroupID,
194200
the_user_id_in_group: UserID,
195201
) -> None:
196-
return await _groups_db.delete_user_from_group(
202+
return await _groups_repository.delete_user_from_group(
197203
app,
198204
user_id=user_id,
199205
group_id=group_id,
@@ -205,7 +211,7 @@ async def is_user_by_email_in_group(
205211
app: web.Application, user_email: LowerCaseEmailStr, group_id: GroupID
206212
) -> bool:
207213

208-
return await _groups_db.is_user_by_email_in_group(
214+
return await _groups_repository.is_user_by_email_in_group(
209215
app,
210216
email=user_email,
211217
group_id=group_id,
@@ -214,19 +220,24 @@ async def is_user_by_email_in_group(
214220

215221
async def auto_add_user_to_groups(app: web.Application, user_id: UserID) -> None:
216222
user: dict = await get_user(app, user_id)
217-
return await _groups_db.auto_add_user_to_groups(app, user=user)
223+
return await _groups_repository.auto_add_user_to_groups(app, user=user)
218224

219225

220226
async def auto_add_user_to_product_group(
221227
app: web.Application,
222228
user_id: UserID,
223229
product_name: ProductName,
224230
) -> GroupID:
225-
return await _groups_db.auto_add_user_to_product_group(
231+
return await _groups_repository.auto_add_user_to_product_group(
226232
app, user_id=user_id, product_name=product_name
227233
)
228234

229235

236+
auto_create_guest_user_and_add_to_product_group = (
237+
_groups_repository.auto_create_guest_user_and_add_to_product_group
238+
)
239+
240+
230241
def _only_one_true(*args):
231242
return sum(bool(arg) for arg in args) == 1
232243

@@ -254,12 +265,12 @@ async def add_user_in_group(
254265
raise GroupsError(msg=msg)
255266

256267
if new_by_user_email:
257-
user = await _groups_db.get_user_from_email(
268+
user = await _groups_repository.get_user_from_email(
258269
app, email=new_by_user_email, caller_user_id=user_id
259270
)
260271
new_by_user_id = user.id
261272

262-
return await _groups_db.add_new_user_in_group(
273+
return await _groups_repository.add_new_user_in_group(
263274
app,
264275
user_id=user_id,
265276
group_id=group_id,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#
22
# Domain-Specific Interfaces
33
#
4-
from ._groups_api import (
4+
from ._groups_service import (
55
add_user_in_group,
66
auto_add_user_to_groups,
77
auto_add_user_to_product_group,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from .._constants import APP_SETTINGS_KEY
77
from ..products.plugin import setup_products
8-
from . import _classifiers_handlers, _groups_handlers
8+
from . import _classifiers_handlers, _groups_rest
99

1010
_logger = logging.getLogger(__name__)
1111

@@ -23,5 +23,5 @@ def setup_groups(app: web.Application):
2323
# plugin dependencies
2424
setup_products(app)
2525

26-
app.router.add_routes(_groups_handlers.routes)
26+
app.router.add_routes(_groups_rest.routes)
2727
app.router.add_routes(_classifiers_handlers.routes)

services/web/server/tests/integration/01/test_garbage_collection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from simcore_service_webserver.garbage_collector import _core as gc_core
3838
from simcore_service_webserver.garbage_collector._tasks_core import _GC_TASK_NAME
3939
from simcore_service_webserver.garbage_collector.plugin import setup_garbage_collector
40-
from simcore_service_webserver.groups._groups_api import create_standard_group
40+
from simcore_service_webserver.groups._groups_service import create_standard_group
4141
from simcore_service_webserver.groups.api import add_user_in_group
4242
from simcore_service_webserver.login.plugin import setup_login
4343
from simcore_service_webserver.projects._crud_api_delete import get_scheduled_tasks

0 commit comments

Comments
 (0)