Skip to content

Commit 4a694da

Browse files
committed
mv api -> service
1 parent 3e37a1b commit 4a694da

File tree

9 files changed

+570
-460
lines changed

9 files changed

+570
-460
lines changed

services/web/server/src/simcore_service_webserver/exporter/_handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async def export_project(request: web.Request):
4949
project_uuid,
5050
ProjectStatus.EXPORTING,
5151
user_id,
52-
await get_user_fullname(request.app, user_id),
52+
await get_user_fullname(request.app, user_id=user_id),
5353
):
5454
await retrieve_and_notify_project_locked_state(
5555
user_id, project_uuid, request.app

services/web/server/src/simcore_service_webserver/garbage_collector/_core_guests.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import asyncpg.exceptions
66
from aiohttp import web
77
from models_library.projects import ProjectID
8+
from models_library.users import UserID, UserNameID
89
from redis.asyncio import Redis
910
from servicelib.common_headers import UNDEFINED_DEFAULT_SIMCORE_USER_AGENT_VALUE
1011
from simcore_postgres_database.errors import DatabaseError
@@ -201,7 +202,9 @@ async def remove_users_manually_marked_as_guests(
201202
}
202203

203204
# Prevent creating this list if a guest user
204-
guest_users: list[tuple[int, str]] = await get_guest_user_ids_and_names(app)
205+
guest_users: list[tuple[UserID, UserNameID]] = await get_guest_user_ids_and_names(
206+
app
207+
)
205208

206209
for guest_user_id, guest_user_name in guest_users:
207210
# Prevents removing GUEST users that were automatically (NOT manually) created

services/web/server/src/simcore_service_webserver/projects/_crud_api_create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ async def _copy_files_from_source_project(
171171
source_project["uuid"],
172172
ProjectStatus.CLONING,
173173
user_id,
174-
await get_user_fullname(app, user_id),
174+
await get_user_fullname(app, user_id=user_id),
175175
)
176176
)
177177
starting_value = task_progress.percent

services/web/server/src/simcore_service_webserver/projects/_crud_handlers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,8 @@ async def delete_project(request: web.Request):
448448
)
449449
if project_users:
450450
other_user_names = {
451-
await get_user_fullname(request.app, uid) for uid in project_users
451+
await get_user_fullname(request.app, user_id=uid)
452+
for uid in project_users
452453
}
453454
raise web.HTTPForbidden(
454455
reason=f"Project is open by {other_user_names}. "

services/web/server/src/simcore_service_webserver/projects/projects_api.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ async def try_open_project_for_user(
12431243
project_uuid,
12441244
ProjectStatus.OPENING,
12451245
user_id,
1246-
await get_user_fullname(app, user_id),
1246+
await get_user_fullname(app, user_id=user_id),
12471247
notify_users=False,
12481248
):
12491249
with managed_resource(user_id, client_session_id, app) as user_session:
@@ -1413,22 +1413,23 @@ async def _get_project_lock_state(
14131413
f"{set_user_ids=}",
14141414
)
14151415
usernames: list[FullNameDict] = [
1416-
await get_user_fullname(app, uid) for uid in set_user_ids
1416+
await get_user_fullname(app, user_id=uid) for uid in set_user_ids
14171417
]
14181418
# let's check if the project is opened by the same user, maybe already opened or closed in a orphaned session
1419-
if set_user_ids.issubset({user_id}):
1420-
if not await _user_has_another_client_open(user_session_id_list, app):
1421-
# in this case the project is re-openable by the same user until it gets closed
1422-
log.debug(
1423-
"project [%s] is in use by the same user [%s] that is currently disconnected, so it is unlocked for this specific user and opened",
1424-
f"{project_uuid=}",
1425-
f"{set_user_ids=}",
1426-
)
1427-
return ProjectLocked(
1428-
value=False,
1429-
owner=Owner(user_id=next(iter(set_user_ids)), **usernames[0]),
1430-
status=ProjectStatus.OPENED,
1431-
)
1419+
if set_user_ids.issubset({user_id}) and not await _user_has_another_client_open(
1420+
user_session_id_list, app
1421+
):
1422+
# in this case the project is re-openable by the same user until it gets closed
1423+
log.debug(
1424+
"project [%s] is in use by the same user [%s] that is currently disconnected, so it is unlocked for this specific user and opened",
1425+
f"{project_uuid=}",
1426+
f"{set_user_ids=}",
1427+
)
1428+
return ProjectLocked(
1429+
value=False,
1430+
owner=Owner(user_id=next(iter(set_user_ids)), **usernames[0]),
1431+
status=ProjectStatus.OPENED,
1432+
)
14321433
# the project is opened in another tab or browser, or by another user, both case resolves to the project being locked, and opened
14331434
log.debug(
14341435
"project [%s] is in use by another user [%s], so it is locked",
@@ -1712,7 +1713,9 @@ async def remove_project_dynamic_services(
17121713
user_id,
17131714
)
17141715

1715-
user_name_data: FullNameDict = user_name or await get_user_fullname(app, user_id)
1716+
user_name_data: FullNameDict = user_name or await get_user_fullname(
1717+
app, user_id=user_id
1718+
)
17161719

17171720
user_role: UserRole | None = None
17181721
try:

services/web/server/src/simcore_service_webserver/users/_common/models.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,30 @@
1-
from typing import Annotated, Any, NamedTuple, Self
1+
from typing import Annotated, Any, NamedTuple, Self, TypedDict
22

3+
from models_library.basic_types import IDStr
34
from models_library.emails import LowerCaseEmailStr
4-
from pydantic import BaseModel, ConfigDict, Field
5+
from pydantic import BaseModel, ConfigDict, EmailStr, Field
6+
7+
8+
class FullNameDict(TypedDict):
9+
first_name: str | None
10+
last_name: str | None
11+
12+
13+
class UserDisplayAndIdNamesTuple(NamedTuple):
14+
name: str
15+
email: EmailStr
16+
first_name: IDStr
17+
last_name: IDStr
18+
19+
@property
20+
def full_name(self) -> IDStr:
21+
return IDStr.concatenate(self.first_name, self.last_name)
22+
23+
24+
class UserIdNamesTuple(NamedTuple):
25+
name: str
26+
email: str
27+
528

629
#
730
# DB models

0 commit comments

Comments
 (0)