Skip to content

Commit ffa797a

Browse files
committed
split out utils for rest
1 parent 3b70a42 commit ffa797a

File tree

3 files changed

+53
-53
lines changed

3 files changed

+53
-53
lines changed

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

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
from servicelib.utils import logged_gather
1818
from simcore_postgres_database.models.projects import ProjectType
1919
from simcore_postgres_database.webserver_models import ProjectType as ProjectTypeDB
20-
from simcore_service_webserver.projects._permalink_api import (
21-
aggregate_permalink_in_project,
22-
)
2320
from simcore_service_webserver.projects._projects_db import (
2421
batch_get_trashed_by_primary_gid,
2522
)
@@ -85,25 +82,6 @@ async def _aggregate_data_to_projects_from_other_sources(
8582
return updated_projects
8683

8784

88-
async def aggregate_data_to_projects_from_request(
89-
request: web.Request,
90-
projects: list[ProjectDict],
91-
) -> list[ProjectDict]:
92-
# NOTE: this is a helper function that should not belong to the
93-
# project's service layer, but rather some utils from the controller
94-
95-
update_permalink_per_project = [
96-
# permalink
97-
aggregate_permalink_in_project(request, project=prj)
98-
for prj in projects
99-
]
100-
101-
updated_projects: list[ProjectDict] = await _paralell_update(
102-
*update_permalink_per_project,
103-
)
104-
return updated_projects
105-
106-
10785
async def list_projects( # pylint: disable=too-many-arguments
10886
app: web.Application,
10987
user_id: UserID,

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

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,11 @@
1414
ProjectCopyOverride,
1515
ProjectCreateNew,
1616
ProjectGet,
17-
ProjectListItem,
1817
ProjectPatch,
1918
)
2019
from models_library.generics import Envelope
2120
from models_library.projects_state import ProjectLocked
2221
from models_library.rest_ordering import OrderBy
23-
from models_library.rest_pagination import Page
24-
from models_library.rest_pagination_utils import paginate_data
2522
from models_library.utils.fastapi_encoders import jsonable_encoder
2623
from servicelib.aiohttp import status
2724
from servicelib.aiohttp.long_running_tasks.server import start_long_running_task
@@ -36,9 +33,7 @@
3633
UNDEFINED_DEFAULT_SIMCORE_USER_AGENT_VALUE,
3734
X_SIMCORE_USER_AGENT,
3835
)
39-
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON
4036
from servicelib.redis import get_project_locked_state
41-
from servicelib.rest_constants import RESPONSE_MODEL_POLICY
4237
from simcore_service_webserver.projects.models import ProjectDict
4338

4439
from .._meta import API_VTAG as VTAG
@@ -51,7 +46,7 @@
5146
from ..security.decorators import permission_required
5247
from ..users.api import get_user_fullname
5348
from ..workspaces.errors import WorkspaceAccessForbiddenError, WorkspaceNotFoundError
54-
from . import _crud_api_create, _crud_api_read, projects_service
49+
from . import _crud_api_create, _crud_api_read, _crud_handlers_utils, projects_service
5550
from ._common.models import ProjectPathParams, RequestContext
5651
from ._crud_handlers_models import (
5752
ProjectActiveQueryParams,
@@ -167,27 +162,6 @@ async def create_project(request: web.Request):
167162
)
168163

169164

170-
def _create_page_response(projects, request_url, total, limit, offset) -> web.Response:
171-
page = Page[ProjectListItem].model_validate(
172-
paginate_data(
173-
chunk=[
174-
ProjectListItem.from_domain_model(prj).model_dump(
175-
by_alias=True, exclude_unset=True
176-
)
177-
for prj in projects
178-
],
179-
request_url=request_url,
180-
total=total,
181-
limit=limit,
182-
offset=offset,
183-
)
184-
)
185-
return web.Response(
186-
text=page.model_dump_json(**RESPONSE_MODEL_POLICY),
187-
content_type=MIMETYPE_APPLICATION_JSON,
188-
)
189-
190-
191165
@routes.get(f"/{VTAG}/projects", name="list_projects")
192166
@login_required
193167
@permission_required("project.read")
@@ -228,11 +202,11 @@ async def list_projects(request: web.Request):
228202
order_by=OrderBy.model_construct(**query_params.order_by.model_dump()),
229203
)
230204

231-
projects = await _crud_api_read.aggregate_data_to_projects_from_request(
205+
projects = await _crud_handlers_utils.aggregate_data_to_projects_from_request(
232206
request, projects
233207
)
234208

235-
return _create_page_response(
209+
return _crud_handlers_utils.create_page_response(
236210
projects=projects,
237211
request_url=request.url,
238212
total=total_number_of_projects,
@@ -268,11 +242,11 @@ async def list_projects_full_search(request: web.Request):
268242
order_by=OrderBy.model_construct(**query_params.order_by.model_dump()),
269243
)
270244

271-
projects = await _crud_api_read.aggregate_data_to_projects_from_request(
245+
projects = await _crud_handlers_utils.aggregate_data_to_projects_from_request(
272246
request, projects
273247
)
274248

275-
return _create_page_response(
249+
return _crud_handlers_utils.create_page_response(
276250
projects=projects,
277251
request_url=request.url,
278252
total=total_number_of_projects,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from aiohttp import web
2+
from models_library.api_schemas_webserver.projects import ProjectListItem
3+
from models_library.rest_pagination import Page
4+
from models_library.rest_pagination_utils import paginate_data
5+
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON
6+
from servicelib.rest_constants import RESPONSE_MODEL_POLICY
7+
8+
from . import _permalink_api
9+
from ._crud_api_read import _paralell_update
10+
from .models import ProjectDict
11+
12+
13+
async def aggregate_data_to_projects_from_request(
14+
request: web.Request,
15+
projects: list[ProjectDict],
16+
) -> list[ProjectDict]:
17+
18+
update_permalink_per_project = [
19+
# permalink
20+
_permalink_api.aggregate_permalink_in_project(request, project=prj)
21+
for prj in projects
22+
]
23+
24+
updated_projects: list[ProjectDict] = await _paralell_update(
25+
*update_permalink_per_project,
26+
)
27+
return updated_projects
28+
29+
30+
def create_page_response(projects, request_url, total, limit, offset) -> web.Response:
31+
page = Page[ProjectListItem].model_validate(
32+
paginate_data(
33+
chunk=[
34+
ProjectListItem.from_domain_model(prj).model_dump(
35+
by_alias=True, exclude_unset=True
36+
)
37+
for prj in projects
38+
],
39+
request_url=request_url,
40+
total=total,
41+
limit=limit,
42+
offset=offset,
43+
)
44+
)
45+
return web.Response(
46+
text=page.model_dump_json(**RESPONSE_MODEL_POLICY),
47+
content_type=MIMETYPE_APPLICATION_JSON,
48+
)

0 commit comments

Comments
 (0)