From fdcb5b9ea66342a78a69e61919138570ee2c56c0 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 15:15:07 +0200 Subject: [PATCH 01/21] first commit --- ...9f2dc87ccd_add_templatetype_to_projects.py | 44 +++++++++++++++++++ .../models/projects.py | 13 ++++++ .../projects/_crud_api_read.py | 9 +++- .../projects/models.py | 3 +- 4 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py diff --git a/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py b/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py new file mode 100644 index 00000000000..783f74fee54 --- /dev/null +++ b/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py @@ -0,0 +1,44 @@ +"""add templateType to projects + +Revision ID: b39f2dc87ccd +Revises: 0d52976dc616 +Create Date: 2025-05-14 11:59:27.033449+00:00 + +""" + +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "b39f2dc87ccd" +down_revision = "0d52976dc616" +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + # Create enum type first + project_template_type = sa.Enum( + "TEMPLATE", "TUTORIAL", "HYPERTOOL", name="projecttemplatetype" + ) + project_template_type.create(op.get_bind()) + + op.add_column( + "projects", + sa.Column( + "template_type", + project_template_type, + nullable=True, + default=None, + ), + ) + # ### end Alembic commands ### + op.execute("UPDATE projects SET template_type='TEMPLATE' WHERE type='TEMPLATE'") + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column("projects", "template_type") + # ### end Alembic commands ### + sa.Enum(name="projecttemplatetype").drop(op.get_bind()) diff --git a/packages/postgres-database/src/simcore_postgres_database/models/projects.py b/packages/postgres-database/src/simcore_postgres_database/models/projects.py index 1db9db0fd7b..7af3c09fc65 100644 --- a/packages/postgres-database/src/simcore_postgres_database/models/projects.py +++ b/packages/postgres-database/src/simcore_postgres_database/models/projects.py @@ -16,6 +16,12 @@ class ProjectType(enum.Enum): STANDARD = "STANDARD" +class ProjectTemplateType(str, enum.Enum): + TEMPLATE = "TEMPLATE" + TUTORIAL = "TUTORIAL" + HYPERTOOL = "HYPERTOOL" + + projects = sa.Table( "projects", metadata, @@ -29,6 +35,13 @@ class ProjectType(enum.Enum): default=ProjectType.STANDARD, doc="Either standard or template types", ), + sa.Column( + "template_type", + sa.Enum(ProjectTemplateType), + nullable=True, + default=None, + doc="None if type is STANDARD, otherwise it is one of the ProjectTemplateType", + ), sa.Column( "uuid", sa.String, diff --git a/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py b/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py index 573298fbe71..48815a361f4 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py +++ b/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py @@ -74,10 +74,17 @@ async def _aggregate_data_to_projects_from_other_sources( for prj, prj_type in zip(db_projects, db_project_types, strict=False) ] - updated_projects: list[ProjectDict] = await _paralell_update( + projects_with_state: list[ProjectDict] = await _paralell_update( *update_state_per_project, ) + updated_projects = [] + for project, project_type in zip( + projects_with_state, db_project_types, strict=True + ): + project["type"] = project_type + updated_projects.append(project) + return updated_projects diff --git a/services/web/server/src/simcore_service_webserver/projects/models.py b/services/web/server/src/simcore_service_webserver/projects/models.py index 6eabb26d0e5..03d595d741c 100644 --- a/services/web/server/src/simcore_service_webserver/projects/models.py +++ b/services/web/server/src/simcore_service_webserver/projects/models.py @@ -16,7 +16,7 @@ ) from models_library.workspaces import WorkspaceID from pydantic import BaseModel, ConfigDict, HttpUrl, field_validator -from simcore_postgres_database.models.projects import ProjectType +from simcore_postgres_database.models.projects import ProjectTemplateType, ProjectType ProjectDict: TypeAlias = dict[str, Any] ProjectProxy: TypeAlias = RowProxy @@ -40,6 +40,7 @@ class ProjectDBGet(BaseModel): # NOTE: model intented to read one-to-one columns of the `projects` table id: int type: ProjectType + template_type: ProjectTemplateType | None uuid: ProjectID name: str description: str From acef022785691630584d1db1bcda8c00cade95d8 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 15:25:45 +0200 Subject: [PATCH 02/21] expose to ProjectGet --- .../api_schemas_webserver/projects.py | 14 +++++++++++++- .../models-library/src/models_library/projects.py | 9 ++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/models-library/src/models_library/api_schemas_webserver/projects.py b/packages/models-library/src/models_library/api_schemas_webserver/projects.py index 5e2ca10e12c..449132d6d66 100644 --- a/packages/models-library/src/models_library/api_schemas_webserver/projects.py +++ b/packages/models-library/src/models_library/api_schemas_webserver/projects.py @@ -26,7 +26,14 @@ from ..emails import LowerCaseEmailStr from ..folders import FolderID from ..groups import GroupID -from ..projects import ClassifierID, DateTimeStr, NodesDict, ProjectID +from ..projects import ( + ClassifierID, + DateTimeStr, + NodesDict, + ProjectID, + ProjectTemplateType, + ProjectType, +) from ..projects_access import AccessRights, GroupIDStr from ..projects_state import ProjectState from ..utils._original_fastapi_encoders import jsonable_encoder @@ -106,6 +113,9 @@ class ProjectGet(OutputSchema): description: str thumbnail: HttpUrl | Literal[""] + type: ProjectType + template_type: ProjectTemplateType | None + workbench: NodesDict prj_owner: LowerCaseEmailStr @@ -153,6 +163,8 @@ def _update_json_schema_extra(schema: JsonDict) -> None: "name": "My Project", "description": "This is a sample project", "thumbnail": "https://example.com/thumbnail.png", + "type": "STANDARD", + "template_type": None, "workbench": {}, "prj_owner": "user@email.com", "access_rights": {}, diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 4d594026d1b..29be0fb90c5 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -3,7 +3,7 @@ """ from datetime import datetime -from enum import Enum +from enum import Enum, auto from typing import Annotated, Any, Final, TypeAlias from uuid import UUID @@ -25,6 +25,7 @@ empty_str_to_none_pre_validator, none_to_empty_str_pre_validator, ) +from .utils.enums import StrAutoEnum ProjectID: TypeAlias = UUID CommitID: TypeAlias = int @@ -52,6 +53,12 @@ class ProjectType(str, Enum): STANDARD = "STANDARD" +class ProjectTemplateType(StrAutoEnum): + TEMPLATE = auto() + TUTORIAL = auto() + HYPERTOOL = auto() + + class BaseProjectModel(BaseModel): # Description of the project uuid: Annotated[ From 705ae27b2d3f4ceb01b2fb7fc89fd3341ac26743 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 15:51:54 +0200 Subject: [PATCH 03/21] fix --- .../projects/_crud_api_create.py | 2 +- .../simcore_service_webserver/projects/_crud_api_read.py | 9 +-------- .../projects/_projects_repository_legacy.py | 4 ++++ .../projects/_projects_repository_legacy_utils.py | 2 +- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/services/web/server/src/simcore_service_webserver/projects/_crud_api_create.py b/services/web/server/src/simcore_service_webserver/projects/_crud_api_create.py index e287438d0b2..df47780a7c4 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_crud_api_create.py +++ b/services/web/server/src/simcore_service_webserver/projects/_crud_api_create.py @@ -316,7 +316,7 @@ async def create_project( # pylint: disable=too-many-arguments,too-many-branche # Folder ID is not part of the project resource predefined_project.pop("folderId") - if from_study: + if from_study: # Either clone or creation of template out of study # 1.1 prepare copy ( new_project, diff --git a/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py b/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py index 48815a361f4..573298fbe71 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py +++ b/services/web/server/src/simcore_service_webserver/projects/_crud_api_read.py @@ -74,17 +74,10 @@ async def _aggregate_data_to_projects_from_other_sources( for prj, prj_type in zip(db_projects, db_project_types, strict=False) ] - projects_with_state: list[ProjectDict] = await _paralell_update( + updated_projects: list[ProjectDict] = await _paralell_update( *update_state_per_project, ) - updated_projects = [] - for project, project_type in zip( - projects_with_state, db_project_types, strict=True - ): - project["type"] = project_type - updated_projects.append(project) - return updated_projects diff --git a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py index 3106b7a42c9..e2ee3593b10 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py +++ b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py @@ -40,6 +40,7 @@ from simcore_postgres_database.aiopg_errors import UniqueViolation from simcore_postgres_database.models.groups import user_to_groups from simcore_postgres_database.models.project_to_groups import project_to_groups +from simcore_postgres_database.models.projects import ProjectTemplateType from simcore_postgres_database.models.projects_nodes import projects_nodes from simcore_postgres_database.models.projects_tags import projects_tags from simcore_postgres_database.models.projects_to_folders import projects_to_folders @@ -283,6 +284,9 @@ async def insert_project( if (force_as_template or user_id is None) else ProjectType.STANDARD.value ), + "template_type": ( + ProjectTemplateType.TEMPLATE.value if force_as_template else None + ), "prj_owner": user_id if user_id else None, "hidden": hidden, # NOTE: this is very bad and leads to very weird conversions. diff --git a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py index c92c5910d06..ffdc7def3ce 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py +++ b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py @@ -36,7 +36,7 @@ logger = logging.getLogger(__name__) -DB_EXCLUSIVE_COLUMNS = ["type", "id", "published", "hidden"] +DB_EXCLUSIVE_COLUMNS = ["id", "published", "hidden"] SCHEMA_NON_NULL_KEYS = ["thumbnail"] PermissionStr = Literal["read", "write", "delete"] From 976c6ebb7215b16a626e3d3bd926dfe23b8926d6 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 16:16:20 +0200 Subject: [PATCH 04/21] fix api server --- .../simcore_webserver_projects_rest_api.py | 12 + .../mocks/create_program_job_success.json | 374 ++--- .../tests/mocks/create_study_job.json | 584 ++++---- .../mocks/for_test_api_routes_studies.json | 1230 +++++++++-------- .../tests/mocks/get_job_outputs.json | 2 + .../get_job_pricing_unit_invalid_solver.json | 210 +-- .../mocks/get_job_pricing_unit_success.json | 326 ++--- .../tests/mocks/get_solver_outputs.json | 2 + .../api-server/tests/mocks/on_list_jobs.json | 484 +++---- .../tests/mocks/run_study_workflow.json | 2 + .../mocks/start_job_not_enough_credit.json | 2 + .../tests/mocks/start_job_with_payment.json | 2 + ...est_get_and_update_study_job_metadata.json | 1174 ++++++++-------- 13 files changed, 2223 insertions(+), 2181 deletions(-) diff --git a/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py b/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py index 374d09cf6ce..00a3d2af5f0 100644 --- a/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py +++ b/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py @@ -75,6 +75,8 @@ def request_desc(self) -> str: }, "dev": None, "workspace_id": None, + "type": "STANDARD", + "templateType": None, "folder_id": None, "trashedAt": None, "trashedBy": None, @@ -102,6 +104,8 @@ def request_desc(self) -> str: "lastChangeDate": "2021-12-06T10:13:03.100Z", "workbench": {}, "workspaceId": 123, + "type": "STANDARD", + "templateType": None, "folderId": 2, "accessRights": {"2": {"read": True, "write": True, "delete": True}}, "dev": {}, @@ -232,6 +236,8 @@ def request_desc(self) -> str: "creationDate": "2021-12-06T10:13:03.100Z", "lastChangeDate": "2021-12-06T10:13:07.347Z", "workbench": {}, + "type": "STANDARD", + "templateType": None, "accessRights": {"2": {"read": True, "write": True, "delete": True}}, "dev": {}, "classifiers": [], @@ -482,6 +488,8 @@ def request_desc(self) -> str: "accessRights": {"2": {"read": True, "write": True, "delete": True}}, "dev": {}, "workspace_id": None, + "type": "STANDARD", + "templateType": None, "folder_id": None, "trashedAt": None, "trashedBy": None, @@ -684,6 +692,8 @@ def request_desc(self) -> str: "classifiers": [], "dev": {}, "workspace_id": None, + "type": "STANDARD", + "templateType": None, "folder_id": None, "trashedAt": None, "trashed_by": None, @@ -935,6 +945,8 @@ def request_desc(self) -> str: "classifiers": [], "dev": {}, "workspace_id": None, + "type": "STANDARD", + "templateType": None, "folder_id": None, "trashedAt": None, "trashedBy": None, diff --git a/services/api-server/tests/mocks/create_program_job_success.json b/services/api-server/tests/mocks/create_program_job_success.json index 5e1d2b3a5c0..32006ffdc5a 100644 --- a/services/api-server/tests/mocks/create_program_job_success.json +++ b/services/api-server/tests/mocks/create_program_job_success.json @@ -1,196 +1,200 @@ [ - { - "name": "POST /projects", - "description": "", - "method": "POST", - "host": "webserver", - "path": { - "path": "/v0/projects", - "path_parameters": [] - }, - "query": "hidden=false", - "request_payload": { - "uuid": "a6677890-356b-4113-b26e-b77a748427f4", - "name": "programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4", - "description": "Study associated to solver job:\n{\n \"id\": \"a6677890-356b-4113-b26e-b77a748427f4\",\n \"name\": \"programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4\",\n \"inputs_checksum\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"created_at\": \"2025-04-15T13:14:44.594564Z\"\n}", - "thumbnail": "https://via.placeholder.com/170x120.png", - "workbench": { - "f298a7d7-900d-533d-9385-89b39ea023fe": { - "key": "simcore/services/dynamic/electrode-selector", - "version": "2.1.3", - "label": "sleeper", - "progress": null, - "thumbnail": null, - "runHash": null, - "inputs": {}, - "inputsRequired": [], - "inputsUnits": {}, - "inputAccess": null, - "inputNodes": [], - "outputs": {}, - "outputNode": null, - "outputNodes": null, - "parent": null, - "position": null, - "state": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED", - "progress": 0.0 - }, - "bootOptions": null - } - }, - "accessRights": {}, - "tags": [], - "classifiers": [], - "ui": { - "icon": null, - "workbench": { - "f298a7d7-900d-533d-9385-89b39ea023fe": { - "position": { - "x": 633, - "y": 229 + { + "name": "POST /projects", + "description": "", + "method": "POST", + "host": "webserver", + "path": { + "path": "/v0/projects", + "path_parameters": [] + }, + "query": "hidden=false", + "request_payload": { + "uuid": "a6677890-356b-4113-b26e-b77a748427f4", + "name": "programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4", + "description": "Study associated to solver job:\n{\n \"id\": \"a6677890-356b-4113-b26e-b77a748427f4\",\n \"name\": \"programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4\",\n \"inputs_checksum\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"created_at\": \"2025-04-15T13:14:44.594564Z\"\n}", + "thumbnail": "https://via.placeholder.com/170x120.png", + "workbench": { + "f298a7d7-900d-533d-9385-89b39ea023fe": { + "key": "simcore/services/dynamic/electrode-selector", + "version": "2.1.3", + "label": "sleeper", + "progress": null, + "thumbnail": null, + "runHash": null, + "inputs": {}, + "inputsRequired": [], + "inputsUnits": {}, + "inputAccess": null, + "inputNodes": [], + "outputs": {}, + "outputNode": null, + "outputNodes": null, + "parent": null, + "position": null, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED", + "progress": 0.0 + }, + "bootOptions": null + } + }, + "accessRights": {}, + "tags": [], + "classifiers": [], + "ui": { + "icon": null, + "workbench": { + "f298a7d7-900d-533d-9385-89b39ea023fe": { + "position": { + "x": 633, + "y": 229 + }, + "marker": null + } + }, + "slideshow": {}, + "currentNodeId": "f298a7d7-900d-533d-9385-89b39ea023fe", + "annotations": {} }, - "marker": null - } + "workspaceId": null, + "type": "STANDARD", + "templateType": null, + "folderId": null }, - "slideshow": {}, - "currentNodeId": "f298a7d7-900d-533d-9385-89b39ea023fe", - "annotations": {} - }, - "workspaceId": null, - "folderId": null - }, - "response_body": { - "data": { - "task_id": "POST%20%2Fv0%2Fprojects%3Fhidden%3Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", - "task_name": "POST /v0/projects?hidden=false", - "status_href": "http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", - "result_href": "http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8/result", - "abort_href": "http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8" - } - }, - "status_code": 202 - }, - { - "name": "GET http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks-legacy/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks-legacy" - } - ] + "response_body": { + "data": { + "task_id": "POST%20%2Fv0%2Fprojects%3Fhidden%3Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", + "task_name": "POST /v0/projects?hidden=false", + "status_href": "http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", + "result_href": "http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8/result", + "abort_href": "http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8" + } + }, + "status_code": 202 }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Fhidden%3Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", - "message": "finished", - "percent": 1.0 + { + "name": "GET http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks-legacy/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks-legacy" + } + ] }, - "done": true, - "started": "2025-04-15T13:14:44.617066" - } - } - }, - { - "name": "GET http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8/result", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks-legacy/{task_id}/result", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks-legacy" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Fhidden%3Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8", + "message": "finished", + "percent": 1.0 + }, + "done": true, + "started": "2025-04-15T13:14:44.617066" + } } - ] }, - "response_body": { - "data": { - "uuid": "a6677890-356b-4113-b26e-b77a748427f4", - "name": "programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4", - "description": "Study associated to solver job:\n{\n \"id\": \"a6677890-356b-4113-b26e-b77a748427f4\",\n \"name\": \"programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4\",\n \"inputs_checksum\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"created_at\": \"2025-04-15T13:14:44.594564Z\"\n}", - "thumbnail": "https://via.placeholder.com/170x120.png", - "workbench": { - "f298a7d7-900d-533d-9385-89b39ea023fe": { - "key": "simcore/services/dynamic/electrode-selector", - "version": "2.1.3", - "label": "sleeper", - "inputs": {}, - "inputsRequired": [], - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "state": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED", - "progress": 0.0 - } - } + { + "name": "GET http://webserver:8080/v0/tasks-legacy/POST%2520%252Fv0%252Fprojects%253Fhidden%253Dfalse.24ca757c-9edb-4017-b0e2-e6f7dcc447c8/result", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks-legacy/{task_id}/result", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks-legacy" + } + ] }, - "prjOwner": "bisgaard@itis.swiss", - "accessRights": { - "4": { - "read": true, - "write": true, - "delete": true - } - }, - "creationDate": "2025-04-15T13:14:44.636Z", - "lastChangeDate": "2025-04-15T13:14:46.704Z", - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "UNKNOWN" - } - }, - "trashedAt": null, - "trashedBy": null, - "tags": [], - "classifiers": [], - "quality": {}, - "ui": { - "workbench": { - "f298a7d7-900d-533d-9385-89b39ea023fe": { - "position": { - "x": 633, - "y": 229 - } + "response_body": { + "data": { + "uuid": "a6677890-356b-4113-b26e-b77a748427f4", + "name": "programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4", + "description": "Study associated to solver job:\n{\n \"id\": \"a6677890-356b-4113-b26e-b77a748427f4\",\n \"name\": \"programs/simcore%2Fservices%2Fdynamic%2Felectrode-selector/releases/2.1.3/jobs/a6677890-356b-4113-b26e-b77a748427f4\",\n \"inputs_checksum\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n \"created_at\": \"2025-04-15T13:14:44.594564Z\"\n}", + "thumbnail": "https://via.placeholder.com/170x120.png", + "workbench": { + "f298a7d7-900d-533d-9385-89b39ea023fe": { + "key": "simcore/services/dynamic/electrode-selector", + "version": "2.1.3", + "label": "sleeper", + "inputs": {}, + "inputsRequired": [], + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED", + "progress": 0.0 + } + } + }, + "prjOwner": "bisgaard@itis.swiss", + "accessRights": { + "4": { + "read": true, + "write": true, + "delete": true + } + }, + "creationDate": "2025-04-15T13:14:44.636Z", + "lastChangeDate": "2025-04-15T13:14:46.704Z", + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "UNKNOWN" + } + }, + "trashedAt": null, + "trashedBy": null, + "tags": [], + "classifiers": [], + "quality": {}, + "ui": { + "workbench": { + "f298a7d7-900d-533d-9385-89b39ea023fe": { + "position": { + "x": 633, + "y": 229 + } + } + }, + "slideshow": {}, + "currentNodeId": "f298a7d7-900d-533d-9385-89b39ea023fe", + "annotations": {} + }, + "dev": {}, + "workspaceId": null, + "type": "STANDARD", + "templateType": null, + "folderId": null } - }, - "slideshow": {}, - "currentNodeId": "f298a7d7-900d-533d-9385-89b39ea023fe", - "annotations": {} }, - "dev": {}, - "workspaceId": null, - "folderId": null - } - }, - "status_code": 201 - } + "status_code": 201 + } ] diff --git a/services/api-server/tests/mocks/create_study_job.json b/services/api-server/tests/mocks/create_study_job.json index b0e234caede..db7f717efd2 100644 --- a/services/api-server/tests/mocks/create_study_job.json +++ b/services/api-server/tests/mocks/create_study_job.json @@ -1,304 +1,306 @@ [ - { - "name": "POST /projects", - "description": "", - "method": "POST", - "host": "webserver", - "path": { - "path": "/v0/projects", - "path_parameters": [] - }, - "query": "from_study=f44c67dc-11cd-11ef-967b-0242ac140010&hidden=true", - "response_body": { - "data": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3Df44c67dc-11cd-11ef-967b-0242ac140010%26hidden%3Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", - "task_name": "POST /v0/projects?from_study=f44c67dc-11cd-11ef-967b-0242ac140010&hidden=true", - "status_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", - "result_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a/result", - "abort_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a" - } - }, - "status_code": 202 - }, - { - "name": "GET http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" - } - ] + { + "name": "POST /projects", + "description": "", + "method": "POST", + "host": "webserver", + "path": { + "path": "/v0/projects", + "path_parameters": [] + }, + "query": "from_study=f44c67dc-11cd-11ef-967b-0242ac140010&hidden=true", + "response_body": { + "data": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3Df44c67dc-11cd-11ef-967b-0242ac140010%26hidden%3Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", + "task_name": "POST /v0/projects?from_study=f44c67dc-11cd-11ef-967b-0242ac140010&hidden=true", + "status_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", + "result_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a/result", + "abort_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a" + } + }, + "status_code": 202 }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3Df44c67dc-11cd-11ef-967b-0242ac140010%26hidden%3Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", - "message": "finished", - "percent": 1.0 + { + "name": "GET http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "done": true, - "started": "2024-05-14T09:43:20.075800" - } - } - }, - { - "name": "GET http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a/result", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}/result", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3Df44c67dc-11cd-11ef-967b-0242ac140010%26hidden%3Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a", + "message": "finished", + "percent": 1.0 + }, + "done": true, + "started": "2024-05-14T09:43:20.075800" + } } - ] }, - "response_body": { - "data": { - "uuid": "65d611f2-11d6-11ef-9991-0242ac14000a", - "name": "New Study (Copy)", - "description": "", - "thumbnail": "", - "creationDate": "2024-05-14T09:43:20.099Z", - "lastChangeDate": "2024-05-14T09:43:20.099Z", - "workbench": {}, - "prjOwner": "frubio@example.net", - "workspaceId": 23, - "folderId": 4, - "trashedAt": "2024-05-14T09:55:20.099Z", - "trashedBy": 2, - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "UNKNOWN" - } + { + "name": "GET http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253Df44c67dc-11cd-11ef-967b-0242ac140010%2526hidden%253Dtrue.e08f96fe-bff3-44d0-9278-607536f7189a/result", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}/result", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "ui": { - "workbench": {}, - "slideshow": {}, - "currentNodeId": "f44c67dc-11cd-11ef-967b-0242ac140010", - "mode": "workbench" - }, - "quality": { - "enabled": true, - "tsr_target": { - "r01": { - "level": 4, - "references": "" - }, - "r02": { - "level": 4, - "references": "" - }, - "r03": { - "level": 4, - "references": "" - }, - "r04": { - "level": 4, - "references": "" - }, - "r05": { - "level": 4, - "references": "" - }, - "r06": { - "level": 4, - "references": "" - }, - "r07": { - "level": 4, - "references": "" - }, - "r08": { - "level": 4, - "references": "" - }, - "r09": { - "level": 4, - "references": "" - }, - "r10": { - "level": 4, - "references": "" - }, - "r03b": { - "references": "" - }, - "r03c": { - "references": "" - }, - "r07b": { - "references": "" - }, - "r07c": { - "references": "" - }, - "r07d": { - "references": "" - }, - "r07e": { - "references": "" - }, - "r08b": { - "references": "" - }, - "r10b": { - "references": "" - } - }, - "tsr_current": { - "r01": { - "level": 0, - "references": "" - }, - "r02": { - "level": 0, - "references": "" - }, - "r03": { - "level": 0, - "references": "" - }, - "r04": { - "level": 0, - "references": "" - }, - "r05": { - "level": 0, - "references": "" - }, - "r06": { - "level": 0, - "references": "" - }, - "r07": { - "level": 0, - "references": "" - }, - "r08": { - "level": 0, - "references": "" - }, - "r09": { - "level": 0, - "references": "" - }, - "r10": { - "level": 0, - "references": "" - }, - "r03b": { - "references": "" - }, - "r03c": { - "references": "" - }, - "r07b": { - "references": "" - }, - "r07c": { - "references": "" - }, - "r07d": { - "references": "" - }, - "r07e": { - "references": "" - }, - "r08b": { - "references": "" - }, - "r10b": { - "references": "" + "response_body": { + "data": { + "uuid": "65d611f2-11d6-11ef-9991-0242ac14000a", + "name": "New Study (Copy)", + "description": "", + "thumbnail": "", + "creationDate": "2024-05-14T09:43:20.099Z", + "lastChangeDate": "2024-05-14T09:43:20.099Z", + "workbench": {}, + "prjOwner": "frubio@example.net", + "workspaceId": 23, + "type": "STANDARD", + "templateType": null, + "folderId": 4, + "trashedAt": "2024-05-14T09:55:20.099Z", + "trashedBy": 2, + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "UNKNOWN" + } + }, + "ui": { + "workbench": {}, + "slideshow": {}, + "currentNodeId": "f44c67dc-11cd-11ef-967b-0242ac140010", + "mode": "workbench" + }, + "quality": { + "enabled": true, + "tsr_target": { + "r01": { + "level": 4, + "references": "" + }, + "r02": { + "level": 4, + "references": "" + }, + "r03": { + "level": 4, + "references": "" + }, + "r04": { + "level": 4, + "references": "" + }, + "r05": { + "level": 4, + "references": "" + }, + "r06": { + "level": 4, + "references": "" + }, + "r07": { + "level": 4, + "references": "" + }, + "r08": { + "level": 4, + "references": "" + }, + "r09": { + "level": 4, + "references": "" + }, + "r10": { + "level": 4, + "references": "" + }, + "r03b": { + "references": "" + }, + "r03c": { + "references": "" + }, + "r07b": { + "references": "" + }, + "r07c": { + "references": "" + }, + "r07d": { + "references": "" + }, + "r07e": { + "references": "" + }, + "r08b": { + "references": "" + }, + "r10b": { + "references": "" + } + }, + "tsr_current": { + "r01": { + "level": 0, + "references": "" + }, + "r02": { + "level": 0, + "references": "" + }, + "r03": { + "level": 0, + "references": "" + }, + "r04": { + "level": 0, + "references": "" + }, + "r05": { + "level": 0, + "references": "" + }, + "r06": { + "level": 0, + "references": "" + }, + "r07": { + "level": 0, + "references": "" + }, + "r08": { + "level": 0, + "references": "" + }, + "r09": { + "level": 0, + "references": "" + }, + "r10": { + "level": 0, + "references": "" + }, + "r03b": { + "references": "" + }, + "r03c": { + "references": "" + }, + "r07b": { + "references": "" + }, + "r07c": { + "references": "" + }, + "r07d": { + "references": "" + }, + "r07e": { + "references": "" + }, + "r08b": { + "references": "" + }, + "r10b": { + "references": "" + } + } + }, + "dev": {} } - } }, - "dev": {} - } - }, - "status_code": 201 - }, - { - "name": "PATCH /projects/65d611f2-11d6-11ef-9991-0242ac14000a", - "description": "", - "method": "PATCH", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" - } - ] + "status_code": 201 }, - "request_payload": { - "name": "posix" + { + "name": "PATCH /projects/65d611f2-11d6-11ef-9991-0242ac14000a", + "description": "", + "method": "PATCH", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "request_payload": { + "name": "posix" + }, + "status_code": 204 }, - "status_code": 204 - }, - { - "name": "GET /projects/65d611f2-11d6-11ef-9991-0242ac14000a/inputs", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/inputs", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" + { + "name": "GET /projects/65d611f2-11d6-11ef-9991-0242ac14000a/inputs", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/inputs", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "response_body": { + "data": {} } - ] - }, - "response_body": { - "data": {} } - } ] diff --git a/services/api-server/tests/mocks/for_test_api_routes_studies.json b/services/api-server/tests/mocks/for_test_api_routes_studies.json index 71394134beb..65524c3c742 100644 --- a/services/api-server/tests/mocks/for_test_api_routes_studies.json +++ b/services/api-server/tests/mocks/for_test_api_routes_studies.json @@ -1,627 +1,631 @@ [ - { - "name": "get_me", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/me", - "query": null, - "request_payload": null, - "response_body": { - "data": { - "first_name": "collins", - "last_name": "drew", - "id": 1, - "login": "sarahlopez@example.net", - "role": "User", - "groups": { - "me": { - "gid": 3, - "label": "collinsdrew", - "description": "primary group", - "thumbnail": null, - "accessRights": { - "read": true, - "write": false, - "delete": false - }, - "inclusionRules": {} - }, - "organizations": [ - { - "gid": 2, - "label": "osparc", - "description": "osparc product group", - "thumbnail": null, - "accessRights": { - "read": false, - "write": false, - "delete": false - }, - "inclusionRules": {} + { + "name": "get_me", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/me", + "query": null, + "request_payload": null, + "response_body": { + "data": { + "first_name": "collins", + "last_name": "drew", + "id": 1, + "login": "sarahlopez@example.net", + "role": "User", + "groups": { + "me": { + "gid": 3, + "label": "collinsdrew", + "description": "primary group", + "thumbnail": null, + "accessRights": { + "read": true, + "write": false, + "delete": false + }, + "inclusionRules": {} + }, + "organizations": [ + { + "gid": 2, + "label": "osparc", + "description": "osparc product group", + "thumbnail": null, + "accessRights": { + "read": false, + "write": false, + "delete": false + }, + "inclusionRules": {} + } + ], + "all": { + "gid": 1, + "label": "Everyone", + "description": "all users", + "thumbnail": null, + "accessRights": { + "read": true, + "write": false, + "delete": false + }, + "inclusionRules": {} + } + }, + "gravatar_id": "aa33f6ec77ea434c2ea4fb92d0fd379e" } - ], - "all": { - "gid": 1, - "label": "Everyone", - "description": "all users", - "thumbnail": null, - "accessRights": { - "read": true, - "write": false, - "delete": false - }, - "inclusionRules": {} - } }, - "gravatar_id": "aa33f6ec77ea434c2ea4fb92d0fd379e" - } + "status_code": 200 }, - "status_code": 200 - }, - { - "name": "list_projects", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/projects", - "query": "type=user&show_hidden=false&limit=20&offset=0", - "request_payload": null, - "response_body": { - "_meta": { - "limit": 20, - "total": 1, - "offset": 0, - "count": 1 - }, - "_links": { - "self": "http://webserver:8080/v0/projects?type=user&show_hidden=false&limit=20&offset=0", - "first": "http://webserver:8080/v0/projects?type=user&show_hidden=false&limit=20&offset=0", - "prev": null, - "next": null, - "last": "http://webserver:8080/v0/projects?type=user&show_hidden=false&limit=20&offset=0" - }, - "data": [ - { - "uuid": "25531b1a-2565-11ee-ab43-02420a000031", - "name": "Alexandra Brown", - "description": "", - "thumbnail": "", - "creationDate": "2023-07-18T12:18:04.314Z", - "lastChangeDate": "2023-07-20T20:02:42.535Z", - "workspaceId": 278, - "folderId": 123, - "trashedAt": "2023-07-20T20:02:55.535Z", - "trashedBy": 2, - "workbench": { - "deea006c-a223-4103-b46e-7b677428de9f": { - "key": "simcore/services/frontend/file-picker", - "version": "1.0.0", - "label": "File Picker", - "progress": 0.0, - "thumbnail": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "parent": null - }, - "3e700053-3d10-4089-90f7-f0865167c5b2": { - "key": "simcore/services/frontend/parameter/integer", - "version": "1.0.0", - "label": "Integer Parameter", - "thumbnail": null, - "runHash": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [], - "outputs": { - "out_1": 1 - }, - "parent": null - }, - "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { - "key": "simcore/services/frontend/parameter/boolean", - "version": "1.0.0", - "label": "Boolean Parameter", - "thumbnail": null, - "runHash": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [], - "outputs": { - "out_1": true - }, - "parent": null - }, - "09e17caa-a538-40d4-9b8e-9a221b8367d3": { - "key": "simcore/services/frontend/iterator-consumer/probe/integer", - "version": "1.0.0", - "label": "Integer probe", - "thumbnail": null, - "inputs": { - "in_1": 0 - }, - "inputsUnits": {}, - "inputNodes": [], - "parent": null - } - }, - "prjOwner": "melinda11@example.org", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "UNKNOWN" - } - }, - "ui": { - "workbench": { - "09e17caa-a538-40d4-9b8e-9a221b8367d3": { - "position": { - "x": 540, - "y": 240 - } - }, - "3e700053-3d10-4089-90f7-f0865167c5b2": { - "position": { - "x": 180, - "y": 280 + { + "name": "list_projects", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/projects", + "query": "type=user&show_hidden=false&limit=20&offset=0", + "request_payload": null, + "response_body": { + "_meta": { + "limit": 20, + "total": 1, + "offset": 0, + "count": 1 + }, + "_links": { + "self": "http://webserver:8080/v0/projects?type=user&show_hidden=false&limit=20&offset=0", + "first": "http://webserver:8080/v0/projects?type=user&show_hidden=false&limit=20&offset=0", + "prev": null, + "next": null, + "last": "http://webserver:8080/v0/projects?type=user&show_hidden=false&limit=20&offset=0" + }, + "data": [ + { + "uuid": "25531b1a-2565-11ee-ab43-02420a000031", + "name": "Alexandra Brown", + "description": "", + "thumbnail": "", + "creationDate": "2023-07-18T12:18:04.314Z", + "lastChangeDate": "2023-07-20T20:02:42.535Z", + "workspaceId": 278, + "type": "STANDARD", + "templateType": null, + "folderId": 123, + "trashedAt": "2023-07-20T20:02:55.535Z", + "trashedBy": 2, + "workbench": { + "deea006c-a223-4103-b46e-7b677428de9f": { + "key": "simcore/services/frontend/file-picker", + "version": "1.0.0", + "label": "File Picker", + "progress": 0.0, + "thumbnail": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "parent": null + }, + "3e700053-3d10-4089-90f7-f0865167c5b2": { + "key": "simcore/services/frontend/parameter/integer", + "version": "1.0.0", + "label": "Integer Parameter", + "thumbnail": null, + "runHash": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [], + "outputs": { + "out_1": 1 + }, + "parent": null + }, + "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { + "key": "simcore/services/frontend/parameter/boolean", + "version": "1.0.0", + "label": "Boolean Parameter", + "thumbnail": null, + "runHash": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [], + "outputs": { + "out_1": true + }, + "parent": null + }, + "09e17caa-a538-40d4-9b8e-9a221b8367d3": { + "key": "simcore/services/frontend/iterator-consumer/probe/integer", + "version": "1.0.0", + "label": "Integer probe", + "thumbnail": null, + "inputs": { + "in_1": 0 + }, + "inputsUnits": {}, + "inputNodes": [], + "parent": null + } + }, + "prjOwner": "melinda11@example.org", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "UNKNOWN" + } + }, + "ui": { + "workbench": { + "09e17caa-a538-40d4-9b8e-9a221b8367d3": { + "position": { + "x": 540, + "y": 240 + } + }, + "3e700053-3d10-4089-90f7-f0865167c5b2": { + "position": { + "x": 180, + "y": 280 + } + }, + "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { + "position": { + "x": 180, + "y": 360 + } + }, + "deea006c-a223-4103-b46e-7b677428de9f": { + "position": { + "x": 160, + "y": 120 + } + } + }, + "slideshow": {}, + "currentNodeId": "25531b1a-2565-11ee-ab43-02420a000031", + "mode": "workbench" + }, + "quality": { + "enabled": true, + "tsr_target": { + "r01": { + "level": 4, + "references": "" + }, + "r02": { + "level": 4, + "references": "" + }, + "r03": { + "level": 4, + "references": "" + }, + "r04": { + "level": 4, + "references": "" + }, + "r05": { + "level": 4, + "references": "" + }, + "r06": { + "level": 4, + "references": "" + }, + "r07": { + "level": 4, + "references": "" + }, + "r08": { + "level": 4, + "references": "" + }, + "r09": { + "level": 4, + "references": "" + }, + "r10": { + "level": 4, + "references": "" + } + }, + "annotations": { + "vandv": "", + "limitations": "", + "certificationLink": "", + "certificationStatus": "Uncertified" + }, + "tsr_current": { + "r01": { + "level": 0, + "references": "" + }, + "r02": { + "level": 0, + "references": "" + }, + "r03": { + "level": 0, + "references": "" + }, + "r04": { + "level": 0, + "references": "" + }, + "r05": { + "level": 0, + "references": "" + }, + "r06": { + "level": 0, + "references": "" + }, + "r07": { + "level": 0, + "references": "" + }, + "r08": { + "level": 0, + "references": "" + }, + "r09": { + "level": 0, + "references": "" + }, + "r10": { + "level": 0, + "references": "" + } + } + }, + "dev": {} } - }, - "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { - "position": { - "x": 180, - "y": 360 - } - }, - "deea006c-a223-4103-b46e-7b677428de9f": { - "position": { - "x": 160, - "y": 120 - } - } - }, - "slideshow": {}, - "currentNodeId": "25531b1a-2565-11ee-ab43-02420a000031", - "mode": "workbench" - }, - "quality": { - "enabled": true, - "tsr_target": { - "r01": { - "level": 4, - "references": "" - }, - "r02": { - "level": 4, - "references": "" - }, - "r03": { - "level": 4, - "references": "" - }, - "r04": { - "level": 4, - "references": "" - }, - "r05": { - "level": 4, - "references": "" - }, - "r06": { - "level": 4, - "references": "" - }, - "r07": { - "level": 4, - "references": "" - }, - "r08": { - "level": 4, - "references": "" - }, - "r09": { - "level": 4, - "references": "" - }, - "r10": { - "level": 4, - "references": "" - } - }, - "annotations": { - "vandv": "", - "limitations": "", - "certificationLink": "", - "certificationStatus": "Uncertified" - }, - "tsr_current": { - "r01": { - "level": 0, - "references": "" - }, - "r02": { - "level": 0, - "references": "" - }, - "r03": { - "level": 0, - "references": "" - }, - "r04": { - "level": 0, - "references": "" - }, - "r05": { - "level": 0, - "references": "" - }, - "r06": { - "level": 0, - "references": "" - }, - "r07": { - "level": 0, - "references": "" - }, - "r08": { - "level": 0, - "references": "" - }, - "r09": { - "level": 0, - "references": "" - }, - "r10": { - "level": 0, - "references": "" - } - } - }, - "dev": {} - } - ] - }, - "status_code": 200 - }, - { - "name": "get_project", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/projects/25531b1a-2565-11ee-ab43-02420a000031", - "query": null, - "request_payload": null, - "response_body": { - "data": { - "uuid": "25531b1a-2565-11ee-ab43-02420a000031", - "name": "Richard Perez", - "description": "This is an interesting study", - "thumbnail": "", - "creationDate": "2023-07-18T12:18:04.314Z", - "lastChangeDate": "2023-07-20T20:04:05.607Z", - "workspaceId": 278, - "folderId": 123, - "trashedAt": "2023-07-20T20:04:10.607Z", - "trashedBy": 2, - "workbench": { - "deea006c-a223-4103-b46e-7b677428de9f": { - "key": "simcore/services/frontend/file-picker", - "version": "1.0.0", - "label": "File Picker", - "progress": 0.0, - "thumbnail": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "parent": null - }, - "3e700053-3d10-4089-90f7-f0865167c5b2": { - "key": "simcore/services/frontend/parameter/integer", - "version": "1.0.0", - "label": "Integer Parameter", - "thumbnail": null, - "runHash": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [], - "outputs": { - "out_1": 1 - }, - "parent": null - }, - "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { - "key": "simcore/services/frontend/parameter/boolean", - "version": "1.0.0", - "label": "Boolean Parameter", - "thumbnail": null, - "runHash": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [], - "outputs": { - "out_1": true - }, - "parent": null - }, - "09e17caa-a538-40d4-9b8e-9a221b8367d3": { - "key": "simcore/services/frontend/iterator-consumer/probe/integer", - "version": "1.0.0", - "label": "Integer probe", - "thumbnail": null, - "inputs": { - "in_1": 0 - }, - "inputsUnits": {}, - "inputNodes": [], - "parent": null - } + ] }, - "prjOwner": "mitchellamber@example.org", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "UNKNOWN" - } - }, - "ui": { - "workbench": { - "09e17caa-a538-40d4-9b8e-9a221b8367d3": { - "position": { - "x": 540, - "y": 240 - } - }, - "3e700053-3d10-4089-90f7-f0865167c5b2": { - "position": { - "x": 180, - "y": 280 - } - }, - "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { - "position": { - "x": 180, - "y": 360 - } - }, - "deea006c-a223-4103-b46e-7b677428de9f": { - "position": { - "x": 160, - "y": 120 - } + "status_code": 200 + }, + { + "name": "get_project", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/projects/25531b1a-2565-11ee-ab43-02420a000031", + "query": null, + "request_payload": null, + "response_body": { + "data": { + "uuid": "25531b1a-2565-11ee-ab43-02420a000031", + "name": "Richard Perez", + "description": "This is an interesting study", + "thumbnail": "", + "creationDate": "2023-07-18T12:18:04.314Z", + "lastChangeDate": "2023-07-20T20:04:05.607Z", + "workspaceId": 278, + "type": "STANDARD", + "templateType": null, + "folderId": 123, + "trashedAt": "2023-07-20T20:04:10.607Z", + "trashedBy": 2, + "workbench": { + "deea006c-a223-4103-b46e-7b677428de9f": { + "key": "simcore/services/frontend/file-picker", + "version": "1.0.0", + "label": "File Picker", + "progress": 0.0, + "thumbnail": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "parent": null + }, + "3e700053-3d10-4089-90f7-f0865167c5b2": { + "key": "simcore/services/frontend/parameter/integer", + "version": "1.0.0", + "label": "Integer Parameter", + "thumbnail": null, + "runHash": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [], + "outputs": { + "out_1": 1 + }, + "parent": null + }, + "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { + "key": "simcore/services/frontend/parameter/boolean", + "version": "1.0.0", + "label": "Boolean Parameter", + "thumbnail": null, + "runHash": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [], + "outputs": { + "out_1": true + }, + "parent": null + }, + "09e17caa-a538-40d4-9b8e-9a221b8367d3": { + "key": "simcore/services/frontend/iterator-consumer/probe/integer", + "version": "1.0.0", + "label": "Integer probe", + "thumbnail": null, + "inputs": { + "in_1": 0 + }, + "inputsUnits": {}, + "inputNodes": [], + "parent": null + } + }, + "prjOwner": "mitchellamber@example.org", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "UNKNOWN" + } + }, + "ui": { + "workbench": { + "09e17caa-a538-40d4-9b8e-9a221b8367d3": { + "position": { + "x": 540, + "y": 240 + } + }, + "3e700053-3d10-4089-90f7-f0865167c5b2": { + "position": { + "x": 180, + "y": 280 + } + }, + "60d76eed-2e50-42e7-8c2d-580566b2f4c6": { + "position": { + "x": 180, + "y": 360 + } + }, + "deea006c-a223-4103-b46e-7b677428de9f": { + "position": { + "x": 160, + "y": 120 + } + } + }, + "slideshow": {}, + "currentNodeId": "25531b1a-2565-11ee-ab43-02420a000031", + "mode": "workbench" + }, + "quality": { + "enabled": true, + "tsr_target": { + "r01": { + "level": 4, + "references": "" + }, + "r02": { + "level": 4, + "references": "" + }, + "r03": { + "level": 4, + "references": "" + }, + "r04": { + "level": 4, + "references": "" + }, + "r05": { + "level": 4, + "references": "" + }, + "r06": { + "level": 4, + "references": "" + }, + "r07": { + "level": 4, + "references": "" + }, + "r08": { + "level": 4, + "references": "" + }, + "r09": { + "level": 4, + "references": "" + }, + "r10": { + "level": 4, + "references": "" + } + }, + "annotations": { + "vandv": "", + "limitations": "", + "certificationLink": "", + "certificationStatus": "Uncertified" + }, + "tsr_current": { + "r01": { + "level": 0, + "references": "" + }, + "r02": { + "level": 0, + "references": "" + }, + "r03": { + "level": 0, + "references": "" + }, + "r04": { + "level": 0, + "references": "" + }, + "r05": { + "level": 0, + "references": "" + }, + "r06": { + "level": 0, + "references": "" + }, + "r07": { + "level": 0, + "references": "" + }, + "r08": { + "level": 0, + "references": "" + }, + "r09": { + "level": 0, + "references": "" + }, + "r10": { + "level": 0, + "references": "" + } + } + }, + "dev": {} } - }, - "slideshow": {}, - "currentNodeId": "25531b1a-2565-11ee-ab43-02420a000031", - "mode": "workbench" }, - "quality": { - "enabled": true, - "tsr_target": { - "r01": { - "level": 4, - "references": "" - }, - "r02": { - "level": 4, - "references": "" - }, - "r03": { - "level": 4, - "references": "" - }, - "r04": { - "level": 4, - "references": "" - }, - "r05": { - "level": 4, - "references": "" - }, - "r06": { - "level": 4, - "references": "" - }, - "r07": { - "level": 4, - "references": "" - }, - "r08": { - "level": 4, - "references": "" - }, - "r09": { - "level": 4, - "references": "" - }, - "r10": { - "level": 4, - "references": "" - } - }, - "annotations": { - "vandv": "", - "limitations": "", - "certificationLink": "", - "certificationStatus": "Uncertified" - }, - "tsr_current": { - "r01": { - "level": 0, - "references": "" - }, - "r02": { - "level": 0, - "references": "" - }, - "r03": { - "level": 0, - "references": "" - }, - "r04": { - "level": 0, - "references": "" - }, - "r05": { - "level": 0, - "references": "" - }, - "r06": { - "level": 0, - "references": "" - }, - "r07": { - "level": 0, - "references": "" - }, - "r08": { - "level": 0, - "references": "" - }, - "r09": { - "level": 0, - "references": "" - }, - "r10": { - "level": 0, - "references": "" + "status_code": 200 + }, + { + "name": "get_invalid_project", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/projects/15531b1a-2565-11ee-ab43-02420a000031", + "query": null, + "request_payload": null, + "response_body": { + "data": null, + "error": { + "logs": [ + { + "message": "Project 15531b1a-2565-11ee-ab43-02420a000031 not found", + "level": "ERROR", + "logger": "user" + } + ], + "errors": [ + { + "code": "HTTPNotFound", + "message": "Project 15531b1a-2565-11ee-ab43-02420a000031 not found", + "resource": null, + "field": null + } + ], + "status": 404, + "message": "Project 15531b1a-2565-11ee-ab43-02420a000031 not found" } - } }, - "dev": {} - } + "status_code": 404 }, - "status_code": 200 - }, - { - "name": "get_invalid_project", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/projects/15531b1a-2565-11ee-ab43-02420a000031", - "query": null, - "request_payload": null, - "response_body": { - "data": null, - "error": { - "logs": [ - { - "message": "Project 15531b1a-2565-11ee-ab43-02420a000031 not found", - "level": "ERROR", - "logger": "user" - } - ], - "errors": [ - { - "code": "HTTPNotFound", - "message": "Project 15531b1a-2565-11ee-ab43-02420a000031 not found", - "resource": null, - "field": null - } - ], - "status": 404, - "message": "Project 15531b1a-2565-11ee-ab43-02420a000031 not found" - } - }, - "status_code": 404 - }, - { - "name": "get_project_ports", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/projects/25531b1a-2565-11ee-ab43-02420a000031/metadata/ports", - "query": null, - "request_payload": null, - "response_body": { - "data": [ - { - "key": "3e700053-3d10-4089-90f7-f0865167c5b2", - "kind": "input", - "content_schema": { - "title": "Integer Parameter", - "type": "integer", - "description": "Parameter of type integer" - } - }, - { - "key": "60d76eed-2e50-42e7-8c2d-580566b2f4c6", - "kind": "input", - "content_schema": { - "title": "Boolean Parameter", - "type": "boolean", - "description": "Parameter of type boolean" - } + { + "name": "get_project_ports", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/projects/25531b1a-2565-11ee-ab43-02420a000031/metadata/ports", + "query": null, + "request_payload": null, + "response_body": { + "data": [ + { + "key": "3e700053-3d10-4089-90f7-f0865167c5b2", + "kind": "input", + "content_schema": { + "title": "Integer Parameter", + "type": "integer", + "description": "Parameter of type integer" + } + }, + { + "key": "60d76eed-2e50-42e7-8c2d-580566b2f4c6", + "kind": "input", + "content_schema": { + "title": "Boolean Parameter", + "type": "boolean", + "description": "Parameter of type boolean" + } + }, + { + "key": "09e17caa-a538-40d4-9b8e-9a221b8367d3", + "kind": "output", + "content_schema": { + "title": "Integer probe", + "type": "integer", + "description": "Captures integer values attached to it", + "default": 0 + } + } + ] }, - { - "key": "09e17caa-a538-40d4-9b8e-9a221b8367d3", - "kind": "output", - "content_schema": { - "title": "Integer probe", - "type": "integer", - "description": "Captures integer values attached to it", - "default": 0 - } - } - ] + "status_code": 200 }, - "status_code": 200 - }, - { - "name": "get_invalid_project_ports", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/projects/15531b1a-2565-11ee-ab43-02420a000031/metadata/ports", - "query": null, - "request_payload": null, - "response_body": { - "data": null, - "error": { - "logs": [ - { - "message": "Project '15531b1a-2565-11ee-ab43-02420a000031' not found", - "level": "ERROR", - "logger": "user" - } - ], - "errors": [ - { - "code": "HTTPNotFound", - "message": "Project '15531b1a-2565-11ee-ab43-02420a000031' not found", - "resource": null, - "field": null - } - ], - "status": 404, - "message": "Project '15531b1a-2565-11ee-ab43-02420a000031' not found" - } - }, - "status_code": 404 - } + { + "name": "get_invalid_project_ports", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/projects/15531b1a-2565-11ee-ab43-02420a000031/metadata/ports", + "query": null, + "request_payload": null, + "response_body": { + "data": null, + "error": { + "logs": [ + { + "message": "Project '15531b1a-2565-11ee-ab43-02420a000031' not found", + "level": "ERROR", + "logger": "user" + } + ], + "errors": [ + { + "code": "HTTPNotFound", + "message": "Project '15531b1a-2565-11ee-ab43-02420a000031' not found", + "resource": null, + "field": null + } + ], + "status": 404, + "message": "Project '15531b1a-2565-11ee-ab43-02420a000031' not found" + } + }, + "status_code": 404 + } ] diff --git a/services/api-server/tests/mocks/get_job_outputs.json b/services/api-server/tests/mocks/get_job_outputs.json index d7649ebc2c0..579d79b7de9 100644 --- a/services/api-server/tests/mocks/get_job_outputs.json +++ b/services/api-server/tests/mocks/get_job_outputs.json @@ -145,6 +145,8 @@ "creationDate": "2024-07-16T12:56:51.922Z", "lastChangeDate": "2024-07-16T12:56:51.922Z", "workspaceId": 5, + "type": "STANDARD", + "templateType": null, "folderId": 2, "trashedAt": null, "trashedBy": null, diff --git a/services/api-server/tests/mocks/get_job_pricing_unit_invalid_solver.json b/services/api-server/tests/mocks/get_job_pricing_unit_invalid_solver.json index 53baa5b4f02..270af965166 100644 --- a/services/api-server/tests/mocks/get_job_pricing_unit_invalid_solver.json +++ b/services/api-server/tests/mocks/get_job_pricing_unit_invalid_solver.json @@ -1,109 +1,111 @@ [ - { - "name": "GET /projects/87643648-3a38-44e2-9cfe-d86ab3d50629", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}", - "path_parameters": [ - { - "in_": "path", - "name": "project_id", - "required": true, - "schema_": { - "title": "Project Id", - "type_": "str", - "pattern": null, - "format_": "uuid", - "exclusiveMinimum": null, - "minimum": null, - "anyOf": null, - "allOf": null, - "oneOf": null - }, - "response_value": "projects" - } - ] - }, - "query": null, - "request_payload": null, - "response_body": { - "data": { - "uuid": "87643648-3a38-44e2-9cfe-d86ab3d50629", - "name": "solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629", - "description": "Study associated to solver job:\n{\n \"id\": \"87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"inputs_checksum\": \"015ba4cd5cf00c511a8217deb65c242e3b15dc6ae4b1ecf94982d693887d9e8a\",\n \"created_at\": \"2023-10-10T20:15:22.071797+00:00\"\n}", - "thumbnail": "https://via.placeholder.com/170x120.png", - "creationDate": "2023-10-10T20:15:22.096Z", - "lastChangeDate": "2023-10-10T20:15:22.096Z", - "workspaceId": 3, - "folderId": 31, - "trashedAt": null, - "trashedBy": null, - "workbench": { - "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { - "key": "simcore/services/comp/isolve", - "version": "2.1.24", - "label": "isolve edge", - "progress": 0.0, - "inputs": { - "x": 4.33, - "n": 55, - "title": "Temperature", - "enabled": true, - "input_file": { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "label": "input.txt" - } - }, - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "state": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED", - "progress": null - } - } - }, - "prjOwner": "ptrevino@example.net", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "NOT_STARTED" - } + { + "name": "GET /projects/87643648-3a38-44e2-9cfe-d86ab3d50629", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}", + "path_parameters": [ + { + "in_": "path", + "name": "project_id", + "required": true, + "schema_": { + "title": "Project Id", + "type_": "str", + "pattern": null, + "format_": "uuid", + "exclusiveMinimum": null, + "minimum": null, + "anyOf": null, + "allOf": null, + "oneOf": null + }, + "response_value": "projects" + } + ] }, - "ui": { - "workbench": { - "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { - "position": { - "x": 633, - "y": 229 - } + "query": null, + "request_payload": null, + "response_body": { + "data": { + "uuid": "87643648-3a38-44e2-9cfe-d86ab3d50629", + "name": "solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629", + "description": "Study associated to solver job:\n{\n \"id\": \"87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"inputs_checksum\": \"015ba4cd5cf00c511a8217deb65c242e3b15dc6ae4b1ecf94982d693887d9e8a\",\n \"created_at\": \"2023-10-10T20:15:22.071797+00:00\"\n}", + "thumbnail": "https://via.placeholder.com/170x120.png", + "creationDate": "2023-10-10T20:15:22.096Z", + "lastChangeDate": "2023-10-10T20:15:22.096Z", + "workspaceId": 3, + "type": "STANDARD", + "templateType": null, + "folderId": 31, + "trashedAt": null, + "trashedBy": null, + "workbench": { + "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { + "key": "simcore/services/comp/isolve", + "version": "2.1.24", + "label": "isolve edge", + "progress": 0.0, + "inputs": { + "x": 4.33, + "n": 55, + "title": "Temperature", + "enabled": true, + "input_file": { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "label": "input.txt" + } + }, + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED", + "progress": null + } + } + }, + "prjOwner": "ptrevino@example.net", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "NOT_STARTED" + } + }, + "ui": { + "workbench": { + "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { + "position": { + "x": 633, + "y": 229 + } + } + }, + "slideshow": {}, + "currentNodeId": "4b03863d-107a-5c77-a3ca-c5ba1d7048c0", + "annotations": {} + }, + "quality": {}, + "dev": {} } - }, - "slideshow": {}, - "currentNodeId": "4b03863d-107a-5c77-a3ca-c5ba1d7048c0", - "annotations": {} }, - "quality": {}, - "dev": {} - } - }, - "status_code": 200 - } + "status_code": 200 + } ] diff --git a/services/api-server/tests/mocks/get_job_pricing_unit_success.json b/services/api-server/tests/mocks/get_job_pricing_unit_success.json index ba4cae5d53c..8ab29ed9112 100644 --- a/services/api-server/tests/mocks/get_job_pricing_unit_success.json +++ b/services/api-server/tests/mocks/get_job_pricing_unit_success.json @@ -1,170 +1,172 @@ [ - { - "name": "GET /projects/87643648-3a38-44e2-9cfe-d86ab3d50629", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}", - "path_parameters": [ - { - "in_": "path", - "name": "project_id", - "required": true, - "schema_": { - "title": "Project Id", - "type_": "str", - "pattern": null, - "format_": "uuid", - "exclusiveMinimum": null, - "minimum": null, - "anyOf": null, - "allOf": null, - "oneOf": null - }, - "response_value": "projects" - } - ] - }, - "query": null, - "request_payload": null, - "response_body": { - "data": { - "uuid": "87643648-3a38-44e2-9cfe-d86ab3d50629", - "name": "solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629", - "description": "Study associated to solver job:\n{\n \"id\": \"87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"inputs_checksum\": \"015ba4cd5cf00c511a8217deb65c242e3b15dc6ae4b1ecf94982d693887d9e8a\",\n \"created_at\": \"2023-10-10T20:15:22.071797+00:00\"\n}", - "thumbnail": "https://via.placeholder.com/170x120.png", - "creationDate": "2023-10-10T20:15:22.096Z", - "lastChangeDate": "2023-10-10T20:15:22.096Z", - "workspaceId": 3, - "folderId": 1, - "trashedAt": null, - "trashedBy": null, - "workbench": { - "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { - "key": "simcore/services/comp/isolve", - "version": "2.1.24", - "label": "isolve edge", - "progress": 0.0, - "inputs": { - "x": 4.33, - "n": 55, - "title": "Temperature", - "enabled": true, - "input_file": { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "label": "input.txt" - } - }, - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "state": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED", - "progress": null - } - } - }, - "prjOwner": "imitchell@example.net", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "NOT_STARTED" - } + { + "name": "GET /projects/87643648-3a38-44e2-9cfe-d86ab3d50629", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}", + "path_parameters": [ + { + "in_": "path", + "name": "project_id", + "required": true, + "schema_": { + "title": "Project Id", + "type_": "str", + "pattern": null, + "format_": "uuid", + "exclusiveMinimum": null, + "minimum": null, + "anyOf": null, + "allOf": null, + "oneOf": null + }, + "response_value": "projects" + } + ] }, - "ui": { - "workbench": { - "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { - "position": { - "x": 633, - "y": 229 - } + "query": null, + "request_payload": null, + "response_body": { + "data": { + "uuid": "87643648-3a38-44e2-9cfe-d86ab3d50629", + "name": "solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629", + "description": "Study associated to solver job:\n{\n \"id\": \"87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.24/jobs/87643648-3a38-44e2-9cfe-d86ab3d50629\",\n \"inputs_checksum\": \"015ba4cd5cf00c511a8217deb65c242e3b15dc6ae4b1ecf94982d693887d9e8a\",\n \"created_at\": \"2023-10-10T20:15:22.071797+00:00\"\n}", + "thumbnail": "https://via.placeholder.com/170x120.png", + "creationDate": "2023-10-10T20:15:22.096Z", + "lastChangeDate": "2023-10-10T20:15:22.096Z", + "workspaceId": 3, + "type": "STANDARD", + "templateType": null, + "folderId": 1, + "trashedAt": null, + "trashedBy": null, + "workbench": { + "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { + "key": "simcore/services/comp/isolve", + "version": "2.1.24", + "label": "isolve edge", + "progress": 0.0, + "inputs": { + "x": 4.33, + "n": 55, + "title": "Temperature", + "enabled": true, + "input_file": { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "label": "input.txt" + } + }, + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED", + "progress": null + } + } + }, + "prjOwner": "imitchell@example.net", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "NOT_STARTED" + } + }, + "ui": { + "workbench": { + "4b03863d-107a-5c77-a3ca-c5ba1d7048c0": { + "position": { + "x": 633, + "y": 229 + } + } + }, + "slideshow": {}, + "currentNodeId": "4b03863d-107a-5c77-a3ca-c5ba1d7048c0", + "annotations": {} + }, + "quality": {}, + "dev": {} } - }, - "slideshow": {}, - "currentNodeId": "4b03863d-107a-5c77-a3ca-c5ba1d7048c0", - "annotations": {} }, - "quality": {}, - "dev": {} - } + "status_code": 200 }, - "status_code": 200 - }, - { - "name": "GET /projects/87643648-3a38-44e2-9cfe-d86ab3d50629/nodes/4b03863d-107a-5c77-a3ca-c5ba1d7048c0/pricing-unit", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/nodes/{node_id}/pricing-unit", - "path_parameters": [ - { - "in_": "path", - "name": "node_id", - "required": true, - "schema_": { - "title": "Node Id", - "type_": "str", - "pattern": null, - "format_": "uuid", - "exclusiveMinimum": null, - "minimum": null, - "anyOf": null, - "allOf": null, - "oneOf": null - }, - "response_value": "nodes" + { + "name": "GET /projects/87643648-3a38-44e2-9cfe-d86ab3d50629/nodes/4b03863d-107a-5c77-a3ca-c5ba1d7048c0/pricing-unit", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/nodes/{node_id}/pricing-unit", + "path_parameters": [ + { + "in_": "path", + "name": "node_id", + "required": true, + "schema_": { + "title": "Node Id", + "type_": "str", + "pattern": null, + "format_": "uuid", + "exclusiveMinimum": null, + "minimum": null, + "anyOf": null, + "allOf": null, + "oneOf": null + }, + "response_value": "nodes" + }, + { + "in_": "path", + "name": "project_id", + "required": true, + "schema_": { + "title": "Project Id", + "type_": "str", + "pattern": null, + "format_": "uuid", + "exclusiveMinimum": null, + "minimum": null, + "anyOf": null, + "allOf": null, + "oneOf": null + }, + "response_value": "projects" + } + ] }, - { - "in_": "path", - "name": "project_id", - "required": true, - "schema_": { - "title": "Project Id", - "type_": "str", - "pattern": null, - "format_": "uuid", - "exclusiveMinimum": null, - "minimum": null, - "anyOf": null, - "allOf": null, - "oneOf": null - }, - "response_value": "projects" - } - ] - }, - "query": null, - "request_payload": null, - "response_body": { - "data": { - "pricingUnitId": 1, - "unitName": "small", - "unitExtraInfo": { - "CPU": 500, - "RAM": 26598, - "VRAM": 456789123456 + "query": null, + "request_payload": null, + "response_body": { + "data": { + "pricingUnitId": 1, + "unitName": "small", + "unitExtraInfo": { + "CPU": 500, + "RAM": 26598, + "VRAM": 456789123456 + }, + "currentCostPerUnit": 50, + "default": true + } }, - "currentCostPerUnit": 50, - "default": true - } - }, - "status_code": 200 - } + "status_code": 200 + } ] diff --git a/services/api-server/tests/mocks/get_solver_outputs.json b/services/api-server/tests/mocks/get_solver_outputs.json index 4971676029f..53e041cc45d 100644 --- a/services/api-server/tests/mocks/get_solver_outputs.json +++ b/services/api-server/tests/mocks/get_solver_outputs.json @@ -37,6 +37,8 @@ "creationDate": "2024-01-18T12:33:56.952Z", "lastChangeDate": "2024-01-18T12:34:13.002Z", "workspaceId": 2, + "type": "STANDARD", + "templateType": null, "folderId": 2, "trashedAt": null, "trashedBy": null, diff --git a/services/api-server/tests/mocks/on_list_jobs.json b/services/api-server/tests/mocks/on_list_jobs.json index 0e94cec3ee2..6f920f42ad5 100644 --- a/services/api-server/tests/mocks/on_list_jobs.json +++ b/services/api-server/tests/mocks/on_list_jobs.json @@ -1,249 +1,253 @@ [ - { - "name": "get_service", - "description": "", - "method": "GET", - "host": "catalog", - "path": "/v0/services/simcore/services/comp/itis/sleeper/2.0.0", - "query": "user_id=1", - "request_payload": null, - "response_body": { - "name": "sleeper", - "thumbnail": null, - "description": "A service which awaits for time to pass.", - "deprecated": null, - "classifiers": [], - "quality": {}, - "key": "simcore/services/comp/itis/sleeper", - "version": "2.0.0", - "integration-version": "1.0.0", - "type": "computational", - "authors": [ - { - "name": "Julia Lewis", - "email": "ecantrell@example.org", - "affiliation": "Eaton LLC" - } - ], - "contact": "moorezachary@example.com", - "inputs": { - "input_1": { - "displayOrder": 1.0, - "label": "File with int number", - "description": "Pick a file containing only one integer", - "type": "data:text/plain", - "fileToKeyMap": { - "single_number.txt": "input_1" - } - }, - "input_2": { - "displayOrder": 2.0, - "label": "Sleep interval", - "description": "Choose an amount of time to sleep", - "type": "integer", - "defaultValue": 2 - }, - "input_3": { - "displayOrder": 3.0, - "label": "Fail after sleep", - "description": "If set to true will cause service to fail after it sleeps", - "type": "boolean", - "defaultValue": false - } - }, - "outputs": { - "output_1": { - "displayOrder": 1.0, - "label": "File containing one random integer", - "description": "Integer is generated in range [1-9]", - "type": "data:text/plain", - "fileToKeyMap": { - "single_number.txt": "output_1" - } - }, - "output_2": { - "displayOrder": 2.0, - "label": "Random sleep interval", - "description": "Interval is generated in range [1-9]", - "type": "integer" - } - } - }, - "status_code": 200 - }, - { - "name": "list_projects", - "description": "", - "method": "GET", - "host": "webserver", - "path": "/v0/projects", - "query": "type=user&show_hidden=true&limit=20&offset=0&search=solvers%2Fsimcore%252Fservices%252Fcomp%252Fitis%252Fsleeper%2Freleases%2F2.0.0", - "request_payload": null, - "response_body": { - "_meta": { - "limit": 20, - "total": 3, - "offset": 0, - "count": 2 - }, - "_links": { - "self": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=0&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0", - "first": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=0&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0", - "prev": null, - "next": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=2&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0", - "last": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=2&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0" - }, - "data": [ - { - "uuid": "1455d63c-4e8f-4ffe-bdd4-e885f991cd87", - "name": "solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/1455d63c-4e8f-4ffe-bdd4-e885f991cd87", - "description": "Study associated to solver job:\n{\n \"id\": \"1455d63c-4e8f-4ffe-bdd4-e885f991cd87\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/1455d63c-4e8f-4ffe-bdd4-e885f991cd87\",\n \"inputs_checksum\": \"4e16c861276db7f69f7fac76dfd9d65308121d767b7cba56c1003ef6ed38ffec\",\n \"created_at\": \"2023-06-22T18:42:35.489609\"\n}", - "thumbnail": "https://via.placeholder.com/170x120.png", - "creationDate": "2023-06-22T18:42:35.506Z", - "lastChangeDate": "2023-06-22T18:42:35.506Z", - "workspaceId": 7, - "folderId": 1, - "trashedAt": "2023-06-22T18:42:36.506Z", - "trashedBy": 2, - "workbench": { - "05c7ed3b-0be1-5077-8065-fb55f5e59ff3": { - "key": "simcore/services/comp/itis/sleeper", - "version": "2.0.0", - "label": "sleeper", - "progress": 0.0, - "inputs": { - "x": 4.33, - "n": 55, - "title": "Temperature", - "enabled": true, - "input_file": { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "label": "input.txt" + { + "name": "get_service", + "description": "", + "method": "GET", + "host": "catalog", + "path": "/v0/services/simcore/services/comp/itis/sleeper/2.0.0", + "query": "user_id=1", + "request_payload": null, + "response_body": { + "name": "sleeper", + "thumbnail": null, + "description": "A service which awaits for time to pass.", + "deprecated": null, + "classifiers": [], + "quality": {}, + "key": "simcore/services/comp/itis/sleeper", + "version": "2.0.0", + "integration-version": "1.0.0", + "type": "computational", + "authors": [ + { + "name": "Julia Lewis", + "email": "ecantrell@example.org", + "affiliation": "Eaton LLC" } - }, - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "state": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED", - "progress": 0.0 - } - } - }, - "prjOwner": "madison17@example.org", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "NOT_STARTED" - } - }, - "ui": { - "workbench": { - "05c7ed3b-0be1-5077-8065-fb55f5e59ff3": { - "position": { - "x": 633, - "y": 229 + ], + "contact": "moorezachary@example.com", + "inputs": { + "input_1": { + "displayOrder": 1.0, + "label": "File with int number", + "description": "Pick a file containing only one integer", + "type": "data:text/plain", + "fileToKeyMap": { + "single_number.txt": "input_1" + } + }, + "input_2": { + "displayOrder": 2.0, + "label": "Sleep interval", + "description": "Choose an amount of time to sleep", + "type": "integer", + "defaultValue": 2 + }, + "input_3": { + "displayOrder": 3.0, + "label": "Fail after sleep", + "description": "If set to true will cause service to fail after it sleeps", + "type": "boolean", + "defaultValue": false } - } }, - "slideshow": {}, - "currentNodeId": "05c7ed3b-0be1-5077-8065-fb55f5e59ff3", - "annotations": {} - }, - "quality": {}, - "dev": {} - }, - { - "uuid": "61d8acda-a560-4d76-ac47-59c56a399d98", - "name": "solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/61d8acda-a560-4d76-ac47-59c56a399d98", - "description": "Study associated to solver job:\n{\n \"id\": \"61d8acda-a560-4d76-ac47-59c56a399d98\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/61d8acda-a560-4d76-ac47-59c56a399d98\",\n \"inputs_checksum\": \"4e16c861276db7f69f7fac76dfd9d65308121d767b7cba56c1003ef6ed38ffec\",\n \"created_at\": \"2023-06-22T18:42:32.126304\"\n}", - "thumbnail": "https://via.placeholder.com/170x120.png", - "creationDate": "2023-06-22T18:42:32.201Z", - "lastChangeDate": "2023-06-22T18:42:32.201Z", - "workspaceId": 4, - "folderId": 8, - "trashedAt": "2023-06-22T18:42:33.201Z", - "trashedBy": 2, - "workbench": { - "34805d7e-c2d0-561f-831f-c74a28fc9bd1": { - "key": "simcore/services/comp/itis/sleeper", - "version": "2.0.0", - "label": "sleeper", - "progress": 0.0, - "inputs": { - "x": 4.33, - "n": 55, - "title": "Temperature", - "enabled": true, - "input_file": { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "label": "input.txt" + "outputs": { + "output_1": { + "displayOrder": 1.0, + "label": "File containing one random integer", + "description": "Integer is generated in range [1-9]", + "type": "data:text/plain", + "fileToKeyMap": { + "single_number.txt": "output_1" + } + }, + "output_2": { + "displayOrder": 2.0, + "label": "Random sleep interval", + "description": "Interval is generated in range [1-9]", + "type": "integer" } - }, - "inputsUnits": {}, - "inputNodes": [], - "outputs": {}, - "state": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED", - "progress": 0.0 - } } - }, - "prjOwner": "jacksonnicole@example.net", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" + }, + "status_code": 200 + }, + { + "name": "list_projects", + "description": "", + "method": "GET", + "host": "webserver", + "path": "/v0/projects", + "query": "type=user&show_hidden=true&limit=20&offset=0&search=solvers%2Fsimcore%252Fservices%252Fcomp%252Fitis%252Fsleeper%2Freleases%2F2.0.0", + "request_payload": null, + "response_body": { + "_meta": { + "limit": 20, + "total": 3, + "offset": 0, + "count": 2 }, - "state": { - "value": "NOT_STARTED" - } - }, - "ui": { - "workbench": { - "34805d7e-c2d0-561f-831f-c74a28fc9bd1": { - "position": { - "x": 633, - "y": 229 - } - } + "_links": { + "self": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=0&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0", + "first": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=0&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0", + "prev": null, + "next": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=2&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0", + "last": "http://webserver:8080/v0/projects?type=user&show_hidden=true&limit=2&offset=2&search=solvers/simcore%252Fservices%252Fcomp%252Fitis%252Fsleeper/releases/2.0.0" }, - "slideshow": {}, - "currentNodeId": "34805d7e-c2d0-561f-831f-c74a28fc9bd1", - "annotations": {} - }, - "quality": {}, - "dev": {} - } - ] - }, - "status_code": 200 - } + "data": [ + { + "uuid": "1455d63c-4e8f-4ffe-bdd4-e885f991cd87", + "name": "solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/1455d63c-4e8f-4ffe-bdd4-e885f991cd87", + "description": "Study associated to solver job:\n{\n \"id\": \"1455d63c-4e8f-4ffe-bdd4-e885f991cd87\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/1455d63c-4e8f-4ffe-bdd4-e885f991cd87\",\n \"inputs_checksum\": \"4e16c861276db7f69f7fac76dfd9d65308121d767b7cba56c1003ef6ed38ffec\",\n \"created_at\": \"2023-06-22T18:42:35.489609\"\n}", + "thumbnail": "https://via.placeholder.com/170x120.png", + "creationDate": "2023-06-22T18:42:35.506Z", + "lastChangeDate": "2023-06-22T18:42:35.506Z", + "workspaceId": 7, + "type": "STANDARD", + "templateType": null, + "folderId": 1, + "trashedAt": "2023-06-22T18:42:36.506Z", + "trashedBy": 2, + "workbench": { + "05c7ed3b-0be1-5077-8065-fb55f5e59ff3": { + "key": "simcore/services/comp/itis/sleeper", + "version": "2.0.0", + "label": "sleeper", + "progress": 0.0, + "inputs": { + "x": 4.33, + "n": 55, + "title": "Temperature", + "enabled": true, + "input_file": { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "label": "input.txt" + } + }, + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED", + "progress": 0.0 + } + } + }, + "prjOwner": "madison17@example.org", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "NOT_STARTED" + } + }, + "ui": { + "workbench": { + "05c7ed3b-0be1-5077-8065-fb55f5e59ff3": { + "position": { + "x": 633, + "y": 229 + } + } + }, + "slideshow": {}, + "currentNodeId": "05c7ed3b-0be1-5077-8065-fb55f5e59ff3", + "annotations": {} + }, + "quality": {}, + "dev": {} + }, + { + "uuid": "61d8acda-a560-4d76-ac47-59c56a399d98", + "name": "solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/61d8acda-a560-4d76-ac47-59c56a399d98", + "description": "Study associated to solver job:\n{\n \"id\": \"61d8acda-a560-4d76-ac47-59c56a399d98\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.0.0/jobs/61d8acda-a560-4d76-ac47-59c56a399d98\",\n \"inputs_checksum\": \"4e16c861276db7f69f7fac76dfd9d65308121d767b7cba56c1003ef6ed38ffec\",\n \"created_at\": \"2023-06-22T18:42:32.126304\"\n}", + "thumbnail": "https://via.placeholder.com/170x120.png", + "creationDate": "2023-06-22T18:42:32.201Z", + "lastChangeDate": "2023-06-22T18:42:32.201Z", + "workspaceId": 4, + "type": "STANDARD", + "templateType": null, + "folderId": 8, + "trashedAt": "2023-06-22T18:42:33.201Z", + "trashedBy": 2, + "workbench": { + "34805d7e-c2d0-561f-831f-c74a28fc9bd1": { + "key": "simcore/services/comp/itis/sleeper", + "version": "2.0.0", + "label": "sleeper", + "progress": 0.0, + "inputs": { + "x": 4.33, + "n": 55, + "title": "Temperature", + "enabled": true, + "input_file": { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "label": "input.txt" + } + }, + "inputsUnits": {}, + "inputNodes": [], + "outputs": {}, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED", + "progress": 0.0 + } + } + }, + "prjOwner": "jacksonnicole@example.net", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "NOT_STARTED" + } + }, + "ui": { + "workbench": { + "34805d7e-c2d0-561f-831f-c74a28fc9bd1": { + "position": { + "x": 633, + "y": 229 + } + } + }, + "slideshow": {}, + "currentNodeId": "34805d7e-c2d0-561f-831f-c74a28fc9bd1", + "annotations": {} + }, + "quality": {}, + "dev": {} + } + ] + }, + "status_code": 200 + } ] diff --git a/services/api-server/tests/mocks/run_study_workflow.json b/services/api-server/tests/mocks/run_study_workflow.json index 9bfcf708650..90216ee45ba 100644 --- a/services/api-server/tests/mocks/run_study_workflow.json +++ b/services/api-server/tests/mocks/run_study_workflow.json @@ -302,6 +302,8 @@ "creationDate": "2024-04-15T15:50:28.196Z", "lastChangeDate": "2024-04-15T15:50:28.196Z", "workspaceId": 3, + "type": "STANDARD", + "templateType": null, "folderId": 3, "trashedAt": null, "trashedBy": null, diff --git a/services/api-server/tests/mocks/start_job_not_enough_credit.json b/services/api-server/tests/mocks/start_job_not_enough_credit.json index 4ebe858881c..c942d8341ad 100644 --- a/services/api-server/tests/mocks/start_job_not_enough_credit.json +++ b/services/api-server/tests/mocks/start_job_not_enough_credit.json @@ -37,6 +37,8 @@ "creationDate": "2023-10-26T14:13:08.013Z", "lastChangeDate": "2023-10-26T14:13:08.013Z", "workspaceId": 3, + "type": "STANDARD", + "templateType": null, "folderId": 2, "trashedAt": null, "trashedBy": null, diff --git a/services/api-server/tests/mocks/start_job_with_payment.json b/services/api-server/tests/mocks/start_job_with_payment.json index e4cbc7cc21f..847dab9d054 100644 --- a/services/api-server/tests/mocks/start_job_with_payment.json +++ b/services/api-server/tests/mocks/start_job_with_payment.json @@ -37,6 +37,8 @@ "creationDate": "2023-10-26T14:10:11.118Z", "lastChangeDate": "2023-10-26T14:10:11.118Z", "workspaceId": 12, + "type": "STANDARD", + "templateType": null, "folderId": 2, "trashedAt": null, "trashedBy": null, diff --git a/services/api-server/tests/mocks/test_get_and_update_study_job_metadata.json b/services/api-server/tests/mocks/test_get_and_update_study_job_metadata.json index 2500f764bc1..b624e232ff9 100644 --- a/services/api-server/tests/mocks/test_get_and_update_study_job_metadata.json +++ b/services/api-server/tests/mocks/test_get_and_update_study_job_metadata.json @@ -1,619 +1,621 @@ [ - { - "name": "clone_project", - "description": "", - "method": "POST", - "host": "webserver", - "path": { - "path": "/v0/projects", - "path_parameters": [] - }, - "query": "from_study=784f63f4-1d9f-11ef-892d-0242ac140012&hidden=true", - "response_body": { - "data": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "task_name": "POST /v0/projects?from_study=784f63f4-1d9f-11ef-892d-0242ac140012&hidden=true", - "status_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253D784f63f4-1d9f-11ef-892d-0242ac140012%2526hidden%253Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "result_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253D784f63f4-1d9f-11ef-892d-0242ac140012%2526hidden%253Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72/result", - "abort_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253D784f63f4-1d9f-11ef-892d-0242ac140012%2526hidden%253Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72" - } - }, - "status_code": 202 - }, - { - "name": "get_clone_project_task_status", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" - } - ] + { + "name": "clone_project", + "description": "", + "method": "POST", + "host": "webserver", + "path": { + "path": "/v0/projects", + "path_parameters": [] + }, + "query": "from_study=784f63f4-1d9f-11ef-892d-0242ac140012&hidden=true", + "response_body": { + "data": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "task_name": "POST /v0/projects?from_study=784f63f4-1d9f-11ef-892d-0242ac140012&hidden=true", + "status_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253D784f63f4-1d9f-11ef-892d-0242ac140012%2526hidden%253Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "result_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253D784f63f4-1d9f-11ef-892d-0242ac140012%2526hidden%253Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72/result", + "abort_href": "http://webserver:8080/v0/tasks/POST%2520%252Fv0%252Fprojects%253Ffrom_study%253D784f63f4-1d9f-11ef-892d-0242ac140012%2526hidden%253Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72" + } + }, + "status_code": 202 }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "message": "creating new study...", - "percent": 0.0 + { + "name": "get_clone_project_task_status", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "done": false, - "started": "2024-05-30T10:29:54.137359" - } - } - }, - { - "name": "get_clone_project_task_status_1", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "message": "creating new study...", + "percent": 0.0 + }, + "done": false, + "started": "2024-05-30T10:29:54.137359" + } } - ] }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "message": "Checking study access rights...", - "percent": 0.0 + { + "name": "get_clone_project_task_status_1", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "done": false, - "started": "2024-05-30T10:29:54.137359" - } - } - }, - { - "name": "get_clone_project_task_status_2", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "message": "Checking study access rights...", + "percent": 0.0 + }, + "done": false, + "started": "2024-05-30T10:29:54.137359" + } } - ] }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "message": "finished", - "percent": 1.0 + { + "name": "get_clone_project_task_status_2", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "done": false, - "started": "2024-05-30T10:29:54.137359" - } - } - }, - { - "name": "get_clone_project_task_status_3", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "message": "finished", + "percent": 1.0 + }, + "done": false, + "started": "2024-05-30T10:29:54.137359" + } } - ] }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "message": "finished", - "percent": 1.0 + { + "name": "get_clone_project_task_status_3", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "done": false, - "started": "2024-05-30T10:29:54.137359" - } - } - }, - { - "name": "get_clone_project_task_status_4", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "message": "finished", + "percent": 1.0 + }, + "done": false, + "started": "2024-05-30T10:29:54.137359" + } } - ] }, - "response_body": { - "data": { - "task_progress": { - "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", - "message": "finished", - "percent": 1.0 + { + "name": "get_clone_project_task_status_4", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "done": true, - "started": "2024-05-30T10:29:54.137359" - } - } - }, - { - "name": "get_clone_project_task_result", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/tasks/{task_id}/result", - "path_parameters": [ - { - "in": "path", - "name": "task_id", - "required": true, - "schema": { - "title": "Task Id", - "type": "str" - }, - "response_value": "tasks" + "response_body": { + "data": { + "task_progress": { + "task_id": "POST%20%2Fv0%2Fprojects%3Ffrom_study%3D784f63f4-1d9f-11ef-892d-0242ac140012%26hidden%3Dtrue.3b945ded-136e-405a-8ae3-e2b2f3ea9e72", + "message": "finished", + "percent": 1.0 + }, + "done": true, + "started": "2024-05-30T10:29:54.137359" + } } - ] }, - "response_body": { - "data": { - "uuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", - "name": "New Study (Copy)", - "description": "", - "thumbnail": "", - "creationDate": "2024-05-30T10:29:54.150Z", - "lastChangeDate": "2024-05-30T10:29:54.150Z", - "workspaceId": 3, - "folderId": 12, - "trashedAt": "2024-05-30T10:30:54.137359", - "trashedBy": 2, - "workbench": { - "45043872-d6d3-530b-bf40-67bfde79191c": { - "key": "simcore/services/dynamic/jupyter-math", - "version": "3.0.2", - "label": "JupyterLab Math (Python+Octave)", - "thumbnail": null, - "inputs": {}, - "inputsUnits": {}, - "inputNodes": [] - } - }, - "prjOwner": "joshualam@example.com", - "accessRights": { - "3": { - "read": true, - "write": true, - "delete": true - } - }, - "tags": [], - "classifiers": [], - "state": { - "locked": { - "value": false, - "status": "CLOSED" - }, - "state": { - "value": "UNKNOWN" - } + { + "name": "get_clone_project_task_result", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/tasks/{task_id}/result", + "path_parameters": [ + { + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "title": "Task Id", + "type": "str" + }, + "response_value": "tasks" + } + ] }, - "ui": { - "workbench": { - "45043872-d6d3-530b-bf40-67bfde79191c": { - "position": { - "x": 195, - "y": 180 - } + "response_body": { + "data": { + "uuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", + "name": "New Study (Copy)", + "description": "", + "thumbnail": "", + "creationDate": "2024-05-30T10:29:54.150Z", + "lastChangeDate": "2024-05-30T10:29:54.150Z", + "workspaceId": 3, + "type": "STANDARD", + "templateType": null, + "folderId": 12, + "trashedAt": "2024-05-30T10:30:54.137359", + "trashedBy": 2, + "workbench": { + "45043872-d6d3-530b-bf40-67bfde79191c": { + "key": "simcore/services/dynamic/jupyter-math", + "version": "3.0.2", + "label": "JupyterLab Math (Python+Octave)", + "thumbnail": null, + "inputs": {}, + "inputsUnits": {}, + "inputNodes": [] + } + }, + "prjOwner": "joshualam@example.com", + "accessRights": { + "3": { + "read": true, + "write": true, + "delete": true + } + }, + "tags": [], + "classifiers": [], + "state": { + "locked": { + "value": false, + "status": "CLOSED" + }, + "state": { + "value": "UNKNOWN" + } + }, + "ui": { + "workbench": { + "45043872-d6d3-530b-bf40-67bfde79191c": { + "position": { + "x": 195, + "y": 180 + } + } + }, + "slideshow": {}, + "currentNodeId": "784f63f4-1d9f-11ef-892d-0242ac140012", + "mode": "workbench" + }, + "quality": { + "enabled": true, + "tsr_target": { + "r01": { + "level": 4, + "references": "" + }, + "r02": { + "level": 4, + "references": "" + }, + "r03": { + "level": 4, + "references": "" + }, + "r04": { + "level": 4, + "references": "" + }, + "r05": { + "level": 4, + "references": "" + }, + "r06": { + "level": 4, + "references": "" + }, + "r07": { + "level": 4, + "references": "" + }, + "r08": { + "level": 4, + "references": "" + }, + "r09": { + "level": 4, + "references": "" + }, + "r10": { + "level": 4, + "references": "" + }, + "r03b": { + "references": "" + }, + "r03c": { + "references": "" + }, + "r07b": { + "references": "" + }, + "r07c": { + "references": "" + }, + "r07d": { + "references": "" + }, + "r07e": { + "references": "" + }, + "r08b": { + "references": "" + }, + "r10b": { + "references": "" + } + }, + "tsr_current": { + "r01": { + "level": 0, + "references": "" + }, + "r02": { + "level": 0, + "references": "" + }, + "r03": { + "level": 0, + "references": "" + }, + "r04": { + "level": 0, + "references": "" + }, + "r05": { + "level": 0, + "references": "" + }, + "r06": { + "level": 0, + "references": "" + }, + "r07": { + "level": 0, + "references": "" + }, + "r08": { + "level": 0, + "references": "" + }, + "r09": { + "level": 0, + "references": "" + }, + "r10": { + "level": 0, + "references": "" + }, + "r03b": { + "references": "" + }, + "r03c": { + "references": "" + }, + "r07b": { + "references": "" + }, + "r07c": { + "references": "" + }, + "r07d": { + "references": "" + }, + "r07e": { + "references": "" + }, + "r08b": { + "references": "" + }, + "r10b": { + "references": "" + } + } + }, + "dev": {} } - }, - "slideshow": {}, - "currentNodeId": "784f63f4-1d9f-11ef-892d-0242ac140012", - "mode": "workbench" }, - "quality": { - "enabled": true, - "tsr_target": { - "r01": { - "level": 4, - "references": "" - }, - "r02": { - "level": 4, - "references": "" - }, - "r03": { - "level": 4, - "references": "" - }, - "r04": { - "level": 4, - "references": "" - }, - "r05": { - "level": 4, - "references": "" - }, - "r06": { - "level": 4, - "references": "" - }, - "r07": { - "level": 4, - "references": "" - }, - "r08": { - "level": 4, - "references": "" - }, - "r09": { - "level": 4, - "references": "" - }, - "r10": { - "level": 4, - "references": "" - }, - "r03b": { - "references": "" - }, - "r03c": { - "references": "" - }, - "r07b": { - "references": "" - }, - "r07c": { - "references": "" - }, - "r07d": { - "references": "" - }, - "r07e": { - "references": "" - }, - "r08b": { - "references": "" - }, - "r10b": { - "references": "" - } - }, - "tsr_current": { - "r01": { - "level": 0, - "references": "" - }, - "r02": { - "level": 0, - "references": "" - }, - "r03": { - "level": 0, - "references": "" - }, - "r04": { - "level": 0, - "references": "" - }, - "r05": { - "level": 0, - "references": "" - }, - "r06": { - "level": 0, - "references": "" - }, - "r07": { - "level": 0, - "references": "" - }, - "r08": { - "level": 0, - "references": "" - }, - "r09": { - "level": 0, - "references": "" - }, - "r10": { - "level": 0, - "references": "" - }, - "r03b": { - "references": "" - }, - "r03c": { - "references": "" - }, - "r07b": { - "references": "" - }, - "r07c": { - "references": "" - }, - "r07d": { - "references": "" - }, - "r07e": { - "references": "" - }, - "r08b": { - "references": "" - }, - "r10b": { - "references": "" - } - } + "status_code": 201 + }, + { + "name": "patch_project", + "description": "", + "method": "PATCH", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] }, - "dev": {} - } + "request_payload": { + "name": "studies/784f63f4-1d9f-11ef-892d-0242ac140012/jobs/8dd46a50-1e6f-11ef-90e3-0242ac14000c" + }, + "status_code": 204 }, - "status_code": 201 - }, - { - "name": "patch_project", - "description": "", - "method": "PATCH", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" + { + "name": "get_project_inputs", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/inputs", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "response_body": { + "data": {} } - ] - }, - "request_payload": { - "name": "studies/784f63f4-1d9f-11ef-892d-0242ac140012/jobs/8dd46a50-1e6f-11ef-90e3-0242ac14000c" }, - "status_code": 204 - }, - { - "name": "get_project_inputs", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/inputs", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" + { + "name": "get_project_metadata", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/metadata", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "response_body": { + "data": { + "projectUuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", + "custom": {} + } } - ] }, - "response_body": { - "data": {} - } - }, - { - "name": "get_project_metadata", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/metadata", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" + { + "name": "patch_project_metadata", + "description": "", + "method": "PATCH", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/metadata", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "request_payload": { + "custom": { + "number": 3.14, + "integer": 42, + "string": "foo", + "boolean": true + } + }, + "response_body": { + "data": { + "projectUuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", + "custom": { + "number": 3.14, + "string": "foo", + "boolean": true, + "integer": 42 + } + } } - ] }, - "response_body": { - "data": { - "projectUuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", - "custom": {} - } - } - }, - { - "name": "patch_project_metadata", - "description": "", - "method": "PATCH", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/metadata", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" + { + "name": "get_project_metadata_1", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/metadata", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "response_body": { + "data": { + "projectUuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", + "custom": { + "number": 3.14, + "string": "foo", + "boolean": true, + "integer": 42 + } + } } - ] - }, - "request_payload": { - "custom": { - "number": 3.14, - "integer": 42, - "string": "foo", - "boolean": true - } }, - "response_body": { - "data": { - "projectUuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", - "custom": { - "number": 3.14, - "string": "foo", - "boolean": true, - "integer": 42 - } - } - } - }, - { - "name": "get_project_metadata_1", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/metadata", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" - } - ] + { + "name": "delete_project", + "description": "", + "method": "DELETE", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "status_code": 204 }, - "response_body": { - "data": { - "projectUuid": "8dd46a50-1e6f-11ef-90e3-0242ac14000c", - "custom": { - "number": 3.14, - "string": "foo", - "boolean": true, - "integer": 42 - } - } + { + "name": "get_project_metadata_2", + "description": "", + "method": "GET", + "host": "webserver", + "path": { + "path": "/v0/projects/{project_id}/metadata", + "path_parameters": [ + { + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "title": "Project Id", + "type": "str", + "format": "uuid" + }, + "response_value": "projects" + } + ] + }, + "response_body": { + "data": null, + "error": { + "logs": [ + { + "message": "Project with uuid '8dd46a50-1e6f-11ef-90e3-0242ac14000c' not found.", + "level": "ERROR", + "logger": "user" + } + ], + "errors": [ + { + "code": "HTTPNotFound", + "message": "Project with uuid '8dd46a50-1e6f-11ef-90e3-0242ac14000c' not found.", + "resource": null, + "field": null + } + ], + "status": 404, + "message": "Project with uuid '8dd46a50-1e6f-11ef-90e3-0242ac14000c' not found." + } + }, + "status_code": 404 } - }, - { - "name": "delete_project", - "description": "", - "method": "DELETE", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" - } - ] - }, - "status_code": 204 - }, - { - "name": "get_project_metadata_2", - "description": "", - "method": "GET", - "host": "webserver", - "path": { - "path": "/v0/projects/{project_id}/metadata", - "path_parameters": [ - { - "in": "path", - "name": "project_id", - "required": true, - "schema": { - "title": "Project Id", - "type": "str", - "format": "uuid" - }, - "response_value": "projects" - } - ] - }, - "response_body": { - "data": null, - "error": { - "logs": [ - { - "message": "Project with uuid '8dd46a50-1e6f-11ef-90e3-0242ac14000c' not found.", - "level": "ERROR", - "logger": "user" - } - ], - "errors": [ - { - "code": "HTTPNotFound", - "message": "Project with uuid '8dd46a50-1e6f-11ef-90e3-0242ac14000c' not found.", - "resource": null, - "field": null - } - ], - "status": 404, - "message": "Project with uuid '8dd46a50-1e6f-11ef-90e3-0242ac14000c' not found." - } - }, - "status_code": 404 - } ] From b1e5bfb5af0e6379c3a6a53031111c60e29bb401 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 16:28:52 +0200 Subject: [PATCH 05/21] fix tests --- .../src/models_library/projects.py | 23 +++++++++++++++++++ .../web/server/tests/data/fake-project.json | 4 +++- ...ke-template-projects.hack08.notebooks.json | 4 +++- .../fake-template-projects.isan.2dplot.json | 4 +++- .../fake-template-projects.isan.matward.json | 4 +++- .../fake-template-projects.isan.paraview.json | 4 +++- .../fake-template-projects.isan.ucdavis.json | 4 +++- .../data/fake-template-projects.sleepers.json | 4 +++- 8 files changed, 44 insertions(+), 7 deletions(-) diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 29be0fb90c5..5bb3c38be39 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -115,6 +115,13 @@ class ProjectAtDB(BaseProjectModel): project_type: Annotated[ ProjectType, Field(alias="type", description="The project type") ] + template_type: Annotated[ + ProjectTemplateType | None, + Field( + # alias="template_type", + examples=["TEMPLATE", "TUTORIAL", "HYPERTOOL"], + ), + ] prj_owner: Annotated[int | None, Field(description="The project owner id")] @@ -172,6 +179,22 @@ class Project(BaseProjectModel): # Project state (SEE projects_state.py) state: ProjectState | None = None + # Type of project + type: Annotated[ + ProjectType, + Field( + description="The project type", + examples=["TEMPLATE", "STANDARD"], + ), + ] + template_type: Annotated[ + ProjectTemplateType | None, + Field( + alias="templateType", + examples=["TEMPLATE", "TUTORIAL", "HYPERTOOL", None], + ), + ] + # UI front-end fields (SEE projects_ui.py) ui: dict[str, Any] | None = None dev: dict[str, Any] | None = None diff --git a/services/web/server/tests/data/fake-project.json b/services/web/server/tests/data/fake-project.json index ba8f4b90a39..b4c6c34562e 100644 --- a/services/web/server/tests/data/fake-project.json +++ b/services/web/server/tests/data/fake-project.json @@ -71,5 +71,7 @@ "ui": {}, "quality": {}, "dev": {}, - "workspaceId": null + "workspaceId": null, + "type": "STANDARD", + "templateType": null } diff --git a/services/web/server/tests/data/fake-template-projects.hack08.notebooks.json b/services/web/server/tests/data/fake-template-projects.hack08.notebooks.json index 94b723223e6..f8c94009d5d 100644 --- a/services/web/server/tests/data/fake-template-projects.hack08.notebooks.json +++ b/services/web/server/tests/data/fake-template-projects.hack08.notebooks.json @@ -62,5 +62,7 @@ } } }, - "workspaceId": null + "workspaceId": null, + "type": "TEMPLATE", + "templateType": "TEMPLATE" } diff --git a/services/web/server/tests/data/fake-template-projects.isan.2dplot.json b/services/web/server/tests/data/fake-template-projects.isan.2dplot.json index bace974f385..7b457c330ee 100644 --- a/services/web/server/tests/data/fake-template-projects.isan.2dplot.json +++ b/services/web/server/tests/data/fake-template-projects.isan.2dplot.json @@ -48,5 +48,7 @@ } } }, - "workspaceId": null + "workspaceId": null, + "type": "TEMPLATE", + "templateType": "TEMPLATE" } diff --git a/services/web/server/tests/data/fake-template-projects.isan.matward.json b/services/web/server/tests/data/fake-template-projects.isan.matward.json index 2e9bd544407..ca41d2009b6 100644 --- a/services/web/server/tests/data/fake-template-projects.isan.matward.json +++ b/services/web/server/tests/data/fake-template-projects.isan.matward.json @@ -23,5 +23,7 @@ } } }, - "workspaceId": null + "workspaceId": null, + "type": "TEMPLATE", + "templateType": "TEMPLATE" } diff --git a/services/web/server/tests/data/fake-template-projects.isan.paraview.json b/services/web/server/tests/data/fake-template-projects.isan.paraview.json index 4ed1f2bbd45..bc82ff880a9 100644 --- a/services/web/server/tests/data/fake-template-projects.isan.paraview.json +++ b/services/web/server/tests/data/fake-template-projects.isan.paraview.json @@ -71,5 +71,7 @@ } } }, - "workspaceId": null + "workspaceId": null, + "type": "TEMPLATE", + "templateType": "TEMPLATE" } diff --git a/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json b/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json index 872bd91f706..05624813c35 100644 --- a/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json +++ b/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json @@ -84,5 +84,7 @@ } } }, - "workspaceId": null + "workspaceId": null, + "type": "TEMPLATE", + "templateType": "TEMPLATE" } diff --git a/services/web/server/tests/data/fake-template-projects.sleepers.json b/services/web/server/tests/data/fake-template-projects.sleepers.json index b90c68cec77..701968390cb 100644 --- a/services/web/server/tests/data/fake-template-projects.sleepers.json +++ b/services/web/server/tests/data/fake-template-projects.sleepers.json @@ -113,5 +113,7 @@ } } }, - "workspaceId": null + "workspaceId": null, + "type": "TEMPLATE", + "templateType": "TEMPLATE" } From c94981d4a0c1fce54dd98a6685b56f9b395f96cb Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 17:27:56 +0200 Subject: [PATCH 06/21] fix tests --- .../src/pytest_simcore/simcore_webserver_projects_rest_api.py | 4 ++++ services/api-server/tests/unit/conftest.py | 2 ++ 2 files changed, 6 insertions(+) diff --git a/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py b/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py index 00a3d2af5f0..7f018f46ec0 100644 --- a/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py +++ b/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py @@ -161,6 +161,8 @@ def request_desc(self) -> str: "state": {"value": "NOT_STARTED"}, }, "workspace_id": None, + "type": "STANDARD", + "templateType": None, "folder_id": None, "trashedAt": None, "trashedBy": None, @@ -294,6 +296,8 @@ def request_desc(self) -> str: "state": {"value": "NOT_STARTED"}, }, "workspace_id": None, + "type": "STANDARD", + "templateType": None, "folder_id": None, "trashedAt": None, "trashedBy": None, diff --git a/services/api-server/tests/unit/conftest.py b/services/api-server/tests/unit/conftest.py index ff04fc4051d..24fdd636a11 100644 --- a/services/api-server/tests/unit/conftest.py +++ b/services/api-server/tests/unit/conftest.py @@ -645,6 +645,8 @@ def create_project_task(self, request: httpx.Request): "creationDate": "2018-07-01T11:13:43Z", "lastChangeDate": "2018-07-01T11:13:43Z", "prjOwner": "owner@email.com", + "type": "STANDARD", + "templateType": None, "dev": None, "trashed_at": None, "trashed_by": None, From e373f4c55484039a21e41ed3d462a32530e229b4 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 17:30:33 +0200 Subject: [PATCH 07/21] fix tests --- packages/models-library/tests/test_projects.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/models-library/tests/test_projects.py b/packages/models-library/tests/test_projects.py index 5cbb0e13573..2b659bf3c19 100644 --- a/packages/models-library/tests/test_projects.py +++ b/packages/models-library/tests/test_projects.py @@ -24,6 +24,8 @@ def minimal_project(faker: Faker) -> dict[str, Any]: "creationDate": "2019-05-24T10:36:57.813Z", "lastChangeDate": "2019-05-24T10:36:57.813Z", "workbench": {}, + "type": "STANDARD", + "templateType": None, } From 8530b5066dee5788966ef0a1d740f5a2f87a6087 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 17:32:05 +0200 Subject: [PATCH 08/21] fix tests --- .../simcore_service_webserver/studies_dispatcher/_projects.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py b/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py index a0509275a12..1a112843612 100644 --- a/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py +++ b/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py @@ -13,7 +13,7 @@ from aiohttp import web from common_library.json_serialization import json_loads from models_library.api_schemas_webserver.projects_ui import StudyUI -from models_library.projects import DateTimeStr, Project, ProjectID +from models_library.projects import DateTimeStr, Project, ProjectID, ProjectType from models_library.projects_access import AccessRights, GroupIDStr from models_library.projects_nodes import Node from models_library.projects_nodes_io import DownloadLink, NodeID, PortLink @@ -95,6 +95,8 @@ def _create_project( return Project( uuid=project_id, name=name, + type=ProjectType.STANDARD, + template_type=None, description=description, thumbnail=thumbnail, prj_owner=owner.email, From 8d33e2df43ddffed5ab4c730373c445f5f2fb077 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 17:54:21 +0200 Subject: [PATCH 09/21] fix tests --- .../pytest_simcore/simcore_webserver_projects_rest_api.py | 2 -- .../projects/_projects_repository_legacy.py | 2 +- .../projects/_projects_repository_legacy_utils.py | 8 ++++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py b/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py index 7f018f46ec0..2533cad65dd 100644 --- a/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py +++ b/packages/pytest-simcore/src/pytest_simcore/simcore_webserver_projects_rest_api.py @@ -296,8 +296,6 @@ def request_desc(self) -> str: "state": {"value": "NOT_STARTED"}, }, "workspace_id": None, - "type": "STANDARD", - "templateType": None, "folder_id": None, "trashedAt": None, "trashedBy": None, diff --git a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py index e2ee3593b10..70ebd2ad4cf 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py +++ b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py @@ -176,7 +176,7 @@ def _reraise_if_not_unique_uuid_error(err: UniqueViolation): *[ c for c in projects.columns - if c.name not in ["type", "hidden", "published"] + if c.name not in ["hidden", "published"] ] ) ) diff --git a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py index ffdc7def3ce..a6ef69f9361 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py +++ b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy_utils.py @@ -9,7 +9,7 @@ import sqlalchemy as sa from aiopg.sa.connection import SAConnection from aiopg.sa.result import RowProxy -from models_library.projects import ProjectAtDB, ProjectID +from models_library.projects import ProjectAtDB, ProjectID, ProjectTemplateType from models_library.projects_nodes import Node from models_library.projects_nodes_io import NodeIDStr from models_library.users import UserID @@ -90,9 +90,13 @@ def convert_to_schema_names( converted_value = col_value if isinstance(col_value, datetime) and col_name not in {"trashed"}: converted_value = format_datetime(col_value) - elif col_name == "prj_owner": + if col_name == "prj_owner": # this entry has to be converted to the owner e-mail address converted_value = user_email + if col_name == "type" and isinstance(col_value, ProjectType): + converted_value = col_value.value + if col_name == "template_type" and isinstance(col_value, ProjectTemplateType): + converted_value = col_value.value if col_name in SCHEMA_NON_NULL_KEYS and col_value is None: converted_value = "" From 569efa592251d8ef27e69c535358e1192031e9fe Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 14 May 2025 18:03:58 +0200 Subject: [PATCH 10/21] fix tests --- packages/models-library/src/models_library/projects.py | 3 +-- .../tests/unit/test_services_solver_job_models_converters.py | 2 ++ .../simcore_service_webserver/studies_dispatcher/_projects.py | 4 +--- .../tests/unit/isolated/test_studies_dispatcher_core.py | 2 +- tests/e2e/tutorials/sleepers_project_template_sql.csv | 4 ++-- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 5bb3c38be39..38558e05b1f 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -118,8 +118,7 @@ class ProjectAtDB(BaseProjectModel): template_type: Annotated[ ProjectTemplateType | None, Field( - # alias="template_type", - examples=["TEMPLATE", "TUTORIAL", "HYPERTOOL"], + examples=["TEMPLATE", "TUTORIAL", "HYPERTOOL", None], ), ] diff --git a/services/api-server/tests/unit/test_services_solver_job_models_converters.py b/services/api-server/tests/unit/test_services_solver_job_models_converters.py index a7d32259165..5be97bdca2a 100644 --- a/services/api-server/tests/unit/test_services_solver_job_models_converters.py +++ b/services/api-server/tests/unit/test_services_solver_job_models_converters.py @@ -124,6 +124,8 @@ def test_create_job_from_project(faker: Faker): "description": 'Study associated to solver job:\n{\n "id": "f925e30f-19de-42dc-acab-3ce93ea0a0a7",\n "name": "simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/2.0.2/jobs/f925e30f-19de-42dc-acab-3ce93ea0a0a7",\n "inputs_checksum": "aac0bb28285d6e5918121630fa8c368130c6b05f80fd9622760078608fc44e96",\n "created_at": "2021-03-26T10:43:27.828975"\n}', "thumbnail": "https://2xx2gy2ovf3r21jclkjio3x8-wpengine.netdna-ssl.com/wp-content/uploads/2018/12/API-Examples.jpg", "prjOwner": "foo@itis.swiss", + "type": "STANDARD", + "templateType": None, "creationDate": "2021-03-26T10:43:27.867Z", "lastChangeDate": "2021-03-26T10:43:33.595Z", "workbench": { diff --git a/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py b/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py index 1a112843612..623d48bd4d5 100644 --- a/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py +++ b/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py @@ -196,9 +196,7 @@ async def _add_new_project( db: ProjectDBAPI = app[APP_PROJECT_DBAPI] # validated project is transform in dict via json to use only primitive types - project_in: dict = json_loads( - project.model_dump_json(exclude_none=True, by_alias=True) - ) + project_in: dict = json_loads(project.model_dump_json(by_alias=True)) # update metadata (uuid, timestamps, ownership) and save _project_db: dict = await db.insert_project( diff --git a/services/web/server/tests/unit/isolated/test_studies_dispatcher_core.py b/services/web/server/tests/unit/isolated/test_studies_dispatcher_core.py index ef842a25a98..31054789b2c 100644 --- a/services/web/server/tests/unit/isolated/test_studies_dispatcher_core.py +++ b/services/web/server/tests/unit/isolated/test_studies_dispatcher_core.py @@ -46,7 +46,7 @@ async def test_create_project_with_viewer(view: dict[str, Any]): assert list(project.workbench.keys()) # converts into equivalent Dict - project_in: dict = json.loads(project.model_dump_json(exclude_none=True, by_alias=True)) + project_in: dict = json.loads(project.model_dump_json(by_alias=True)) print(json.dumps(project_in, indent=2)) # This operation is done exactly before adding to the database in projects_handlers.create_projects diff --git a/tests/e2e/tutorials/sleepers_project_template_sql.csv b/tests/e2e/tutorials/sleepers_project_template_sql.csv index 17f406b0aa0..f3cf4ca0ed9 100644 --- a/tests/e2e/tutorials/sleepers_project_template_sql.csv +++ b/tests/e2e/tutorials/sleepers_project_template_sql.csv @@ -1,2 +1,2 @@ -id,type,uuid,name,description,thumbnail,prj_owner,creation_date,last_change_date,workbench,published,access_rights,dev,classifiers,ui,quality,hidden,workspace_id,trashed,trashed_explicitly,trashed_by -10,TEMPLATE,ed6c2f58-dc16-445d-bb97-e989e2611603,Sleepers,5 sleepers interconnected,"",,2019-06-06 14:34:19.631,2019-06-06 14:34:28.647,"{""027e3ff9-3119-45dd-b8a2-2e31661a7385"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 0"", ""inputs"": {""in_2"": 2}, ""inputAccess"": {""in_1"": ""Invisible"", ""in_2"": ""ReadOnly""}, ""inputNodes"": [], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 50, ""y"": 300}}, ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 1"", ""inputs"": {""in_1"": {""nodeUuid"": ""027e3ff9-3119-45dd-b8a2-2e31661a7385"", ""output"": ""out_1""}, ""in_2"": 2}, ""inputNodes"": [""027e3ff9-3119-45dd-b8a2-2e31661a7385""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 300, ""y"": 200}}, ""bf405067-d168-44ba-b6dc-bb3e08542f92"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 2"", ""inputs"": {""in_1"": {""nodeUuid"": ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"", ""output"": ""out_1""}, ""in_2"": {""nodeUuid"": ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"", ""output"": ""out_2""}}, ""inputNodes"": [""562aaea9-95ff-46f3-8e84-db8f3c9e3a39""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 550, ""y"": 200}}, ""de2578c5-431e-5065-a079-a5a0476e3c10"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 3"", ""inputs"": {""in_2"": {""nodeUuid"": ""027e3ff9-3119-45dd-b8a2-2e31661a7385"", ""output"": ""out_2""}}, ""inputNodes"": [""027e3ff9-3119-45dd-b8a2-2e31661a7385""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 420, ""y"": 400}}, ""de2578c5-431e-559d-aa19-dc9293e10e4c"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 4"", ""inputs"": {""in_1"": {""nodeUuid"": ""bf405067-d168-44ba-b6dc-bb3e08542f92"", ""output"": ""out_1""}, ""in_2"": {""nodeUuid"": ""de2578c5-431e-5065-a079-a5a0476e3c10"", ""output"": ""out_2""}}, ""inputNodes"": [""bf405067-d168-44ba-b6dc-bb3e08542f92"", ""de2578c5-431e-5065-a079-a5a0476e3c10""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 800, ""y"": 300}}}",t,"{""1"": {""read"": true, ""write"": false, ""delete"": false}}",{},{},{},{},f,,,f, +id,type,uuid,name,description,thumbnail,prj_owner,creation_date,last_change_date,workbench,published,access_rights,dev,classifiers,ui,quality,hidden,workspace_id,trashed,trashed_explicitly,trashed_by,template_typetest_create_project_with_viewer +10,TEMPLATE,ed6c2f58-dc16-445d-bb97-e989e2611603,Sleepers,5 sleepers interconnected,"",,2019-06-06 14:34:19.631,2019-06-06 14:34:28.647,"{""027e3ff9-3119-45dd-b8a2-2e31661a7385"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 0"", ""inputs"": {""in_2"": 2}, ""inputAccess"": {""in_1"": ""Invisible"", ""in_2"": ""ReadOnly""}, ""inputNodes"": [], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 50, ""y"": 300}}, ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 1"", ""inputs"": {""in_1"": {""nodeUuid"": ""027e3ff9-3119-45dd-b8a2-2e31661a7385"", ""output"": ""out_1""}, ""in_2"": 2}, ""inputNodes"": [""027e3ff9-3119-45dd-b8a2-2e31661a7385""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 300, ""y"": 200}}, ""bf405067-d168-44ba-b6dc-bb3e08542f92"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 2"", ""inputs"": {""in_1"": {""nodeUuid"": ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"", ""output"": ""out_1""}, ""in_2"": {""nodeUuid"": ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"", ""output"": ""out_2""}}, ""inputNodes"": [""562aaea9-95ff-46f3-8e84-db8f3c9e3a39""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 550, ""y"": 200}}, ""de2578c5-431e-5065-a079-a5a0476e3c10"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 3"", ""inputs"": {""in_2"": {""nodeUuid"": ""027e3ff9-3119-45dd-b8a2-2e31661a7385"", ""output"": ""out_2""}}, ""inputNodes"": [""027e3ff9-3119-45dd-b8a2-2e31661a7385""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 420, ""y"": 400}}, ""de2578c5-431e-559d-aa19-dc9293e10e4c"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 4"", ""inputs"": {""in_1"": {""nodeUuid"": ""bf405067-d168-44ba-b6dc-bb3e08542f92"", ""output"": ""out_1""}, ""in_2"": {""nodeUuid"": ""de2578c5-431e-5065-a079-a5a0476e3c10"", ""output"": ""out_2""}}, ""inputNodes"": [""bf405067-d168-44ba-b6dc-bb3e08542f92"", ""de2578c5-431e-5065-a079-a5a0476e3c10""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 800, ""y"": 300}}}",t,"{""1"": {""read"": true, ""write"": false, ""delete"": false}}",{},{},{},{},f,,,f,,TEMPLATE From 2edcdda85660b44ff11207f4c68004a7d2e001e4 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 07:22:15 +0200 Subject: [PATCH 11/21] fix --- .../api/v0/openapi.yaml | 29 +++++++++++++++++++ .../integration/01/test_garbage_collection.py | 7 ++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml index 6f96b9a22f5..04131e36b93 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml @@ -14391,6 +14391,12 @@ components: - type: string const: '' title: Thumbnail + type: + $ref: '#/components/schemas/ProjectType' + templateType: + anyOf: + - $ref: '#/components/schemas/ProjectTemplateType' + - type: 'null' workbench: type: object title: Workbench @@ -14482,6 +14488,8 @@ components: - name - description - thumbnail + - type + - templateType - workbench - prjOwner - accessRights @@ -14581,6 +14589,12 @@ components: - type: string const: '' title: Thumbnail + type: + $ref: '#/components/schemas/ProjectType' + templateType: + anyOf: + - $ref: '#/components/schemas/ProjectTemplateType' + - type: 'null' workbench: type: object title: Workbench @@ -14672,6 +14686,8 @@ components: - name - description - thumbnail + - type + - templateType - workbench - prjOwner - accessRights @@ -14943,6 +14959,19 @@ components: - OPENED - MAINTAINING title: ProjectStatus + ProjectTemplateType: + type: string + enum: + - TEMPLATE + - TUTORIAL + - HYPERTOOL + title: ProjectTemplateType + ProjectType: + type: string + enum: + - TEMPLATE + - STANDARD + title: ProjectType ProjectTypeAPI: type: string enum: diff --git a/services/web/server/tests/integration/01/test_garbage_collection.py b/services/web/server/tests/integration/01/test_garbage_collection.py index 43b89e073b8..40d584efa9c 100644 --- a/services/web/server/tests/integration/01/test_garbage_collection.py +++ b/services/web/server/tests/integration/01/test_garbage_collection.py @@ -7,6 +7,7 @@ import re from collections.abc import AsyncIterable, Awaitable, Callable from copy import deepcopy +from enum import Enum from pathlib import Path from typing import Any, NamedTuple from unittest import mock @@ -437,12 +438,16 @@ async def assert_user_not_in_db( assert user_db is None +def enum_to_value(d): + return {k: (v.value if isinstance(v, Enum) else v) for k, v in d.items()} + + async def assert_project_in_db( aiopg_engine: aiopg.sa.Engine, user_project: dict ) -> None: project = await fetch_project_from_db(aiopg_engine, user_project) assert project - project_as_dict = dict(project) + project_as_dict = enum_to_value(dict(project)) assert_dicts_match_by_common_keys(project_as_dict, user_project) From a837594277745adedc0a8b85ff8e29ae5f3f194f Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 08:24:17 +0200 Subject: [PATCH 12/21] fix tests --- .../projects/_projects_repository_legacy.py | 8 ++++++-- .../server/tests/unit/with_dbs/03/test_project_db.py | 10 ++++++++-- .../test_studies_dispatcher_projects.py | 3 +++ .../test_studies_dispatcher_studies_access.py | 2 ++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py index 70ebd2ad4cf..ad3ac9e4df8 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py +++ b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py @@ -281,11 +281,15 @@ async def insert_project( { "type": ( ProjectType.TEMPLATE.value - if (force_as_template or user_id is None) + if ( + force_as_template or user_id is None + ) # or user_id is None (MD: Check consequences) else ProjectType.STANDARD.value ), "template_type": ( - ProjectTemplateType.TEMPLATE.value if force_as_template else None + ProjectTemplateType.TEMPLATE.value + if (force_as_template or user_id is None) + else None ), "prj_owner": user_id if user_id else None, "hidden": hidden, diff --git a/services/web/server/tests/unit/with_dbs/03/test_project_db.py b/services/web/server/tests/unit/with_dbs/03/test_project_db.py index 4aa9791d226..390650bd48c 100644 --- a/services/web/server/tests/unit/with_dbs/03/test_project_db.py +++ b/services/web/server/tests/unit/with_dbs/03/test_project_db.py @@ -18,7 +18,7 @@ from aiohttp.test_utils import TestClient from common_library.dict_tools import copy_from_dict_ex, remap_keys from faker import Faker -from models_library.projects import ProjectID +from models_library.projects import ProjectID, ProjectTemplateType from models_library.projects_nodes_io import NodeID, NodeIDStr from psycopg2.errors import UniqueViolation from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict @@ -252,7 +252,11 @@ async def test_insert_project_to_db( _assert_added_project( expected_project, new_project, - exp_overrides={"prjOwner": "not_a_user@unknown.com"}, + exp_overrides={ + "prjOwner": "not_a_user@unknown.com", + "type": ProjectType.TEMPLATE.value, + "templateType": ProjectTemplateType.TEMPLATE.value, + }, ) _assert_project_db_row(postgres_db, new_project, type=ProjectType.TEMPLATE) _assert_projects_to_product_db_row(postgres_db, new_project, osparc_product_name) @@ -305,6 +309,8 @@ async def test_insert_project_to_db( exp_overrides={ "uuid": new_project["uuid"], "prjOwner": logged_user["email"], + "type": ProjectType.TEMPLATE.value, + "templateType": ProjectTemplateType.TEMPLATE.value, }, ) _assert_project_db_row( diff --git a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py index 2ae68f22182..20e6a1268b3 100644 --- a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py +++ b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py @@ -29,6 +29,9 @@ ) from simcore_service_webserver.users.api import get_user +pytest.skip("Skipping all tests in this module", allow_module_level=True) + + FAKE_FILE_VIEWS = list_fake_file_consumers() diff --git a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py index e273fb1090f..acccb20d5aa 100644 --- a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py +++ b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py @@ -46,6 +46,8 @@ ) from tenacity import retry, stop_after_attempt, wait_fixed +pytest.skip("Skipping all tests in this module", allow_module_level=True) + async def _get_user_projects(client) -> list[ProjectDict]: url = client.app.router["list_projects"].url_for() From 9a7978b50d1f93a86e1659d5a98aae742f3cf551 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 08:47:33 +0200 Subject: [PATCH 13/21] fix tests --- .../projects/_projects_repository_legacy.py | 4 +--- services/web/server/tests/conftest.py | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py index ad3ac9e4df8..4c068fd6376 100644 --- a/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py +++ b/services/web/server/src/simcore_service_webserver/projects/_projects_repository_legacy.py @@ -281,9 +281,7 @@ async def insert_project( { "type": ( ProjectType.TEMPLATE.value - if ( - force_as_template or user_id is None - ) # or user_id is None (MD: Check consequences) + if (force_as_template or user_id is None) else ProjectType.STANDARD.value ), "template_type": ( diff --git a/services/web/server/tests/conftest.py b/services/web/server/tests/conftest.py index a833d401b4d..978a58d8b2b 100644 --- a/services/web/server/tests/conftest.py +++ b/services/web/server/tests/conftest.py @@ -237,6 +237,8 @@ async def _setup( "folderId": None, "trashedAt": None, "trashedBy": None, + "type": None, + "templateType": None, } if from_study: @@ -445,6 +447,8 @@ async def _creator( "state", "permalink", "folderId", + "type", + "templateType", ] for key in expected_data: From 84526300eb44266e3b0c8f87769923f6d510747a Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 08:53:57 +0200 Subject: [PATCH 14/21] fix tests --- .../web/server/tests/unit/isolated/data/project-data.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/web/server/tests/unit/isolated/data/project-data.json b/services/web/server/tests/unit/isolated/data/project-data.json index d57ad0e6f4b..9ae37a1329a 100644 --- a/services/web/server/tests/unit/isolated/data/project-data.json +++ b/services/web/server/tests/unit/isolated/data/project-data.json @@ -60,5 +60,7 @@ "annotations": {} }, "quality": {}, - "dev": {} + "dev": {}, + "type": "STANDARD", + "templateType": null } From a1d8d9af24bb50be7310fcc1ef2e94b33043a054 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 08:57:15 +0200 Subject: [PATCH 15/21] fix tests --- .../tests/data/fake-template-projects.isan.ucdavis.json | 4 ++-- tests/e2e/tutorials/sleepers_project_template_sql.csv | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json b/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json index 05624813c35..3d33e3cf7c3 100644 --- a/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json +++ b/services/web/server/tests/data/fake-template-projects.isan.ucdavis.json @@ -85,6 +85,6 @@ } }, "workspaceId": null, - "type": "TEMPLATE", - "templateType": "TEMPLATE" + "type": "TEMPLATE", + "templateType": "TEMPLATE" } diff --git a/tests/e2e/tutorials/sleepers_project_template_sql.csv b/tests/e2e/tutorials/sleepers_project_template_sql.csv index f3cf4ca0ed9..7e96b580dcf 100644 --- a/tests/e2e/tutorials/sleepers_project_template_sql.csv +++ b/tests/e2e/tutorials/sleepers_project_template_sql.csv @@ -1,2 +1,2 @@ -id,type,uuid,name,description,thumbnail,prj_owner,creation_date,last_change_date,workbench,published,access_rights,dev,classifiers,ui,quality,hidden,workspace_id,trashed,trashed_explicitly,trashed_by,template_typetest_create_project_with_viewer +id,type,uuid,name,description,thumbnail,prj_owner,creation_date,last_change_date,workbench,published,access_rights,dev,classifiers,ui,quality,hidden,workspace_id,trashed,trashed_explicitly,trashed_by,template_type 10,TEMPLATE,ed6c2f58-dc16-445d-bb97-e989e2611603,Sleepers,5 sleepers interconnected,"",,2019-06-06 14:34:19.631,2019-06-06 14:34:28.647,"{""027e3ff9-3119-45dd-b8a2-2e31661a7385"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 0"", ""inputs"": {""in_2"": 2}, ""inputAccess"": {""in_1"": ""Invisible"", ""in_2"": ""ReadOnly""}, ""inputNodes"": [], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 50, ""y"": 300}}, ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 1"", ""inputs"": {""in_1"": {""nodeUuid"": ""027e3ff9-3119-45dd-b8a2-2e31661a7385"", ""output"": ""out_1""}, ""in_2"": 2}, ""inputNodes"": [""027e3ff9-3119-45dd-b8a2-2e31661a7385""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 300, ""y"": 200}}, ""bf405067-d168-44ba-b6dc-bb3e08542f92"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 2"", ""inputs"": {""in_1"": {""nodeUuid"": ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"", ""output"": ""out_1""}, ""in_2"": {""nodeUuid"": ""562aaea9-95ff-46f3-8e84-db8f3c9e3a39"", ""output"": ""out_2""}}, ""inputNodes"": [""562aaea9-95ff-46f3-8e84-db8f3c9e3a39""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 550, ""y"": 200}}, ""de2578c5-431e-5065-a079-a5a0476e3c10"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 3"", ""inputs"": {""in_2"": {""nodeUuid"": ""027e3ff9-3119-45dd-b8a2-2e31661a7385"", ""output"": ""out_2""}}, ""inputNodes"": [""027e3ff9-3119-45dd-b8a2-2e31661a7385""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 420, ""y"": 400}}, ""de2578c5-431e-559d-aa19-dc9293e10e4c"": {""key"": ""simcore/services/comp/itis/sleeper"", ""version"": ""1.0.0"", ""label"": ""sleeper 4"", ""inputs"": {""in_1"": {""nodeUuid"": ""bf405067-d168-44ba-b6dc-bb3e08542f92"", ""output"": ""out_1""}, ""in_2"": {""nodeUuid"": ""de2578c5-431e-5065-a079-a5a0476e3c10"", ""output"": ""out_2""}}, ""inputNodes"": [""bf405067-d168-44ba-b6dc-bb3e08542f92"", ""de2578c5-431e-5065-a079-a5a0476e3c10""], ""outputs"": {}, ""progress"": 0, ""thumbnail"": """", ""position"": {""x"": 800, ""y"": 300}}}",t,"{""1"": {""read"": true, ""write"": false, ""delete"": false}}",{},{},{},{},f,,,f,,TEMPLATE From a3e9745ec8dab971fdf745dcbf34ed16046e64e8 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 09:30:51 +0200 Subject: [PATCH 16/21] fix tests --- .../04/studies_dispatcher/test_studies_dispatcher_projects.py | 3 --- .../test_studies_dispatcher_studies_access.py | 2 -- 2 files changed, 5 deletions(-) diff --git a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py index 20e6a1268b3..2ae68f22182 100644 --- a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py +++ b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_projects.py @@ -29,9 +29,6 @@ ) from simcore_service_webserver.users.api import get_user -pytest.skip("Skipping all tests in this module", allow_module_level=True) - - FAKE_FILE_VIEWS = list_fake_file_consumers() diff --git a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py index acccb20d5aa..e273fb1090f 100644 --- a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py +++ b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py @@ -46,8 +46,6 @@ ) from tenacity import retry, stop_after_attempt, wait_fixed -pytest.skip("Skipping all tests in this module", allow_module_level=True) - async def _get_user_projects(client) -> list[ProjectDict]: url = client.app.router["list_projects"].url_for() From f2dd7db1fcaaf98ce52191c0fe5b6020539914a0 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 09:31:55 +0200 Subject: [PATCH 17/21] review @GitHK --- .../server/tests/integration/01/test_garbage_collection.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/server/tests/integration/01/test_garbage_collection.py b/services/web/server/tests/integration/01/test_garbage_collection.py index 40d584efa9c..032e366162b 100644 --- a/services/web/server/tests/integration/01/test_garbage_collection.py +++ b/services/web/server/tests/integration/01/test_garbage_collection.py @@ -438,7 +438,7 @@ async def assert_user_not_in_db( assert user_db is None -def enum_to_value(d): +def _enum_to_value(d): return {k: (v.value if isinstance(v, Enum) else v) for k, v in d.items()} @@ -447,7 +447,7 @@ async def assert_project_in_db( ) -> None: project = await fetch_project_from_db(aiopg_engine, user_project) assert project - project_as_dict = enum_to_value(dict(project)) + project_as_dict = _enum_to_value(dict(project)) assert_dicts_match_by_common_keys(project_as_dict, user_project) From 4a423849eeabbfdcaffe468cb506840875a26f99 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 13:12:30 +0200 Subject: [PATCH 18/21] =?UTF-8?q?services/webserver=20api=20version:=200.6?= =?UTF-8?q?4.0=20=E2=86=92=200.65.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/web/server/VERSION | 2 +- services/web/server/setup.cfg | 6 +++--- .../src/simcore_service_webserver/api/v0/openapi.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/web/server/VERSION b/services/web/server/VERSION index d4f16f06004..afed694eede 100644 --- a/services/web/server/VERSION +++ b/services/web/server/VERSION @@ -1 +1 @@ -0.64.0 +0.65.0 diff --git a/services/web/server/setup.cfg b/services/web/server/setup.cfg index 0bd98b21a6a..bb232c5a3cb 100644 --- a/services/web/server/setup.cfg +++ b/services/web/server/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.64.0 +current_version = 0.65.0 commit = True message = services/webserver api version: {current_version} → {new_version} tag = False @@ -12,13 +12,13 @@ commit_args = --no-verify [tool:pytest] addopts = --strict-markers asyncio_mode = auto -markers = +markers = slow: marks tests as slow (deselect with '-m "not slow"') acceptance_test: "marks tests as 'acceptance tests' i.e. does the system do what the user expects? Typically those are workflows." testit: "marks test to run during development" heavy_load: "mark tests that require large amount of data" [mypy] -plugins = +plugins = pydantic.mypy sqlalchemy.ext.mypy.plugin diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml index 22f722cf35e..6f2673c7bfe 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml @@ -2,7 +2,7 @@ openapi: 3.1.0 info: title: simcore-service-webserver description: Main service with an interface (http-API & websockets) to the web front-end - version: 0.64.0 + version: 0.65.0 servers: - url: '' description: webserver From cd6277aae079a3d6b878f0269bfd4908963a7b74 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 13:28:52 +0200 Subject: [PATCH 19/21] fix --- .../versions/b39f2dc87ccd_add_templatetype_to_projects.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py b/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py index 783f74fee54..61cbcb8496f 100644 --- a/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py +++ b/packages/postgres-database/src/simcore_postgres_database/migration/versions/b39f2dc87ccd_add_templatetype_to_projects.py @@ -1,7 +1,7 @@ """add templateType to projects Revision ID: b39f2dc87ccd -Revises: 0d52976dc616 +Revises: fc1701bb7e93 Create Date: 2025-05-14 11:59:27.033449+00:00 """ @@ -11,7 +11,7 @@ # revision identifiers, used by Alembic. revision = "b39f2dc87ccd" -down_revision = "0d52976dc616" +down_revision = "fc1701bb7e93" branch_labels = None depends_on = None From 0cfab55e4124bf2b3ee8b4d3dc465ba3733f14d5 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 13:34:11 +0200 Subject: [PATCH 20/21] fix --- .../test_studies_dispatcher_studies_access.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py index e273fb1090f..6f4e923a203 100644 --- a/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py +++ b/services/web/server/tests/unit/with_dbs/04/studies_dispatcher/test_studies_dispatcher_studies_access.py @@ -72,6 +72,8 @@ def _assert_same_projects(got: dict, expected: dict): "ui", "uuid", "workbench", + "type", + "templateType", } for key in expected: if key not in exclude: From 1729ed538882f1f9af3d699f87ca3a26127e0967 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Thu, 15 May 2025 14:33:28 +0200 Subject: [PATCH 21/21] fix --- .../studies_dispatcher/_projects.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py b/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py index 8f585ba340a..8c952fb4d7d 100644 --- a/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py +++ b/services/web/server/src/simcore_service_webserver/studies_dispatcher/_projects.py @@ -201,7 +201,12 @@ async def _add_new_project( db: ProjectDBAPI = app[APP_PROJECT_DBAPI] # validated project is transform in dict via json to use only primitive types - project_in: dict = json_loads(project.model_dump_json(by_alias=True)) + project_in: dict = json_loads( + project.model_dump_json(exclude_none=True, by_alias=True) + ) + # NOTE: Because of legacy reasons I do not want to remove the exclude_none=True from line above + # so I need to set the templateType here if it was removed. + project_in["templateType"] = project_in.get("templateType") # update metadata (uuid, timestamps, ownership) and save _project_db: dict = await db.insert_project(