Skip to content

Commit b5dd68a

Browse files
improve DB list project model
1 parent 9b59cdf commit b5dd68a

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

packages/models-library/src/models_library/projects.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
from uuid import UUID
99

1010
from common_library.basic_types import DEFAULT_FACTORY
11-
from models_library.basic_types import ConstrainedStr
12-
from models_library.folders import FolderID
13-
from models_library.workspaces import WorkspaceID
1411
from pydantic import (
1512
BaseModel,
1613
ConfigDict,
@@ -21,8 +18,11 @@
2118
)
2219

2320
from .basic_regex import DATE_RE, UUID_RE_BASE
21+
from .basic_types import ConstrainedStr
2422
from .emails import LowerCaseEmailStr
23+
from .folders import FolderID
2524
from .groups import GroupID
25+
from .products import ProductName
2626
from .projects_access import AccessRights, GroupIDStr
2727
from .projects_nodes import Node
2828
from .projects_nodes_io import NodeIDStr
@@ -33,6 +33,7 @@
3333
none_to_empty_str_pre_validator,
3434
)
3535
from .utils.enums import StrAutoEnum
36+
from .workspaces import WorkspaceID
3637

3738
ProjectID: TypeAlias = UUID
3839
CommitID: TypeAlias = int
@@ -147,6 +148,32 @@ def _convert_sql_alchemy_enum(cls, v):
147148
)
148149

149150

151+
class ProjectListAtDB(BaseProjectModel):
152+
# uuid <- BaseProjectModel
153+
# name <- BaseProjectModel
154+
# description <- BaseProjectModel
155+
# thumbnail <- BaseProjectModel
156+
# workbench <- BaseProjectModel
157+
# creation_date <- BaseProjectModel
158+
# last_change_date <- BaseProjectModel
159+
id: int
160+
type: ProjectType
161+
template_type: ProjectTemplateType | None
162+
prj_owner: int | None
163+
ui: dict[str, Any] | None
164+
classifiers: list[ClassifierID] | None
165+
dev: dict[str, Any] | None
166+
quality: dict[str, Any]
167+
published: bool | None
168+
hidden: bool
169+
workspace_id: WorkspaceID | None
170+
trashed: datetime | None
171+
trashed_by: UserID | None
172+
trashed_explicitly: bool
173+
product_name: ProductName
174+
folder_id: FolderID | None
175+
176+
150177
class Project(BaseProjectModel):
151178
# NOTE: This is the pydantic pendant of project-v0.0.1.json used in the API of the webserver/webclient
152179
# NOT for usage with DB!!

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from aiohttp import web
1212
from models_library.folders import FolderID, FolderQuery, FolderScope
13-
from models_library.projects import ProjectID, ProjectTemplateType
13+
from models_library.projects import ProjectTemplateType
1414
from models_library.rest_ordering import OrderBy
1515
from models_library.users import UserID
1616
from models_library.workspaces import WorkspaceID, WorkspaceQuery, WorkspaceScope
@@ -21,14 +21,15 @@
2121
ProjectTemplateType as ProjectTemplateTypeDB,
2222
)
2323
from simcore_postgres_database.webserver_models import ProjectType as ProjectTypeDB
24-
from simcore_service_webserver.users.api import get_user_email_legacy
2524

2625
from ..folders import _folders_repository
26+
from ..users.api import get_user_email_legacy
2727
from ..workspaces.api import check_user_workspace_access
2828
from . import _projects_service
2929
from ._access_rights_repository import batch_get_project_access_rights
3030
from ._projects_repository import batch_get_trashed_by_primary_gid
31-
from ._projects_repository_legacy import ProjectDBAPI, convert_to_schema_names
31+
from ._projects_repository_legacy import ProjectDBAPI
32+
from ._projects_repository_legacy_utils import convert_to_schema_names
3233
from .models import ProjectDict, ProjectTypeAPI
3334

3435

@@ -61,7 +62,7 @@ async def _aggregate_data_to_projects_from_other_sources(
6162
"""
6263
# updating `project.trashed_by_primary_gid`
6364
trashed_by_primary_gid_values = await batch_get_trashed_by_primary_gid(
64-
app, projects_uuids=[ProjectID(p["uuid"]) for p in db_projects]
65+
app, projects_uuids=[p["uuid"] for p in db_projects]
6566
)
6667

6768
_batch_update("trashed_by_primary_gid", trashed_by_primary_gid_values, db_projects)
@@ -70,7 +71,7 @@ async def _aggregate_data_to_projects_from_other_sources(
7071
project_to_access_rights = await batch_get_project_access_rights(
7172
app=app,
7273
projects_uuids_with_workspace_id=[
73-
(ProjectID(p["uuid"]), p["workspaceId"]) for p in db_projects
74+
(p["uuid"], p["workspaceId"]) for p in db_projects
7475
],
7576
)
7677

@@ -90,7 +91,7 @@ async def _aggregate_data_to_projects_from_other_sources(
9091
)
9192

9293
for project in updated_projects:
93-
project["accessRights"] = project_to_access_rights[project["uuid"]]
94+
project["accessRights"] = project_to_access_rights[f"{project['uuid']}"]
9495

9596
return updated_projects
9697

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@
1919
from models_library.folders import FolderQuery, FolderScope
2020
from models_library.groups import GroupID
2121
from models_library.products import ProductName
22-
from models_library.projects import ProjectAtDB, ProjectID, ProjectIDStr
22+
from models_library.projects import (
23+
ProjectID,
24+
ProjectIDStr,
25+
ProjectListAtDB,
26+
)
2327
from models_library.projects_comments import CommentID, ProjectsCommentsDB
2428
from models_library.projects_nodes import Node
2529
from models_library.projects_nodes_io import NodeID, NodeIDStr
@@ -584,7 +588,7 @@ async def list_projects_dicts( # pylint: disable=too-many-arguments,too-many-st
584588
limit: int | None = None,
585589
# order
586590
order_by: OrderBy = DEFAULT_ORDER_BY,
587-
) -> tuple[list[ProjectAtDB], int]:
591+
) -> tuple[list[ProjectListAtDB], int]:
588592
async with self.engine.acquire() as conn:
589593
user_groups_proxy: list[RowProxy] = await self._list_user_groups(
590594
conn, user_id
@@ -667,15 +671,19 @@ async def list_projects_dicts( # pylint: disable=too-many-arguments,too-many-st
667671
projects.c.id,
668672
)
669673

670-
prjs_at_db = [
671-
ProjectAtDB.model_validate(row)
674+
prjs_output = [
675+
ProjectListAtDB.model_validate(row)
672676
async for row in conn.execute(
673677
combined_query.offset(offset).limit(limit)
674678
)
675679
]
680+
# async for row in conn.execute(combined_query.offset(offset).limit(limit)):
681+
# ProjectListAtDB.model_validate(row)
682+
# prj: dict[str, Any] = dict(row.items())
683+
# prjs_output.append(prj)
676684

677685
return (
678-
prjs_at_db,
686+
prjs_output,
679687
cast(int, total_count),
680688
)
681689

0 commit comments

Comments
 (0)