|
2 | 2 |
|
3 | 3 | from aiohttp import web |
4 | 4 | from common_library.json_serialization import json_dumps |
| 5 | +from models_library.api_schemas_catalog.services import MyServiceGet |
5 | 6 | from models_library.api_schemas_webserver.projects import ( |
6 | 7 | EmptyModel, |
7 | 8 | ProjectCopyOverride, |
|
39 | 40 | from .. import _crud_api_create, _crud_api_read, _projects_service |
40 | 41 | from .._permalink_service import update_or_pop_permalink_in_project |
41 | 42 | from ..models import ProjectDict |
42 | | -from ..utils import get_project_unavailable_services, project_uses_available_services |
43 | 43 | from . import _rest_utils |
44 | 44 | from ._rest_exceptions import handle_plugin_requests_exceptions |
45 | 45 | from ._rest_schemas import ( |
@@ -277,25 +277,31 @@ async def get_project(request: web.Request): |
277 | 277 | req_ctx = RequestContext.model_validate(request) |
278 | 278 | path_params = parse_request_path_parameters_as(ProjectPathParams, request) |
279 | 279 |
|
280 | | - user_available_services: list[dict] = ( |
281 | | - await catalog_service.get_services_for_user_in_product( |
282 | | - request.app, req_ctx.user_id, req_ctx.product_name, only_key_versions=True |
283 | | - ) |
284 | | - ) |
285 | | - |
286 | 280 | project = await _projects_service.get_project_for_user( |
287 | 281 | request.app, |
288 | 282 | project_uuid=f"{path_params.project_id}", |
289 | 283 | user_id=req_ctx.user_id, |
290 | 284 | include_state=True, |
291 | 285 | include_trashed_by_primary_gid=True, |
292 | 286 | ) |
293 | | - if not await project_uses_available_services(project, user_available_services): |
294 | | - unavilable_services = get_project_unavailable_services( |
295 | | - project, user_available_services |
296 | | - ) |
| 287 | + |
| 288 | + services_in_project = { |
| 289 | + (srv["key"], srv["version"]) for _, srv in project.get("workbench", {}).items() |
| 290 | + } |
| 291 | + |
| 292 | + my_services: list[MyServiceGet] = await catalog_service.batch_get_my_services( |
| 293 | + request.app, |
| 294 | + product_name=req_ctx.product_name, |
| 295 | + user_id=req_ctx.user_id, |
| 296 | + services_ids=list(services_in_project), |
| 297 | + ) |
| 298 | + not_my_services = services_in_project.difference( |
| 299 | + {(srv.key, srv.release.version) for srv in my_services} |
| 300 | + ) |
| 301 | + |
| 302 | + if not_my_services: |
297 | 303 | formatted_services = ", ".join( |
298 | | - f"{service}:{version}" for service, version in unavilable_services |
| 304 | + f"{service}:{version}" for service, version in not_my_services |
299 | 305 | ) |
300 | 306 | # TODO: lack of permissions should be notified with https://httpstatuses.com/403 web.HTTPForbidden |
301 | 307 | raise web.HTTPNotFound( |
|
0 commit comments