|
14 | 14 | ProjectCopyOverride, |
15 | 15 | ProjectCreateNew, |
16 | 16 | ProjectGet, |
17 | | - ProjectListItem, |
18 | 17 | ProjectPatch, |
19 | 18 | ) |
20 | 19 | from models_library.generics import Envelope |
21 | 20 | from models_library.projects_state import ProjectLocked |
22 | 21 | 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 |
25 | 22 | from models_library.utils.fastapi_encoders import jsonable_encoder |
26 | 23 | from servicelib.aiohttp import status |
27 | 24 | from servicelib.aiohttp.long_running_tasks.server import start_long_running_task |
|
36 | 33 | UNDEFINED_DEFAULT_SIMCORE_USER_AGENT_VALUE, |
37 | 34 | X_SIMCORE_USER_AGENT, |
38 | 35 | ) |
39 | | -from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON |
40 | 36 | from servicelib.redis import get_project_locked_state |
41 | | -from servicelib.rest_constants import RESPONSE_MODEL_POLICY |
42 | 37 | from simcore_service_webserver.projects.models import ProjectDict |
43 | 38 |
|
44 | 39 | from .._meta import API_VTAG as VTAG |
|
51 | 46 | from ..security.decorators import permission_required |
52 | 47 | from ..users.api import get_user_fullname |
53 | 48 | 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 |
55 | 50 | from ._common.models import ProjectPathParams, RequestContext |
56 | 51 | from ._crud_handlers_models import ( |
57 | 52 | ProjectActiveQueryParams, |
@@ -167,27 +162,6 @@ async def create_project(request: web.Request): |
167 | 162 | ) |
168 | 163 |
|
169 | 164 |
|
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 | | - |
191 | 165 | @routes.get(f"/{VTAG}/projects", name="list_projects") |
192 | 166 | @login_required |
193 | 167 | @permission_required("project.read") |
@@ -228,11 +202,11 @@ async def list_projects(request: web.Request): |
228 | 202 | order_by=OrderBy.model_construct(**query_params.order_by.model_dump()), |
229 | 203 | ) |
230 | 204 |
|
231 | | - projects = await _crud_api_read.aggregate_data_to_projects_from_request( |
| 205 | + projects = await _crud_handlers_utils.aggregate_data_to_projects_from_request( |
232 | 206 | request, projects |
233 | 207 | ) |
234 | 208 |
|
235 | | - return _create_page_response( |
| 209 | + return _crud_handlers_utils.create_page_response( |
236 | 210 | projects=projects, |
237 | 211 | request_url=request.url, |
238 | 212 | total=total_number_of_projects, |
@@ -268,11 +242,11 @@ async def list_projects_full_search(request: web.Request): |
268 | 242 | order_by=OrderBy.model_construct(**query_params.order_by.model_dump()), |
269 | 243 | ) |
270 | 244 |
|
271 | | - projects = await _crud_api_read.aggregate_data_to_projects_from_request( |
| 245 | + projects = await _crud_handlers_utils.aggregate_data_to_projects_from_request( |
272 | 246 | request, projects |
273 | 247 | ) |
274 | 248 |
|
275 | | - return _create_page_response( |
| 249 | + return _crud_handlers_utils.create_page_response( |
276 | 250 | projects=projects, |
277 | 251 | request_url=request.url, |
278 | 252 | total=total_number_of_projects, |
|
0 commit comments