From bea275e5f1d1350378e69a30ce86589792ae82f7 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Fri, 10 Mar 2023 18:09:43 +0100 Subject: [PATCH 01/34] replacing manually created openapi for projects -> with automatic vie pydantic project class --- .../project-v0.0.1-converted-automatic.yaml | 606 ++ api/specs/common/schemas/project.yaml | 4 +- .../openapi-projects-matus-test.yaml | 606 ++ .../webserver/scripts/openapi_projects.py | 44 + matus-json-schema-to-openapi-schema.json | 2569 +++++++ matus-without-ref.json | 2728 +++++++ original_schema_lhs_project_v001.json | 768 ++ original_schema_rhs_pydantic_generated.json | 996 +++ schema_lhs.json | 768 ++ schema_rhs.json | 996 +++ .../api/v0/.spectral.yaml | 1 + .../api/v0/openapi.yaml | 580 +- .../api/v0/openapi_original.yaml | 6322 +++++++++++++++++ 13 files changed, 16518 insertions(+), 470 deletions(-) create mode 100644 api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml create mode 100644 api/specs/webserver/openapi-projects-matus-test.yaml create mode 100644 api/specs/webserver/scripts/openapi_projects.py create mode 100644 matus-json-schema-to-openapi-schema.json create mode 100644 matus-without-ref.json create mode 100644 original_schema_lhs_project_v001.json create mode 100644 original_schema_rhs_pydantic_generated.json create mode 100644 schema_lhs.json create mode 100644 schema_rhs.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml diff --git a/api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml b/api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml new file mode 100644 index 00000000000..40fdee81a74 --- /dev/null +++ b/api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml @@ -0,0 +1,606 @@ +paths: + ? '' + : get: + summary: Get Project Inputs + description: New in version *0.10* + operationId: get_project_inputs_get + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: {} +components: + schemas: + AccessEnum: + title: AccessEnum + enum: + - ReadAndWrite + - Invisible + - ReadOnly + type: string + description: An enumeration. + AccessRights: + title: AccessRights + required: + - read + - write + - delete + type: object + properties: + read: + title: Read + type: boolean + description: gives read access + write: + title: Write + type: boolean + description: gives write access + delete: + title: Delete + type: boolean + description: gives deletion rights + additionalProperties: false + Annotation: + title: Annotation + required: + - type + - color + - attributes + type: object + properties: + type: + title: Type + enum: + - rect + - text + type: string + color: + title: Color + type: string + format: color + attributes: + title: Attributes + type: object + description: svg attributes + additionalProperties: false + DatCoreFileLink: + title: DatCoreFileLink + required: + - store + - path + - label + - dataset + type: object + properties: + store: + title: Store + type: integer + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + path: + title: Path + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + label: + title: Label + type: string + description: The real file name + eTag: + title: Etag + type: string + description: Entity tag that uniquely represents the file. The method to + generate the tag is not specified (black box). + dataset: + title: Dataset + type: string + description: Unique identifier to access the dataset on datcore (REQUIRED + for datcore) + additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + DownloadLink: + title: DownloadLink + required: + - downloadLink + type: object + properties: + downloadLink: + title: Downloadlink + maxLength: 65536 + minLength: 1 + type: string + format: uri + label: + title: Label + type: string + additionalProperties: false + description: I/O port type to hold a generic download link to a file (e.g. S3 + pre-signed link, etc) + HTTPValidationError: + title: HTTPValidationError + type: object + properties: + detail: + title: Detail + type: array + items: + $ref: '#/components/schemas/ValidationError' + Marker: + title: Marker + required: + - color + type: object + properties: + color: + title: Color + type: string + format: color + additionalProperties: false + Node: + title: Node + required: + - key + - version + - label + type: object + properties: + key: + title: Key + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + type: string + description: distinctive name for the node based on the docker registry + path + version: + title: Version + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + description: semantic version number of the node + label: + title: Label + type: string + description: The short name of the node + progress: + title: Progress + maximum: 100.0 + minimum: 0.0 + type: number + description: the node progress value + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url of the latest screenshot of the node + format: uri + runHash: + anyOf: + - type: 'null' + - title: Runhash + type: string + description: the hex digest of the resolved inputs +outputs hash at the + time when the last outputs were generated + inputs: + title: Inputs + type: object + description: values of input properties + inputsUnits: + title: Inputsunits + type: object + description: Overrides default unit (if any) defined in the service for + each port + inputAccess: + type: object + description: map with key - access level pairs + inputNodes: + title: Inputnodes + type: array + items: + type: string + format: uuid + description: node IDs of where the node is connected to + outputs: + title: Outputs + type: object + description: values of output properties + outputNode: + title: Outputnode + type: boolean + deprecated: true + outputNodes: + title: Outputnodes + type: array + items: + type: string + format: uuid + description: Used in group-nodes. Node IDs of those connected to the output + parent: + anyOf: + - type: 'null' + - title: Parent + type: string + description: Parent's (group-nodes') node ID s. Used to group + format: uuid + position: + title: Position + allOf: + - $ref: '#/components/schemas/Position' + description: Use projects_ui.WorkbenchUI.position instead + deprecated: true + state: + title: State + allOf: + - $ref: '#/components/schemas/NodeState' + description: The node's state object + bootOptions: + title: Bootoptions + type: object + description: Some services provide alternative parameters to be injected + at boot time. The user selection should be stored here, and it will overwrite + the services's defaults. + additionalProperties: false + NodeState: + title: NodeState + type: object + properties: + modified: + title: Modified + type: boolean + description: true if the node's outputs need to be re-computed + default: true + dependencies: + title: Dependencies + uniqueItems: true + type: array + items: + type: string + format: uuid + description: contains the node inputs dependencies if they need to be computed + first + currentStatus: + allOf: + - $ref: '#/components/schemas/RunningState' + description: the node's current state + default: NOT_STARTED + additionalProperties: false + Owner: + title: Owner + required: + - user_id + - first_name + - last_name + type: object + properties: + user_id: + title: User Id + exclusiveMinimum: true + type: integer + description: Owner's identifier when registered in the user's database table + minimum: 0 + first_name: + title: First Name + type: string + description: Owner first name + last_name: + title: Last Name + type: string + description: Owner last name + additionalProperties: false + PortLink: + title: PortLink + required: + - nodeUuid + - output + type: object + properties: + nodeUuid: + title: Nodeuuid + type: string + description: The node to get the port output from + format: uuid + output: + title: Output + pattern: ^[-_a-zA-Z0-9]+$ + type: string + description: The port key in the node given by nodeUuid + additionalProperties: false + description: I/O port type to reference to an output port of another node in + the same project + Position: + title: Position + required: + - x + - y + type: object + properties: + x: + title: X + type: integer + description: The x position + example: + - '12' + y: + title: Y + type: integer + description: The y position + example: + - '15' + additionalProperties: false + Project: + title: osparc-simcore project + required: + - uuid + - name + - description + - thumbnail + - creationDate + - lastChangeDate + - workbench + - prjOwner + - accessRights + type: object + properties: + uuid: + title: Uuid + type: string + description: project unique identifier + format: uuid + name: + title: Name + type: string + description: project name + description: + title: Description + type: string + description: longer one-line description about the project + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url of the project thumbnail + format: uri + creationDate: + title: Creationdate + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + description: project creation date + lastChangeDate: + title: Lastchangedate + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + description: last save date + workbench: + title: Workbench + type: object + description: Project's pipeline + prjOwner: + title: Prjowner + type: string + description: user email + format: email + accessRights: + title: Accessrights + type: object + description: object containing the GroupID as key and read/write/execution + permissions as value + tags: + title: Tags + type: array + items: + type: integer + default: [] + classifiers: + title: Classifiers + type: array + items: + type: string + description: Contains the reference to the project classifiers + state: + anyOf: + - type: 'null' + - $ref: '#/components/schemas/ProjectState' + ui: + $ref: '#/components/schemas/StudyUI' + quality: + title: Quality + type: object + description: stores the study quality assessment + default: {} + dev: + title: Dev + type: object + description: object used for development purposes only + additionalProperties: false + ProjectLocked: + title: ProjectLocked + required: + - value + - status + type: object + properties: + value: + title: Value + type: boolean + description: True if the project is locked + owner: + title: Owner + allOf: + - $ref: '#/components/schemas/Owner' + description: If locked, the user that owns the lock + status: + allOf: + - $ref: '#/components/schemas/ProjectStatus' + description: The status of the project + additionalProperties: false + ProjectRunningState: + title: ProjectRunningState + required: + - value + type: object + properties: + value: + allOf: + - $ref: '#/components/schemas/RunningState' + description: The running state of the project + additionalProperties: false + ProjectState: + title: ProjectState + required: + - locked + - state + type: object + properties: + locked: + title: Locked + allOf: + - $ref: '#/components/schemas/ProjectLocked' + description: The project lock state + state: + title: State + allOf: + - $ref: '#/components/schemas/ProjectRunningState' + description: The project running state + additionalProperties: false + ProjectStatus: + title: ProjectStatus + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + description: An enumeration. + RunningState: + title: RunningState + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + description: "State of execution of a project's computational workflow\n\n \ + \ SEE StateType for task state\n " + SimCoreFileLink: + title: SimCoreFileLink + required: + - store + - path + type: object + properties: + store: + title: Store + type: integer + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + path: + title: Path + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + label: + title: Label + type: string + description: The real file name + eTag: + title: Etag + type: string + description: Entity tag that uniquely represents the file. The method to + generate the tag is not specified (black box). + dataset: + title: Dataset + type: string + deprecated: true + additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 storage + example: + store: 0 + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + Slideshow: + title: Slideshow + required: + - position + type: object + properties: + position: + title: Position + type: integer + instructions: + title: Instructions + type: string + StudyUI: + title: StudyUI + type: object + properties: + workbench: + title: Workbench + type: object + slideshow: + title: Slideshow + type: object + currentNodeId: + title: Currentnodeid + type: string + format: uuid + annotations: + title: Annotations + type: object + ValidationError: + title: ValidationError + required: + - loc + - msg + - type + type: object + properties: + loc: + title: Location + type: array + items: + anyOf: + - type: string + - type: integer + msg: + title: Message + type: string + type: + title: Error Type + type: string + WorkbenchUI: + title: WorkbenchUI + required: + - position + type: object + properties: + position: + title: Position + allOf: + - $ref: '#/components/schemas/Position' + description: The node position in the workbench + marker: + $ref: '#/components/schemas/Marker' + additionalProperties: false diff --git a/api/specs/common/schemas/project.yaml b/api/specs/common/schemas/project.yaml index 1e9e31a52d6..764a84d862b 100644 --- a/api/specs/common/schemas/project.yaml +++ b/api/specs/common/schemas/project.yaml @@ -1,11 +1,11 @@ components: schemas: ProjectIn: - $ref: "./project-v0.0.1-converted.yaml" + $ref: "./project-v0.0.1-converted-automatic.yaml#/components/schemas/Project" ProjectOut: allOf: - - $ref: "./project-v0.0.1-converted.yaml" + - $ref: "./project-v0.0.1-converted-automatic.yaml#/components/schemas/Project" - type: object properties: state: diff --git a/api/specs/webserver/openapi-projects-matus-test.yaml b/api/specs/webserver/openapi-projects-matus-test.yaml new file mode 100644 index 00000000000..40fdee81a74 --- /dev/null +++ b/api/specs/webserver/openapi-projects-matus-test.yaml @@ -0,0 +1,606 @@ +paths: + ? '' + : get: + summary: Get Project Inputs + description: New in version *0.10* + operationId: get_project_inputs_get + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Project' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: {} +components: + schemas: + AccessEnum: + title: AccessEnum + enum: + - ReadAndWrite + - Invisible + - ReadOnly + type: string + description: An enumeration. + AccessRights: + title: AccessRights + required: + - read + - write + - delete + type: object + properties: + read: + title: Read + type: boolean + description: gives read access + write: + title: Write + type: boolean + description: gives write access + delete: + title: Delete + type: boolean + description: gives deletion rights + additionalProperties: false + Annotation: + title: Annotation + required: + - type + - color + - attributes + type: object + properties: + type: + title: Type + enum: + - rect + - text + type: string + color: + title: Color + type: string + format: color + attributes: + title: Attributes + type: object + description: svg attributes + additionalProperties: false + DatCoreFileLink: + title: DatCoreFileLink + required: + - store + - path + - label + - dataset + type: object + properties: + store: + title: Store + type: integer + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + path: + title: Path + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + label: + title: Label + type: string + description: The real file name + eTag: + title: Etag + type: string + description: Entity tag that uniquely represents the file. The method to + generate the tag is not specified (black box). + dataset: + title: Dataset + type: string + description: Unique identifier to access the dataset on datcore (REQUIRED + for datcore) + additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + DownloadLink: + title: DownloadLink + required: + - downloadLink + type: object + properties: + downloadLink: + title: Downloadlink + maxLength: 65536 + minLength: 1 + type: string + format: uri + label: + title: Label + type: string + additionalProperties: false + description: I/O port type to hold a generic download link to a file (e.g. S3 + pre-signed link, etc) + HTTPValidationError: + title: HTTPValidationError + type: object + properties: + detail: + title: Detail + type: array + items: + $ref: '#/components/schemas/ValidationError' + Marker: + title: Marker + required: + - color + type: object + properties: + color: + title: Color + type: string + format: color + additionalProperties: false + Node: + title: Node + required: + - key + - version + - label + type: object + properties: + key: + title: Key + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + type: string + description: distinctive name for the node based on the docker registry + path + version: + title: Version + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + description: semantic version number of the node + label: + title: Label + type: string + description: The short name of the node + progress: + title: Progress + maximum: 100.0 + minimum: 0.0 + type: number + description: the node progress value + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url of the latest screenshot of the node + format: uri + runHash: + anyOf: + - type: 'null' + - title: Runhash + type: string + description: the hex digest of the resolved inputs +outputs hash at the + time when the last outputs were generated + inputs: + title: Inputs + type: object + description: values of input properties + inputsUnits: + title: Inputsunits + type: object + description: Overrides default unit (if any) defined in the service for + each port + inputAccess: + type: object + description: map with key - access level pairs + inputNodes: + title: Inputnodes + type: array + items: + type: string + format: uuid + description: node IDs of where the node is connected to + outputs: + title: Outputs + type: object + description: values of output properties + outputNode: + title: Outputnode + type: boolean + deprecated: true + outputNodes: + title: Outputnodes + type: array + items: + type: string + format: uuid + description: Used in group-nodes. Node IDs of those connected to the output + parent: + anyOf: + - type: 'null' + - title: Parent + type: string + description: Parent's (group-nodes') node ID s. Used to group + format: uuid + position: + title: Position + allOf: + - $ref: '#/components/schemas/Position' + description: Use projects_ui.WorkbenchUI.position instead + deprecated: true + state: + title: State + allOf: + - $ref: '#/components/schemas/NodeState' + description: The node's state object + bootOptions: + title: Bootoptions + type: object + description: Some services provide alternative parameters to be injected + at boot time. The user selection should be stored here, and it will overwrite + the services's defaults. + additionalProperties: false + NodeState: + title: NodeState + type: object + properties: + modified: + title: Modified + type: boolean + description: true if the node's outputs need to be re-computed + default: true + dependencies: + title: Dependencies + uniqueItems: true + type: array + items: + type: string + format: uuid + description: contains the node inputs dependencies if they need to be computed + first + currentStatus: + allOf: + - $ref: '#/components/schemas/RunningState' + description: the node's current state + default: NOT_STARTED + additionalProperties: false + Owner: + title: Owner + required: + - user_id + - first_name + - last_name + type: object + properties: + user_id: + title: User Id + exclusiveMinimum: true + type: integer + description: Owner's identifier when registered in the user's database table + minimum: 0 + first_name: + title: First Name + type: string + description: Owner first name + last_name: + title: Last Name + type: string + description: Owner last name + additionalProperties: false + PortLink: + title: PortLink + required: + - nodeUuid + - output + type: object + properties: + nodeUuid: + title: Nodeuuid + type: string + description: The node to get the port output from + format: uuid + output: + title: Output + pattern: ^[-_a-zA-Z0-9]+$ + type: string + description: The port key in the node given by nodeUuid + additionalProperties: false + description: I/O port type to reference to an output port of another node in + the same project + Position: + title: Position + required: + - x + - y + type: object + properties: + x: + title: X + type: integer + description: The x position + example: + - '12' + y: + title: Y + type: integer + description: The y position + example: + - '15' + additionalProperties: false + Project: + title: osparc-simcore project + required: + - uuid + - name + - description + - thumbnail + - creationDate + - lastChangeDate + - workbench + - prjOwner + - accessRights + type: object + properties: + uuid: + title: Uuid + type: string + description: project unique identifier + format: uuid + name: + title: Name + type: string + description: project name + description: + title: Description + type: string + description: longer one-line description about the project + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url of the project thumbnail + format: uri + creationDate: + title: Creationdate + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + description: project creation date + lastChangeDate: + title: Lastchangedate + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + description: last save date + workbench: + title: Workbench + type: object + description: Project's pipeline + prjOwner: + title: Prjowner + type: string + description: user email + format: email + accessRights: + title: Accessrights + type: object + description: object containing the GroupID as key and read/write/execution + permissions as value + tags: + title: Tags + type: array + items: + type: integer + default: [] + classifiers: + title: Classifiers + type: array + items: + type: string + description: Contains the reference to the project classifiers + state: + anyOf: + - type: 'null' + - $ref: '#/components/schemas/ProjectState' + ui: + $ref: '#/components/schemas/StudyUI' + quality: + title: Quality + type: object + description: stores the study quality assessment + default: {} + dev: + title: Dev + type: object + description: object used for development purposes only + additionalProperties: false + ProjectLocked: + title: ProjectLocked + required: + - value + - status + type: object + properties: + value: + title: Value + type: boolean + description: True if the project is locked + owner: + title: Owner + allOf: + - $ref: '#/components/schemas/Owner' + description: If locked, the user that owns the lock + status: + allOf: + - $ref: '#/components/schemas/ProjectStatus' + description: The status of the project + additionalProperties: false + ProjectRunningState: + title: ProjectRunningState + required: + - value + type: object + properties: + value: + allOf: + - $ref: '#/components/schemas/RunningState' + description: The running state of the project + additionalProperties: false + ProjectState: + title: ProjectState + required: + - locked + - state + type: object + properties: + locked: + title: Locked + allOf: + - $ref: '#/components/schemas/ProjectLocked' + description: The project lock state + state: + title: State + allOf: + - $ref: '#/components/schemas/ProjectRunningState' + description: The project running state + additionalProperties: false + ProjectStatus: + title: ProjectStatus + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + description: An enumeration. + RunningState: + title: RunningState + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + description: "State of execution of a project's computational workflow\n\n \ + \ SEE StateType for task state\n " + SimCoreFileLink: + title: SimCoreFileLink + required: + - store + - path + type: object + properties: + store: + title: Store + type: integer + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + path: + title: Path + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + label: + title: Label + type: string + description: The real file name + eTag: + title: Etag + type: string + description: Entity tag that uniquely represents the file. The method to + generate the tag is not specified (black box). + dataset: + title: Dataset + type: string + deprecated: true + additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 storage + example: + store: 0 + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + Slideshow: + title: Slideshow + required: + - position + type: object + properties: + position: + title: Position + type: integer + instructions: + title: Instructions + type: string + StudyUI: + title: StudyUI + type: object + properties: + workbench: + title: Workbench + type: object + slideshow: + title: Slideshow + type: object + currentNodeId: + title: Currentnodeid + type: string + format: uuid + annotations: + title: Annotations + type: object + ValidationError: + title: ValidationError + required: + - loc + - msg + - type + type: object + properties: + loc: + title: Location + type: array + items: + anyOf: + - type: string + - type: integer + msg: + title: Message + type: string + type: + title: Error Type + type: string + WorkbenchUI: + title: WorkbenchUI + required: + - position + type: object + properties: + position: + title: Position + allOf: + - $ref: '#/components/schemas/Position' + description: The node position in the workbench + marker: + $ref: '#/components/schemas/Marker' + additionalProperties: false diff --git a/api/specs/webserver/scripts/openapi_projects.py b/api/specs/webserver/scripts/openapi_projects.py new file mode 100644 index 00000000000..d31dd482ec4 --- /dev/null +++ b/api/specs/webserver/scripts/openapi_projects.py @@ -0,0 +1,44 @@ +""" Helper script to automatically generate OAS + +This OAS are the source of truth +""" + +# pylint: disable=redefined-outer-name +# pylint: disable=unused-argument +# pylint: disable=unused-variable +# pylint: disable=too-many-arguments + + +# from enum import Enum +# from typing import Union + +from fastapi import FastAPI +# from models_library.generics import Envelope +# from models_library.projects import ProjectID +# from models_library.projects_nodes import NodeID +# from simcore_service_webserver.projects.projects_ports_handlers import ( +# ProjectInputGet, +# ProjectInputUpdate, +# ProjectMetadataPortGet, +# ProjectOutputGet, +# ) +from models_library.projects import Project + +app = FastAPI(redoc_url=None) + +# TAGS: list[Union[str, Enum]] = [ +# "project", +# ] + + +@app.get( + "", +) +async def get_project_inputs(project: Project): + """New in version *0.10*""" + + +if __name__ == "__main__": + from _common import CURRENT_DIR, create_openapi_specs + + create_openapi_specs(app, CURRENT_DIR.parent / "openapi-projects-matus-test.yaml") diff --git a/matus-json-schema-to-openapi-schema.json b/matus-json-schema-to-openapi-schema.json new file mode 100644 index 00000000000..df3059a5580 --- /dev/null +++ b/matus-json-schema-to-openapi-schema.json @@ -0,0 +1,2569 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "type": "string", + "format": "uuid", + "example": "07640335-a91f-468c-ab69-a374fa82078d" + }, + "name": { + "title": "Name", + "description": "project name", + "type": "string", + "example": "Temporal Distortion Simulator" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "type": "string", + "example": "Dabbling in temporal transitions ..." + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string", + "example": "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "type": "string", + "example": "2018-07-01T11:13:43Z" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "type": "string", + "example": "2018-07-01T11:13:43Z" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "type": "string", + "example": "simcore/services/comp/itis/sleeper" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "type": "string", + "example": "1.0.0" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "type": "string", + "example": "JupyterLab" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string", + "example": "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + }, + "runHash": { + "anyOf": [ + { + "nullable": true + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + }, + "additionalProperties": true + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + }, + "additionalProperties": true + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + }, + "additionalProperties": true + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + }, + "additionalProperties": true + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "nullable": true + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "example": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + } + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "x-patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + }, + "additionalProperties": true + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + } + }, + "additionalProperties": true + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "x-patternProperties": { + "^\\S+$": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + } + }, + "additionalProperties": true + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "type": "array", + "items": { + "type": "string" + }, + "example": "some:id:to:a:classifier" + }, + "state": { + "anyOf": [ + { + "nullable": true + }, + { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "exclusiveMinimum": true, + "type": "integer", + "minimum": 0, + "example": 2 + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "type": "string", + "example": "John" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "type": "string", + "example": "Smith" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "example": { + "value": false, + "status": "CLOSED" + } + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ], + "example": "STARTED" + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + } + ] + }, + "ui": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + }, + "additionalProperties": true + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + }, + "additionalProperties": true + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + }, + "additionalProperties": true + } + } + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "example": { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + } + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "example": { + "downloadLink": "https://fakeimg.pl/250x100/" + } + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "example": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + } + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "type": "string", + "example": "simcore/services/comp/itis/sleeper" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "type": "string", + "example": "1.0.0" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "type": "string", + "example": "JupyterLab" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string", + "example": "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + }, + "runHash": { + "anyOf": [ + { + "nullable": true + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + }, + "additionalProperties": true + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + }, + "additionalProperties": true + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + }, + "additionalProperties": true + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "x-patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + }, + "additionalProperties": true + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "nullable": true + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "example": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + } + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "x-patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + }, + "additionalProperties": true + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "exclusiveMinimum": true, + "type": "integer", + "minimum": 0, + "example": 2 + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "type": "string", + "example": "John" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "type": "string", + "example": "Smith" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "exclusiveMinimum": true, + "type": "integer", + "minimum": 0, + "example": 2 + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "type": "string", + "example": "John" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "type": "string", + "example": "Smith" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "example": { + "value": false, + "status": "CLOSED" + } + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ], + "example": "STARTED" + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "exclusiveMinimum": true, + "type": "integer", + "minimum": 0, + "example": 2 + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "type": "string", + "example": "John" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "type": "string", + "example": "Smith" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "example": { + "value": false, + "status": "CLOSED" + } + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ], + "example": "STARTED" + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "example": { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + } + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + }, + "additionalProperties": true + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + }, + "additionalProperties": true + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "x-patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + }, + "additionalProperties": true + } + } + } + } +} diff --git a/matus-without-ref.json b/matus-without-ref.json new file mode 100644 index 00000000000..96c0b4bf3e5 --- /dev/null +++ b/matus-without-ref.json @@ -0,0 +1,2728 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + } + ] + }, + "ui": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/original_schema_lhs_project_v001.json b/original_schema_lhs_project_v001.json new file mode 100644 index 00000000000..f826958ab58 --- /dev/null +++ b/original_schema_lhs_project_v001.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} \ No newline at end of file diff --git a/original_schema_rhs_pydantic_generated.json b/original_schema_rhs_pydantic_generated.json new file mode 100644 index 00000000000..cb72a25e167 --- /dev/null +++ b/original_schema_rhs_pydantic_generated.json @@ -0,0 +1,996 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Node" + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "$ref": "#/definitions/AccessRights" + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/definitions/ProjectState" + } + ] + }, + "ui": { + "$ref": "#/definitions/StudyUI" + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/PortLink" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/AccessEnum" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "$ref": "#/definitions/NodeState" + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "$ref": "#/definitions/Owner" + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "$ref": "#/definitions/ProjectStatus" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "$ref": "#/definitions/ProjectLocked" + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "$ref": "#/definitions/ProjectRunningState" + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "marker": { + "$ref": "#/definitions/Marker" + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/WorkbenchUI" + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Slideshow" + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Annotation" + } + } + } + } + } + } +} diff --git a/schema_lhs.json b/schema_lhs.json new file mode 100644 index 00000000000..f826958ab58 --- /dev/null +++ b/schema_lhs.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} \ No newline at end of file diff --git a/schema_rhs.json b/schema_rhs.json new file mode 100644 index 00000000000..21cda378bc1 --- /dev/null +++ b/schema_rhs.json @@ -0,0 +1,996 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Node" + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "$ref": "#/definitions/AccessRights" + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "anyOf": [ + { + "type": "null" + }, + { + "$ref": "#/definitions/ProjectState" + } + ] + }, + "ui": { + "$ref": "#/definitions/StudyUI" + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/PortLink" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/AccessEnum" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "$ref": "#/definitions/NodeState" + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "$ref": "#/definitions/Owner" + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "$ref": "#/definitions/ProjectStatus" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "$ref": "#/definitions/ProjectLocked" + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "$ref": "#/definitions/ProjectRunningState" + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "marker": { + "$ref": "#/definitions/Marker" + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/WorkbenchUI" + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Slideshow" + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Annotation" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml b/services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml new file mode 100644 index 00000000000..d47c47d315d --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml @@ -0,0 +1 @@ +extends: ["spectral:oas"] 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 e8a9d8df162..3f035b6204c 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 @@ -2309,550 +2309,194 @@ paths: content: application/json: schema: - title: simcore project - description: Description of a simcore project - type: object - additionalProperties: false + title: osparc-simcore project required: - uuid - name - description - - prjOwner - - accessRights + - thumbnail - creationDate - lastChangeDate - - thumbnail - workbench + - prjOwner + - accessRights + type: object properties: uuid: + title: Uuid type: string - format: uuid description: project unique identifier - example: 07640335-a91f-468c-ab69-a374fa82078d + format: uuid name: + title: Name type: string description: project name - example: Temporal Distortion Simulator description: + title: Description type: string description: longer one-line description about the project - example: Dabbling in temporal transitions ... - prjOwner: + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 type: string - format: email - description: user email - accessRights: - type: object - description: object containing the GroupID as key and read/write/execution permissions as value - x-patternProperties: - ^\S+$: - type: object - description: the group id - additionalProperties: false - required: - - read - - write - - delete - properties: - read: - type: boolean - description: gives read access - write: - type: boolean - description: gives write access - delete: - type: boolean - description: gives deletion rights - additionalProperties: true + description: url of the project thumbnail + format: uri creationDate: + title: Creationdate + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' type: string description: project creation date - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' lastChangeDate: - type: string - description: last save date + title: Lastchangedate pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' - thumbnail: type: string - minLength: 0 - maxLength: 2083 - format: uri - description: url of the latest screenshot of the project - example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + description: last save date workbench: + title: Workbench type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - key - - version - - label - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: - - simcore/services/comp/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - version: - type: string - description: semantic version number of the node - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - label: - type: string - description: The short name of the node - example: - - JupyterLab - progress: - type: number - maximum: 100 - minimum: 0 - description: the node progress value - thumbnail: - minLength: 0 - maxLength: 2083 - format: uri - type: string - description: url of the latest screenshot of the node - example: - - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' - runHash: - description: the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated - type: - - string - - 'null' - example: - - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 - inputs: - type: object - description: values of input properties - patternProperties: - '^[-_a-zA-Z0-9]+$': - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - nodeUuid - - output - properties: - nodeUuid: - type: string - format: uuid - output: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - inputsUnits: - type: object - description: values of input unit - patternProperties: - '^[-_a-zA-Z0-9]+$': - type: string - example: - - kilo-meter - - milli-second - - micro-gram - - kelvin - inputAccess: - description: map with key - access level pairs - type: object - patternProperties: - '^[-_a-zA-Z0-9]+$': - type: string - enum: - - Invisible - - ReadOnly - - ReadAndWrite - default: ReadAndWrite - example: - - ReadOnly - inputNodes: - type: array - items: - type: string - format: uuid - description: node IDs of where the node is connected to - example: - - nodeUuid1 - - nodeUuid2 - outputs: - default: {} - type: object - patternProperties: - '^[-_a-zA-Z0-9]+$': - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - outputNode: - type: boolean - deprecated: true - outputNodes: - type: array - items: - type: string - format: uuid - description: Used in group-nodes. Node IDs of those connected to the output - example: - - nodeUuid1 - - nodeUuid2 - parent: - type: - - 'null' - - string - format: uuid - description: Parent's (group-nodes') node ID s. - example: - - nodeUuid1 - - nodeUuid2 - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - deprecated: true - state: - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: contains the node inputs dependencies if they need to be computed first - type: array - uniqueItems: true - items: - type: string - format: uuid - currentStatus: - description: the node's current state - default: NOT_STARTED - example: - - RUNNING - - FAILED - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - bootOptions: - title: Boot Options - description: 'Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services''s defaults.' - type: object - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - additionalProperties: true - ui: + description: Project's pipeline + prjOwner: + title: Prjowner + type: string + description: user email + format: email + accessRights: + title: Accessrights type: object - additionalProperties: true - properties: - workbench: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - position - properties: - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - marker: - type: object - additionalProperties: false - required: - - color - properties: - color: - type: string - description: Marker's color - example: - - '#FF0000' - - '#0000FF' - additionalProperties: true - slideshow: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - position - properties: - position: - type: integer - description: Slide's position - example: - - 0 - - 2 - instructions: - type: - - string - - 'null' - description: Instructions about what to do in this step - example: - - This is a **sleeper** - - 'Please, select the config file defined [in this link](asdf)' - additionalProperties: true - currentNodeId: - type: string - format: uuid - annotations: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - type - - color - - attributes - properties: - type: - type: string - description: Annotation type - example: - - rect - - text - color: - type: string - description: Annotation's color - example: - - '#FF0000' - - '#0000FF' - attributes: - type: object - description: svg attributes - additionalProperties: true + description: object containing the GroupID as key and read/write/execution permissions as value tags: + title: Tags type: array items: type: integer + default: [] classifiers: + title: Classifiers type: array - description: Contains the reference to the project classifiers items: type: string - example: 'some:id:to:a:classifier' - dev: - type: object - description: object used for development purposes only + description: Contains the reference to the project classifiers state: - title: State - description: Project state anyOf: - - nullable: true - title: ProjectState + required: + - locked + - state type: object - additionalProperties: false properties: locked: title: Locked - description: The project lock state allOf: - title: ProjectLocked + required: + - value + - status type: object - additionalProperties: false properties: value: title: Value - description: True if the project is locked type: boolean + description: True if the project is locked owner: title: Owner - description: 'If locked, the user that owns the lock' allOf: - title: Owner + required: + - user_id + - first_name + - last_name type: object - additionalProperties: false properties: user_id: title: User Id + exclusiveMinimum: true type: integer description: Owner's identifier when registered in the user's database table - example: - - 2 + minimum: 0 first_name: title: First Name - description: Owner first name - example: - - John type: string + description: Owner first name last_name: title: Last Name - description: Owner last name - example: - - Smith type: string - required: - - user_id - - first_name - - last_name + description: Owner last name + additionalProperties: false + description: 'If locked, the user that owns the lock' status: - title: Status + allOf: + - title: ProjectStatus + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + description: An enumeration. description: The status of the project - enum: - - CLOSED - - CLOSING - - CLONING - - OPENING - - EXPORTING - - OPENED - type: string - required: - - value - - status + additionalProperties: false + description: The project lock state state: title: State - description: The project running state allOf: - title: ProjectRunningState + required: + - value type: object - additionalProperties: false properties: value: - title: RunningState - description: An enumeration. - enum: - - UNKNOWN - - NOT_STARTED - - PUBLISHED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - required: - - value - required: - - locked - - state - quality: + allOf: + - title: RunningState + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + + description: The running state of the project + additionalProperties: false + description: The project running state + additionalProperties: false + ui: + title: StudyUI type: object + properties: + workbench: + title: Workbench + type: object + slideshow: + title: Slideshow + type: object + currentNodeId: + title: Currentnodeid + type: string + format: uuid + annotations: + title: Annotations + type: object + quality: title: Quality - description: Object containing Quality Assessment related data + type: object + description: stores the study quality assessment + default: {} + dev: + title: Dev + type: object + description: object used for development purposes only + additionalProperties: false responses: '202': description: project created diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml new file mode 100644 index 00000000000..e8a9d8df162 --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml @@ -0,0 +1,6322 @@ +openapi: 3.0.0 +info: + title: osparc-simcore web API + version: 0.16.0 + description: API designed for the front-end app + contact: + name: IT'IS Foundation + email: support@simcore.io + license: + name: MIT + url: 'https://github.com/ITISFoundation/osparc-simcore/blob/master/LICENSE' +servers: + - description: API server + url: /v0 + - description: Development server + url: 'http://{host}:{port}/{basePath}' + variables: + host: + default: localhost + port: + default: '8001' + basePath: + enum: + - v0 + default: v0 +tags: + - name: admin + - name: authentication + - name: user + - name: project + - name: cluster + - name: catalog + - name: storage + - name: activity + - name: tag + - name: tasks + description: | + Asynchronously running tasks + - name: node + description: | + The simcore frontend provides a bunch of custom ui elements for nodes to interact with users. + The frontend uses these api calls to query the nodes about the gui elemets they want to use, and it + defines the protocol for the frontend to interact with the node. + - name: configuration + - name: maintenance + - name: publication + description: | + oSPARC users can make publications. Starting from submission of new service candidates, but this could + end up accepting other types of publications. + - name: viewer + - name: repository +paths: + '/email:test': + post: + tags: + - admin + summary: Test Email + operationId: test_email + parameters: + - required: false + schema: + title: X-Simcore-Products-Name + type: string + name: x-simcore-products-name + in: header + requestBody: + content: + application/json: + schema: + title: TestEmail + required: + - to + type: object + properties: + from_: + title: 'From ' + type: string + description: Email sender + format: email + to: + title: To + type: string + description: Email receiver + format: email + template_name: + title: Template Name + enum: + - change_email_email.jinja2 + - new_2fa_code.jinja2 + - registration_email.jinja2 + - reset_password_email_failed.jinja2 + - reset_password_email.jinja2 + - service_submission.jinja2 + type: string + default: registration_email.jinja2 + template_context: + title: Template Context + type: object + default: {} + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[Union[TestFailed, TestPassed]]' + type: object + properties: + data: + title: Data + anyOf: + - title: TestFailed + required: + - test_name + - error_type + - error_message + - traceback + type: object + properties: + test_name: + title: Test Name + type: string + error_type: + title: Error Type + type: string + error_message: + title: Error Message + type: string + traceback: + title: Traceback + type: string + - title: TestPassed + required: + - fixtures + - info + type: object + properties: + fixtures: + title: Fixtures + type: object + info: + title: Info + type: object + error: + title: Error + /: + get: + tags: + - maintenance + summary: readiness probe for + operationId: healthcheck_readiness_probe + responses: + '200': + description: Service information + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + name: + type: string + status: + type: string + api_version: + type: string + version: + type: string + example: + name: simcore-director-service + status: SERVICE_RUNNING + api_version: 0.1.0-dev+NJuzzD9S + version: 0.1.0-dev+N127Mfv9H + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + /health: + get: + tags: + - maintenance + summary: liveliness probe + operationId: healthcheck_liveness_probe + responses: + '200': + description: Service information + content: + application/json: + schema: + $ref: '#/paths/~1/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + /status: + get: + tags: + - maintenance + summary: checks status of self and connected services + operationId: get_app_status + responses: + '200': + description: returns app status check + /status/diagnostics: + get: + tags: + - maintenance + operationId: get_app_diagnostics + responses: + '200': + description: returns app diagnostics report + '/status/{service_name}': + get: + tags: + - maintenance + operationId: get_service_status + parameters: + - in: path + required: true + name: service_name + schema: + type: string + responses: + '200': + description: returns status of connected service + /config: + get: + summary: Front end runtime configuration + operationId: get_config + tags: + - configuration + responses: + '200': + description: configuration details + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + invitation_required: + type: boolean + example: + invitation_required: true + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/auth/register/invitations:check': + post: + tags: + - authentication + summary: Check Registration Invitation + description: Check invitation and returns associated email or None + operationId: auth_check_registration_invitation + requestBody: + content: + application/json: + schema: + title: InvitationCheck + required: + - invitation + type: object + properties: + invitation: + title: Invitation + type: string + description: Invitation code + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[InvitationInfo]' + type: object + properties: + data: + title: InvitationInfo + type: object + properties: + email: + title: Email + type: string + description: Email associated to invitation or None + format: email + additionalProperties: false + error: + title: Error + /auth/register: + post: + tags: + - authentication + summary: Register + description: User registration + operationId: auth_register + requestBody: + content: + application/json: + schema: + title: RegisterBody + required: + - email + - password + type: object + properties: + email: + title: Email + type: string + format: email + password: + title: Password + type: string + format: password + writeOnly: true + confirm: + title: Confirm + type: string + description: Password confirmation + format: password + writeOnly: true + invitation: + title: Invitation + type: string + description: Invitation code + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '/auth/two_factor:resend': + post: + tags: + - authentication + summary: Resend 2Fa Code + description: Resends 2FA either via email or sms + operationId: auth_resend_2fa_code + requestBody: + content: + application/json: + schema: + title: Resend2faBody + required: + - email + type: object + properties: + email: + title: Email + type: string + description: User email (identifier) + format: email + via: + title: Via + enum: + - SMS + - Email + type: string + default: SMS + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '401': + description: unauthorized reset due to invalid token code + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + /auth/verify-phone-number: + post: + tags: + - authentication + summary: Register Phone + description: user tries to verify phone number for 2 Factor Authentication when registering + operationId: auth_register_phone + requestBody: + content: + application/json: + schema: + title: RegisterPhoneBody + required: + - email + - phone + type: object + properties: + email: + title: Email + type: string + format: email + phone: + title: Phone + type: string + description: 'Phone number E.164, needed on the deployments with 2FA' + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[RegisterPhoneNextPage]' + type: object + properties: + data: + title: RegisterPhoneNextPage + required: + - name + - message + type: object + properties: + name: + title: Name + type: string + description: Code name to the front-end page + parameters: + title: _PageParams + type: object + properties: + retry_2fa_after: + title: Retry 2Fa After + exclusiveMinimum: true + type: integer + minimum: 0 + logger: + title: Logger + type: string + default: user + deprecated: true + level: + title: Level + enum: + - INFO + - WARNING + - ERROR + type: string + default: INFO + message: + title: Message + type: string + description: |- + This is the body of a 2XX response to pass the front-end + what kind of page shall be display next and some information about it + + An analogous structure is used in the redirects (see create_redirect_response) but + using a path+query in the fragment of the URL + error: + title: Error + /auth/validate-code-register: + post: + tags: + - authentication + summary: Phone Confirmation + description: user enters 2 Factor Authentication code when registering + operationId: auth_phone_confirmation + requestBody: + content: + application/json: + schema: + title: PhoneConfirmationBody + required: + - email + - phone + - code + type: object + properties: + email: + title: Email + type: string + format: email + phone: + title: Phone + type: string + description: 'Phone number E.164, needed on the deployments with 2FA' + code: + title: Code + type: string + format: password + writeOnly: true + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + /auth/login: + post: + tags: + - authentication + summary: Login + description: user logs in + operationId: auth_login + requestBody: + content: + application/json: + schema: + title: LoginBody + required: + - email + - password + type: object + properties: + email: + title: Email + type: string + format: email + password: + title: Password + type: string + format: password + writeOnly: true + additionalProperties: false + required: true + responses: + '201': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[LoginNextPage]' + type: object + properties: + data: + title: LoginNextPage + required: + - name + - code + - reason + type: object + properties: + name: + title: Name + type: string + description: Code name to the front-end page + parameters: + title: CodePageParams + required: + - message + type: object + properties: + message: + title: Message + type: string + retry_2fa_after: + title: Retry 2Fa After + exclusiveMinimum: true + type: integer + minimum: 0 + next_url: + title: Next Url + type: string + code: + title: Code + type: string + deprecated: true + reason: + title: Reason + type: string + deprecated: true + description: |- + This is the body of a 2XX response to pass the front-end + what kind of page shall be display next and some information about it + + An analogous structure is used in the redirects (see create_redirect_response) but + using a path+query in the fragment of the URL + error: + title: Error + '401': + description: unauthorized reset due to invalid token code + content: + application/json: + schema: + title: 'Envelope[Error]' + type: object + properties: + data: + title: Error + type: object + properties: + logs: + title: Logs + type: array + items: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema/properties/data' + description: log messages + errors: + title: Errors + type: array + items: + title: ErrorItem + required: + - code + - message + type: object + properties: + code: + title: Code + type: string + description: Typically the name of the exception that produced it otherwise some known error code + message: + title: Message + type: string + description: Error message specific to this item + resource: + title: Resource + type: string + description: API resource affected by this error + field: + title: Field + type: string + description: Specific field within the resource + description: errors metadata + status: + title: Status + type: integer + description: HTTP error code + error: + title: Error + /auth/validate-code-login: + post: + tags: + - authentication + summary: Login 2Fa + description: user enters 2 Factor Authentication code when login in + operationId: auth_login_2fa + requestBody: + content: + application/json: + schema: + title: LoginTwoFactorAuthBody + required: + - email + - code + type: object + properties: + email: + title: Email + type: string + format: email + code: + title: Code + type: string + format: password + writeOnly: true + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '401': + description: unauthorized reset due to invalid token code + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + /auth/logout: + post: + tags: + - authentication + summary: Logout + description: user logout + operationId: auth_logout + requestBody: + content: + application/json: + schema: + title: LogoutBody + type: object + properties: + client_session_id: + title: Client Session Id + type: string + example: 5ac57685-c40f-448f-8711-70be1936fd63 + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[Log]' + type: object + properties: + data: + title: Log + required: + - message + type: object + properties: + level: + allOf: + - title: LogLevel + enum: + - DEBUG + - INFO + - WARNING + - ERROR + type: string + description: An enumeration. + description: log level + default: INFO + message: + title: Message + type: string + description: 'log message. If logger is USER, then it MUST be human readable' + logger: + title: Logger + type: string + description: name of the logger receiving this message + example: + message: 'Hi there, Mr user' + level: INFO + logger: user-logger + error: + title: Error + /auth/reset-password: + post: + tags: + - authentication + summary: Reset Password + description: a non logged-in user requests a password reset + operationId: auth_reset_password + requestBody: + content: + application/json: + schema: + title: ResetPasswordBody + required: + - email + type: object + properties: + email: + title: Email + type: string + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '503': + description: Service Unavailable + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + '/auth/reset-password/{code}': + post: + tags: + - authentication + summary: Reset Password Allowed + description: changes password using a token code without being logged in + operationId: auth_reset_password_allowed + parameters: + - required: true + schema: + title: Code + type: string + name: code + in: path + requestBody: + content: + application/json: + schema: + title: ResetPasswordConfirmation + required: + - password + - confirm + type: object + properties: + password: + title: Password + type: string + format: password + writeOnly: true + confirm: + title: Confirm + type: string + format: password + writeOnly: true + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '401': + description: unauthorized reset due to invalid token code + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + /auth/change-email: + post: + tags: + - authentication + summary: Change Email + description: logged in user changes email + operationId: auth_change_email + requestBody: + content: + application/json: + schema: + title: ChangeEmailBody + required: + - email + type: object + properties: + email: + title: Email + type: string + format: email + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '401': + description: unauthorized user. Login required + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + '503': + description: unable to send confirmation email + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + /auth/change-password: + post: + tags: + - authentication + summary: Change Password + description: logged in user changes password + operationId: auth_change_password + requestBody: + content: + application/json: + schema: + title: ChangePasswordBody + required: + - current + - new + - confirm + type: object + properties: + current: + title: Current + type: string + format: password + writeOnly: true + new: + title: New + type: string + format: password + writeOnly: true + confirm: + title: Confirm + type: string + format: password + writeOnly: true + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + '401': + description: unauthorized user. Login required + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + '409': + description: mismatch between new and confirmation passwords + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + '422': + description: current password is invalid + content: + application/json: + schema: + $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' + '/auth/confirmation/{code}': + get: + tags: + - authentication + summary: Email Confirmation + description: email link sent to user to confirm an action + operationId: auth_confirmation + parameters: + - required: true + schema: + title: Code + type: string + name: code + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' + 3XX: + description: redirection to specific ui application page + /auth/api-keys: + get: + tags: + - authentication + summary: List Api Keys + description: lists display names of API keys by this user + operationId: list_api_keys + parameters: + - required: true + schema: + title: Code + type: string + name: code + in: query + responses: + '200': + description: returns the display names of API keys + content: + application/json: + schema: + title: Response 200 List Api Keys + type: array + items: + type: string + '400': + description: key name requested is invalid + '401': + description: requires login to list keys + '403': + description: not enough permissions to list keys + post: + tags: + - authentication + summary: Create Api Key + description: creates API keys to access public API + operationId: create_api_key + requestBody: + content: + application/json: + schema: + title: ApiKeyCreate + required: + - display_name + type: object + properties: + display_name: + title: Display Name + minLength: 3 + type: string + expiration: + title: Expiration + type: number + description: 'Time delta from creation time to expiration. If None, then it does not expire.' + format: time-delta + required: true + responses: + '200': + description: Authorization granted returning API key + content: + application/json: + schema: + title: ApiKeyGet + required: + - display_name + - api_key + - api_secret + type: object + properties: + display_name: + title: Display Name + minLength: 3 + type: string + api_key: + title: Api Key + type: string + api_secret: + title: Api Secret + type: string + '400': + description: key name requested is invalid + '401': + description: requires login to list keys + '403': + description: not enough permissions to list keys + delete: + tags: + - authentication + summary: Delete Api Key + description: deletes API key by name + operationId: delete_api_key + requestBody: + content: + application/json: + schema: + $ref: '#/paths/~1auth~1api-keys/post/requestBody/content/application~1json/schema' + required: true + responses: + '204': + description: api key successfully deleted + '401': + description: requires login to delete a key + '403': + description: not enough permissions to delete a key + /me: + get: + operationId: get_my_profile + tags: + - user + responses: + '200': + description: current user profile + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + allOf: + - $ref: '#/paths/~1me/put/requestBody/content/application~1json/schema/allOf/0' + - type: object + properties: + id: + type: integer + login: + type: string + format: email + role: + type: string + groups: + $ref: '#/paths/~1groups/get/responses/200/content/application~1json/schema/properties/data' + gravatar_id: + type: string + expirationDate: + type: string + format: date + description: 'If user has a trial account, it sets the expiration date, otherwise None' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + put: + operationId: update_my_profile + tags: + - user + requestBody: + content: + application/json: + schema: + allOf: + - type: object + properties: + first_name: + type: string + last_name: + type: string + example: + first_name: Pedro + last_name: Crespo + responses: + '204': + description: updated profile + default: + $ref: '#/components/responses/DefaultErrorResponse' + /me/tokens: + get: + summary: List tokens + operationId: list_tokens + tags: + - user + responses: + '200': + description: list of tokens + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + $ref: '#/paths/~1me~1tokens/post/requestBody/content/application~1json/schema/properties/data' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + summary: Create tokens + operationId: create_tokens + tags: + - user + requestBody: + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + description: api keys for third party services + type: object + properties: + service: + description: uniquely identifies the service where this token is used + type: string + token_key: + description: basic token key + type: string + format: uuid + token_secret: + type: string + format: uuid + required: + - service + - token_key + error: + nullable: true + default: null + responses: + '201': + description: token created + content: + application/json: + schema: + $ref: '#/paths/~1me~1tokens/post/requestBody/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/me/tokens/{service}': + parameters: + - name: service + in: path + required: true + schema: + type: string + get: + summary: Gets specific token + operationId: get_token + tags: + - user + responses: + '200': + description: got detailed token + content: + application/json: + schema: + $ref: '#/paths/~1me~1tokens/post/requestBody/content/application~1json/schema' + put: + summary: Updates token + operationId: update_token + tags: + - user + responses: + '204': + description: token has been successfully updated + delete: + summary: Delete token + operationId: delete_token + tags: + - user + responses: + '204': + description: token has been successfully deleted + /groups: + get: + summary: List my groups + operationId: list_groups + tags: + - group + responses: + '200': + description: list of the groups I belonged to + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + me: + $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' + organizations: + type: array + items: + $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' + all: + $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' + product: + $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + summary: Create a new group + operationId: create_group + tags: + - group + requestBody: + required: true + description: the group to create + content: + application/json: + schema: + type: object + properties: + gid: + description: the group ID + type: string + label: + description: the group name + type: string + description: + description: the group description + type: string + thumbnail: + description: url to the group thumbnail + type: string + format: uri + accessRights: + $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/patch/requestBody/content/application~1json/schema/properties/accessRights' + required: + - gid + - label + - description + - accessRights + example: + - gid: '27' + label: A user + description: A very special user + thumbnail: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + - gid: '1' + label: ITIS Foundation + description: The Foundation for Research on Information Technologies in Society + thumbnail: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + - gid: '0' + label: All + description: Open to all users + thumbnail: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + responses: + '201': + description: group created + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/groups/{gid}': + parameters: + - name: gid + in: path + required: true + schema: + type: string + get: + tags: + - group + summary: Gets one group details + operationId: get_group + responses: + '200': + description: got group + content: + application/json: + schema: + $ref: '#/paths/~1groups/post/responses/201/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + patch: + summary: Update one group + operationId: update_group + tags: + - group + requestBody: + required: true + description: the group to update + content: + application/json: + schema: + $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' + responses: + '200': + description: the modified group + content: + application/json: + schema: + $ref: '#/paths/~1groups/post/responses/201/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - group + summary: Deletes one group + operationId: delete_group + responses: + '204': + description: group has been successfully deleted + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/groups/{gid}/users': + parameters: + - name: gid + in: path + required: true + schema: + type: string + get: + tags: + - group + summary: Gets list of users in group + operationId: get_group_users + responses: + '200': + description: got list of users and their respective rights + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/get/responses/200/content/application~1json/schema/properties/data' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + tags: + - group + summary: Adds a user in the group + operationId: add_group_user + requestBody: + required: true + description: the user to add + content: + application/json: + schema: + anyOf: + - type: object + required: + - uid + properties: + uid: + type: string + description: the user id + - type: object + required: + - email + properties: + email: + type: string + format: email + description: the user email + responses: + '204': + description: user successfully added + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/groups/{gid}/users/{uid}': + parameters: + - name: gid + in: path + required: true + schema: + type: string + - name: uid + in: path + required: true + schema: + type: string + get: + tags: + - group + summary: Gets specific user in group + operationId: get_group_user + responses: + '200': + description: got user + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + allOf: + - type: object + properties: + first_name: + type: string + description: the user first name + last_name: + type: string + description: the user last name + login: + type: string + format: email + description: the user login email + gravatar_id: + type: string + description: the user gravatar id hash + id: + type: string + description: the user id + gid: + type: string + description: the user primary gid + example: + first_name: Mr + last_name: Smith + login: mr.smith@matrix.com + gravatar_id: a1af5c6ecc38e81f29695f01d6ceb540 + id: '1' + gid: '3' + - $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/patch/requestBody/content/application~1json/schema/properties/accessRights' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + patch: + tags: + - group + summary: Modify specific user in group + operationId: update_group_user + requestBody: + required: true + description: the user rights to modify + content: + application/json: + schema: + type: object + properties: + accessRights: + description: defines acesss rights for the user + type: object + properties: + read: + type: boolean + write: + type: boolean + delete: + type: boolean + required: + - read + - write + - delete + example: + - read: true + write: false + delete: false + - read: true + write: true + delete: false + - read: true + write: true + delete: true + required: + - accessRights + responses: + '200': + description: modified user + content: + application/json: + schema: + $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - group + summary: Delete specific user in group + operationId: delete_group_user + responses: + '204': + description: successfully removed user + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/groups/{gid}/classifiers': + get: + parameters: + - name: gid + in: path + required: true + schema: + type: string + - name: tree_view + in: query + description: Some classifiers (e.g. sparc's) offer different tree views + schema: + type: string + enum: + - std + - sort + default: std + tags: + - group + summary: Gets classifiers bundle for this group + operationId: get_group_classifiers + responses: + '200': + description: got a bundle with all information about classifiers + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/groups/sparc/classifiers/scicrunch-resources/{rrid}': + parameters: + - name: rrid + in: path + required: true + schema: + type: string + get: + tags: + - group + summary: 'Returns information on a valid RRID (https://www.force11.org/group/resource-identification-initiative)' + operationId: get_scicrunch_resource + responses: + '200': + description: Got information of a valid RRID + '400': + description: Invalid RRID + '503': + description: scircrunch.org service is not reachable + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + tags: + - group + summary: Adds new RRID to classifiers + operationId: add_scicrunch_resource + responses: + '200': + description: Got information of a valid RRID + '400': + description: Invalid RRID + '503': + description: scircrunch.org service is not reachable + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/groups/sparc/classifiers/scicrunch-resources:search': + get: + parameters: + - name: guess_name + in: query + required: true + schema: + type: string + tags: + - group + summary: Returns a list of related resource provided a search name + operationId: search_scicrunch_resources + responses: + '200': + description: Got information of a valid RRID + '503': + description: scircrunch.org service is not reachable + default: + $ref: '#/components/responses/DefaultErrorResponse' + /storage/locations: + get: + summary: Get available storage locations + tags: + - storage + operationId: get_storage_locations + responses: + '200': + description: List of availabe storage locations + content: + application/json: + schema: + type: array + items: + type: object + properties: + name: + type: string + id: + type: number + example: + filename: simcore.s3 + id: 0 + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}:sync': + post: + summary: Manually triggers the synchronisation of the file meta data table in the database + tags: + - storage + operationId: synchronise_meta_data_table + parameters: + - name: location_id + in: path + required: true + schema: + type: string + - name: dry_run + in: query + required: false + schema: + type: boolean + default: true + - name: fire_and_forget + in: query + required: false + schema: + type: boolean + default: false + responses: + '200': + description: 'An object containing added, changed and removed paths' + content: + application/json: + schema: + type: object + required: + - data + - error + properties: + data: + type: object + required: + - removed + properties: + dry_run: + type: boolean + fire_and_forget: + type: boolean + removed: + type: array + items: + type: string + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}/files/metadata': + get: + summary: Get list of file meta data + tags: + - storage + operationId: get_files_metadata + parameters: + - name: location_id + in: path + required: true + schema: + type: string + responses: + '200': + description: list of file meta-datas + content: + application/json: + schema: + type: array + items: + $ref: '#/paths/~1storage~1locations~1%7Blocation_id%7D~1files~1%7Bfile_id%7D~1metadata/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}/files/{file_id}': + get: + summary: Returns download link for requested file + tags: + - storage + operationId: download_file + parameters: + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + responses: + '200': + description: Returns presigned link + content: + application/json: + schema: + type: object + properties: + link: + type: string + example: + link: example_link + put: + summary: Returns upload link + tags: + - storage + operationId: upload_file + parameters: + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + - name: file_size + in: query + required: false + schema: + type: integer + format: int64 + minimum: 0 + responses: + '200': + description: Return upload object + content: + application/json: + schema: + type: object + required: + - data + - error + properties: + data: + type: object + required: + - chunk_size + - urls + - links + properties: + chunk_size: + type: integer + format: int64 + minimum: 0 + urls: + type: array + items: + type: string + links: + type: object + required: + - abort_upload + - complete_upload + properties: + abort_upload: + type: string + complete_upload: + type: string + error: + nullable: true + default: null + links: + CompleteUpload: + operationId: complete_upload_file + parameters: + path.location_id: $request.path.location_id + path.file_id: $request.path.file_id + query.user_id: $request.query.user_id + AbortUpload: + operationId: abort_upload_file + parameters: + path.location_id: $request.path.location_id + path.file_id: $request.path.file_id + query.user_id: $request.query.user_id + delete: + summary: Deletes File + tags: + - storage + operationId: delete_file + parameters: + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + responses: + '204': + description: '' + '/storage/locations/{location_id}/files/{file_id}:complete': + post: + summary: Asks the server to complete the upload + operationId: complete_upload_file + parameters: + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + type: object + required: + - parts + properties: + parts: + type: array + items: + type: object + required: + - number + - e_tag + properties: + number: + type: integer + minimum: 1 + e_tag: + type: string + responses: + '202': + description: Completion of upload is accepted + content: + application/json: + schema: + type: object + required: + - data + - error + properties: + data: + type: object + required: + - links + properties: + links: + type: object + required: + - state + properties: + state: + type: string + error: + nullable: true + default: null + links: + CompleteUploadStatus: + operationId: is_completed_upload_file + parameters: + path.location_id: $request.path.location_id + path.file_id: $request.path.file_id + path.future_id: $response.body.data.links.state + query.user_id: $request.query.user_id + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}/files/{file_id}:abort': + post: + summary: Asks the server to abort the upload and revert to the last valid version if any + operationId: abort_upload_file + parameters: + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + responses: + '204': + description: Abort OK + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}/files/{file_id}:complete/futures/{future_id}': + post: + summary: Check for upload completion + operationId: is_completed_upload_file + parameters: + - name: future_id + in: path + required: true + schema: + type: string + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + responses: + '200': + description: returns state of upload completion + content: + application/json: + schema: + type: object + required: + - data + - error + properties: + data: + type: object + required: + - state + properties: + state: + type: string + enum: + - ok + - nok + e_tag: + type: string + nullable: true + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}/files/{file_id}/metadata': + get: + summary: Get File Metadata + tags: + - storage + operationId: get_file_metadata + parameters: + - name: file_id + in: path + required: true + schema: + type: string + - name: location_id + in: path + required: true + schema: + type: string + responses: + '200': + description: Returns file metadata + content: + application/json: + schema: + type: object + properties: + file_uuid: + type: string + location_id: + type: string + project_name: + type: string + node_name: + type: string + file_name: + type: string + file_id: + type: string + created_at: + type: string + last_modified: + type: string + file_size: + type: integer + entity_tag: + type: string + example: + file_uuid: simcore-testing/105/1000/3 + location_id: '0' + project_name: futurology + node_name: alpha + file_name: example.txt + file_id: 'N:package:e263da07-2d89-45a6-8b0f-61061b913873' + created_at: '2019-06-19T12:29:03.308611Z' + last_modified: '2019-06-19T12:29:03.78852Z' + file_size: 73 + entity_tag: a87ff679a2f3e71d9181a67b7542122c + '/storage/locations/{location_id}/datasets/{dataset_id}/metadata': + get: + summary: Get Files Metadata + tags: + - storage + operationId: get_files_metadata_dataset + parameters: + - name: location_id + in: path + required: true + schema: + type: string + - name: dataset_id + in: path + required: true + schema: + type: string + responses: + '200': + description: list of file meta-datas + content: + application/json: + schema: + $ref: '#/paths/~1storage~1locations~1%7Blocation_id%7D~1files~1metadata/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/storage/locations/{location_id}/datasets': + get: + summary: Get datasets metadata + tags: + - storage + operationId: get_datasets_metadata + parameters: + - name: location_id + in: path + required: true + schema: + type: string + responses: + '200': + description: list of dataset meta-datas + content: + application/json: + schema: + type: array + items: + type: object + properties: + dataset_id: + type: string + display_name: + type: string + example: + dataset_uuid: 'N:id-aaaa' + display_name: simcore-testing + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/computations/{project_id}': + get: + description: Returns the last computation data + tags: + - computations + operationId: get_computation + parameters: + - in: path + name: project_id + required: true + description: the uuid of the project + schema: + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + responses: + '200': + description: Succesffully retrieved computation + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + iteration: + type: integer + minimum: 1 + cluster_id: + type: integer + minimum: 0 + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/computations/{project_id}:start': + post: + description: Starts the pipeline(s) of a given (meta) project + tags: + - computations + operationId: start_computation + parameters: + - $ref: '#/paths/~1computations~1%7Bproject_id%7D/get/parameters/0' + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: + force_restart: + type: boolean + default: false + description: if true will force re-running all dependent nodes + cluster_id: + type: integer + description: 'the computation shall use the cluster described by its id, 0 is the default cluster' + default: 0 + minimum: 0 + subgraph: + description: The node uuids selected for running a partial pipeline + type: array + uniqueItems: true + items: + type: string + format: uuid + responses: + '201': + description: Successfully started the pipeline + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - pipelines_id + properties: + pipeline_id: + type: string + description: ID for created pipeline (=project identifier) + ref_ids: + type: array + items: + type: integer + description: Checkpoints IDs for created pipeline + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/computations/{project_id}:stop': + post: + description: Stops (all) pipeline(s) of a given (meta) project + tags: + - computations + operationId: stop_computation + parameters: + - $ref: '#/paths/~1computations~1%7Bproject_id%7D/get/parameters/0' + responses: + '204': + description: Succesffully stopped the pipeline + default: + $ref: '#/components/responses/DefaultErrorResponse' + /projects: + get: + tags: + - project + summary: List all projects + operationId: list_projects + parameters: + - name: type + in: query + schema: + type: string + default: all + enum: + - template + - user + - all + - name: show_hidden + in: query + schema: + type: boolean + default: false + description: includes projects marked as hidden in the listing + - name: offset + in: query + schema: + type: integer + minimum: 0 + default: 0 + required: false + description: index to the first item to return + - name: limit + in: query + schema: + type: integer + default: 20 + minimum: 1 + maximum: 50 + required: false + description: maximum number of items to return + responses: + '200': + description: list of projects + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema/properties/data' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + tags: + - project + summary: Create new project + operationId: create_projects + parameters: + - name: from_study + in: query + schema: + type: string + description: 'Option to create a project from existing template or study: from_study={study_uuid}' + - name: as_template + in: query + schema: + type: boolean + default: false + description: 'Option to create a template from existing project: as_template=true' + - name: copy_data + in: query + schema: + type: boolean + default: true + description: 'Option to copy data when creating from an existing template or as a template, defaults to True' + - name: hidden + in: query + schema: + type: boolean + default: false + description: Enables/disables hidden flag. Hidden projects are by default unlisted. + requestBody: + content: + application/json: + schema: + title: simcore project + description: Description of a simcore project + type: object + additionalProperties: false + required: + - uuid + - name + - description + - prjOwner + - accessRights + - creationDate + - lastChangeDate + - thumbnail + - workbench + properties: + uuid: + type: string + format: uuid + description: project unique identifier + example: 07640335-a91f-468c-ab69-a374fa82078d + name: + type: string + description: project name + example: Temporal Distortion Simulator + description: + type: string + description: longer one-line description about the project + example: Dabbling in temporal transitions ... + prjOwner: + type: string + format: email + description: user email + accessRights: + type: object + description: object containing the GroupID as key and read/write/execution permissions as value + x-patternProperties: + ^\S+$: + type: object + description: the group id + additionalProperties: false + required: + - read + - write + - delete + properties: + read: + type: boolean + description: gives read access + write: + type: boolean + description: gives write access + delete: + type: boolean + description: gives deletion rights + additionalProperties: true + creationDate: + type: string + description: project creation date + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + example: '2018-07-01T11:13:43Z' + lastChangeDate: + type: string + description: last save date + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + example: '2018-07-01T11:13:43Z' + thumbnail: + type: string + minLength: 0 + maxLength: 2083 + format: uri + description: url of the latest screenshot of the project + example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + workbench: + type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': + type: object + additionalProperties: false + required: + - key + - version + - label + properties: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: + - simcore/services/comp/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + version: + type: string + description: semantic version number of the node + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + label: + type: string + description: The short name of the node + example: + - JupyterLab + progress: + type: number + maximum: 100 + minimum: 0 + description: the node progress value + thumbnail: + minLength: 0 + maxLength: 2083 + format: uri + type: string + description: url of the latest screenshot of the node + example: + - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + runHash: + description: the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated + type: + - string + - 'null' + example: + - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 + inputs: + type: object + description: values of input properties + patternProperties: + '^[-_a-zA-Z0-9]+$': + oneOf: + - type: + - integer + - boolean + - string + - number + - 'null' + - type: object + additionalProperties: false + required: + - nodeUuid + - output + properties: + nodeUuid: + type: string + format: uuid + output: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + - type: object + additionalProperties: false + required: + - store + - path + properties: + store: + type: + - string + - integer + dataset: + type: string + path: + type: string + label: + type: string + eTag: + type: string + - type: object + additionalProperties: false + required: + - downloadLink + properties: + downloadLink: + minLength: 1 + maxLength: 65536 + type: string + format: uri + label: + type: string + - type: array + items: {} + inputsUnits: + type: object + description: values of input unit + patternProperties: + '^[-_a-zA-Z0-9]+$': + type: string + example: + - kilo-meter + - milli-second + - micro-gram + - kelvin + inputAccess: + description: map with key - access level pairs + type: object + patternProperties: + '^[-_a-zA-Z0-9]+$': + type: string + enum: + - Invisible + - ReadOnly + - ReadAndWrite + default: ReadAndWrite + example: + - ReadOnly + inputNodes: + type: array + items: + type: string + format: uuid + description: node IDs of where the node is connected to + example: + - nodeUuid1 + - nodeUuid2 + outputs: + default: {} + type: object + patternProperties: + '^[-_a-zA-Z0-9]+$': + oneOf: + - type: + - integer + - boolean + - string + - number + - 'null' + - type: object + additionalProperties: false + required: + - store + - path + properties: + store: + type: + - string + - integer + dataset: + type: string + path: + type: string + label: + type: string + eTag: + type: string + - type: object + additionalProperties: false + required: + - downloadLink + properties: + downloadLink: + minLength: 1 + maxLength: 65536 + type: string + format: uri + label: + type: string + - type: array + items: {} + outputNode: + type: boolean + deprecated: true + outputNodes: + type: array + items: + type: string + format: uuid + description: Used in group-nodes. Node IDs of those connected to the output + example: + - nodeUuid1 + - nodeUuid2 + parent: + type: + - 'null' + - string + format: uuid + description: Parent's (group-nodes') node ID s. + example: + - nodeUuid1 + - nodeUuid2 + position: + type: object + additionalProperties: false + required: + - x + - 'y' + properties: + x: + type: integer + description: The x position + example: + - '12' + 'y': + type: integer + description: The y position + example: + - '15' + deprecated: true + state: + title: NodeState + type: object + properties: + modified: + title: Modified + description: true if the node's outputs need to be re-computed + default: true + type: boolean + dependencies: + title: Dependencies + description: contains the node inputs dependencies if they need to be computed first + type: array + uniqueItems: true + items: + type: string + format: uuid + currentStatus: + description: the node's current state + default: NOT_STARTED + example: + - RUNNING + - FAILED + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + additionalProperties: false + bootOptions: + title: Boot Options + description: 'Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services''s defaults.' + type: object + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + additionalProperties: true + ui: + type: object + additionalProperties: true + properties: + workbench: + type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': + type: object + additionalProperties: false + required: + - position + properties: + position: + type: object + additionalProperties: false + required: + - x + - 'y' + properties: + x: + type: integer + description: The x position + example: + - '12' + 'y': + type: integer + description: The y position + example: + - '15' + marker: + type: object + additionalProperties: false + required: + - color + properties: + color: + type: string + description: Marker's color + example: + - '#FF0000' + - '#0000FF' + additionalProperties: true + slideshow: + type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': + type: object + additionalProperties: false + required: + - position + properties: + position: + type: integer + description: Slide's position + example: + - 0 + - 2 + instructions: + type: + - string + - 'null' + description: Instructions about what to do in this step + example: + - This is a **sleeper** + - 'Please, select the config file defined [in this link](asdf)' + additionalProperties: true + currentNodeId: + type: string + format: uuid + annotations: + type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': + type: object + additionalProperties: false + required: + - type + - color + - attributes + properties: + type: + type: string + description: Annotation type + example: + - rect + - text + color: + type: string + description: Annotation's color + example: + - '#FF0000' + - '#0000FF' + attributes: + type: object + description: svg attributes + additionalProperties: true + tags: + type: array + items: + type: integer + classifiers: + type: array + description: Contains the reference to the project classifiers + items: + type: string + example: 'some:id:to:a:classifier' + dev: + type: object + description: object used for development purposes only + state: + title: State + description: Project state + anyOf: + - nullable: true + - title: ProjectState + type: object + additionalProperties: false + properties: + locked: + title: Locked + description: The project lock state + allOf: + - title: ProjectLocked + type: object + additionalProperties: false + properties: + value: + title: Value + description: True if the project is locked + type: boolean + owner: + title: Owner + description: 'If locked, the user that owns the lock' + allOf: + - title: Owner + type: object + additionalProperties: false + properties: + user_id: + title: User Id + type: integer + description: Owner's identifier when registered in the user's database table + example: + - 2 + first_name: + title: First Name + description: Owner first name + example: + - John + type: string + last_name: + title: Last Name + description: Owner last name + example: + - Smith + type: string + required: + - user_id + - first_name + - last_name + status: + title: Status + description: The status of the project + enum: + - CLOSED + - CLOSING + - CLONING + - OPENING + - EXPORTING + - OPENED + type: string + required: + - value + - status + state: + title: State + description: The project running state + allOf: + - title: ProjectRunningState + type: object + additionalProperties: false + properties: + value: + title: RunningState + description: An enumeration. + enum: + - UNKNOWN + - NOT_STARTED + - PUBLISHED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + required: + - value + required: + - locked + - state + quality: + type: object + title: Quality + description: Object containing Quality Assessment related data + responses: + '202': + description: project created + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + task_id: + type: string + status_href: + type: string + result_href: + type: string + required: + - task_id + - status_href + - result_href + error: + nullable: true + default: null + links: + CreationStatus: + operationId: get_task_status + parameters: + task_id: $response.body#/data/task_id + CreationResult: + operationId: get_task_result + description: Returns 201 if creation succeeded + parameters: + task_id: $response.body#/data/task_id + default: + $ref: '#/components/responses/DefaultErrorResponse' + /projects/active: + get: + tags: + - project + summary: Gets active project + operationId: get_active_project + responses: + '200': + description: returns active project + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + allOf: + - $ref: '#/paths/~1projects/post/requestBody/content/application~1json/schema' + - type: object + properties: + state: + $ref: '#/paths/~1projects~1%7Bproject_id%7D~1state/get/responses/200/content/application~1json/schema/properties/data' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + get: + tags: + - project + summary: Gets given project + operationId: get_project + responses: + '200': + description: got detailed project + content: + application/json: + schema: + $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + put: + tags: + - project + summary: Enclosed entity replaces given project + operationId: replace_project + parameters: + - name: run + in: query + required: false + schema: + type: boolean + requestBody: + content: + application/json: + schema: + $ref: '#/paths/~1projects/post/requestBody/content/application~1json/schema' + responses: + '200': + description: got detailed project + content: + application/json: + schema: + $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - project + summary: Delete given project + operationId: delete_project + responses: + '204': + description: project has been successfully deleted + '/projects/{project_id}:open': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + post: + tags: + - project + summary: Open a given project + operationId: open_project + requestBody: + description: browser tab identifier + required: true + content: + application/json: + schema: + type: string + example: 5ac57685-c40f-448f-8711-70be1936fd63 + responses: + '200': + description: project successfuly opened + content: + application/json: + schema: + $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/state': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + get: + tags: + - project + summary: returns the state of a project + operationId: get_project_state + responses: + '200': + description: returns the project current state + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - locked + properties: + locked: + type: object + description: describes the project lock state + required: + - value + properties: + value: + type: boolean + description: true if the project is locked + owner: + type: object + properties: + first_name: + type: string + last_name: + type: string + required: + - firstName + - lastName + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}:xport': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + post: + tags: + - exporter + summary: creates an archive of the project and downloads it + operationId: export_project + responses: + '200': + description: creates an archive from a project file + content: + application/zip: + schema: + type: string + format: binary + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}:duplicate': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + post: + tags: + - exporter + summary: duplicates an existing project + operationId: duplicate_project + responses: + '200': + description: project was duplicated correctly + content: + application/json: + schema: + type: object + properties: + uuid: + type: string + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects:import': + post: + tags: + - exporter + summary: Create new project from an archive + operationId: import_project + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + fileName: + type: string + format: binary + responses: + '200': + description: creates a new project from an archive + content: + application/json: + schema: + type: object + properties: + uuid: + type: string + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}:close': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + post: + tags: + - project + summary: Closes a given project + operationId: close_project + requestBody: + description: browser tab identifier + required: true + content: + application/json: + schema: + $ref: '#/paths/~1projects~1%7Bproject_id%7D%3Aopen/post/requestBody/content/application~1json/schema' + responses: + '204': + description: project succesfuly closed + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + post: + tags: + - project + summary: Create a new node + operationId: create_node + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + service_id: + type: string + description: the uuid to assign to the service + service_key: + type: string + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + description: The key (url) of the service + service_version: + type: string + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + description: The tag/version of the service + required: + - service_key + - service_version + example: + service_key: simcore/services/dynamic/3d-viewer + service_version: 1.4.0 + responses: + '201': + description: created + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - node_id + properties: + node_id: + type: string + description: The UUID attached to this node + example: 123e4567-e89b-12d3-a456-426655440000 + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes/{node_id}': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + - name: node_id + in: path + required: true + schema: + type: string + get: + tags: + - project + description: Gets node status + operationId: get_node + responses: + '200': + description: OK service exists and runs. Returns node details. + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - published_port + - service_uuid + - service_key + - service_version + - service_host + - service_port + - service_state + - user_id + properties: + published_port: + description: The ports where the service provides its interface + type: integer + format: int32 + minimum: 1 + example: 30000 + entry_point: + description: The entry point where the service provides its interface if specified + type: string + example: /the/entry/point/is/here + service_uuid: + description: The UUID attached to this service + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + service_key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + service_version: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + service_host: + description: service host name within the network + type: string + example: jupyter_E1O2E-LAH + service_port: + description: port to access the service within the network + type: integer + minimum: 1 + example: 8081 + service_basepath: + description: different base path where current service is mounted otherwise defaults to root + type: string + example: /x/E1O2E-LAH + default: '' + service_state: + description: | + the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start + type: string + enum: + - pending + - pulling + - starting + - running + - complete + - failed + service_message: + description: the service message + type: string + example: no suitable node (insufficient resources on 1 node) + user_id: + description: the user that started the service + type: string + example: '123' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - project + description: Stops and removes a node from the project + operationId: delete_node + responses: + '204': + description: node has been successfully deleted from project + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes/{node_id}:retrieve': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + - name: node_id + in: path + required: true + schema: + type: string + post: + tags: + - project + description: Triggers service retrieve + operationId: retrieve_node + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + port_keys: + description: list of por keys to be retrieved + type: array + items: + type: string + responses: + '200': + description: Returns the amount of transferred bytes when pulling data via nodeports + content: + application/json: + schema: + type: object + properties: + data: + type: object + description: response payload + properties: + size_bytes: + type: integer + description: amount of transferred bytes + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes/{node_id}:start': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + - name: node_id + in: path + required: true + schema: + type: string + post: + tags: + - project + description: Starts a project dynamic service + operationId: start_node + responses: + '204': + description: started service (needs to be long running though) + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes/{node_id}:stop': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + - name: node_id + in: path + required: true + schema: + type: string + post: + tags: + - project + description: Stops a project node + operationId: stop_node + responses: + '204': + description: stopped service + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes/{node_id}:restart': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + - name: node_id + in: path + required: true + schema: + type: string + post: + tags: + - project + description: Restarts containers started by the dynamic-sidecar + operationId: restart_node + responses: + '204': + description: Restarts containers started by the dynamic-sidecar + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/nodes/{node_id}/resources': + parameters: + - name: project_id + in: path + required: true + schema: + type: string + - name: node_id + in: path + required: true + schema: + type: string + get: + tags: + - project + description: Returns the node resources + operationId: get_node_resources + responses: + '200': + description: Returns the node resources. + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + $ref: '#/paths/~1projects~1%7Bproject_id%7D~1nodes~1%7Bnode_id%7D~1resources/put/requestBody/content/application~1json/schema' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + put: + tags: + - project + description: Replaces the node resources + operationId: replace_node_resources + requestBody: + required: true + content: + application/json: + schema: + type: object + additionalProperties: + type: object + required: + - limit + - reservation + properties: + limit: + anyOf: + - type: integer + - type: number + - type: string + reservation: + anyOf: + - type: integer + - type: number + - type: string + responses: + '200': + description: Returns the udpated node resources. + content: + application/json: + schema: + $ref: '#/paths/~1projects~1%7Bproject_id%7D~1nodes~1%7Bnode_id%7D~1resources/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_id}/inputs': + get: + tags: + - project + summary: Get Project Inputs + description: New in version *0.10* + operationId: get_project_inputs + parameters: + - required: true + schema: + title: Project Id + type: string + format: uuid + name: project_id + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[dict[uuid.UUID, simcore_service_webserver.projects.projects_ports_handlers.ProjectInputGet]]' + type: object + properties: + data: + title: Data + type: object + additionalProperties: + title: ProjectInputGet + required: + - key + - value + - label + type: object + properties: + key: + title: Key + type: string + description: Project port's unique identifer. Same as the UUID of the associated port node + format: uuid + value: + title: Value + description: Value assigned to this i/o port + label: + title: Label + type: string + error: + title: Error + patch: + tags: + - project + summary: Update Project Inputs + description: New in version *0.10* + operationId: update_project_inputs + parameters: + - required: true + schema: + title: Project Id + type: string + format: uuid + name: project_id + in: path + requestBody: + content: + application/json: + schema: + title: Updates + type: array + items: + title: ProjectInputUpdate + required: + - key + - value + type: object + properties: + key: + title: Key + type: string + description: Project port's unique identifer. Same as the UUID of the associated port node + format: uuid + value: + title: Value + description: Value assigned to this i/o port + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1projects~1%7Bproject_id%7D~1inputs/get/responses/200/content/application~1json/schema' + '/projects/{project_id}/outputs': + get: + tags: + - project + summary: Get Project Outputs + description: New in version *0.10* + operationId: get_project_outputs + parameters: + - required: true + schema: + title: Project Id + type: string + format: uuid + name: project_id + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[dict[uuid.UUID, simcore_service_webserver.projects.projects_ports_handlers.ProjectOutputGet]]' + type: object + properties: + data: + title: Data + type: object + additionalProperties: + title: ProjectOutputGet + required: + - key + - value + - label + type: object + properties: + key: + title: Key + type: string + description: Project port's unique identifer. Same as the UUID of the associated port node + format: uuid + value: + title: Value + description: Value assigned to this i/o port + label: + title: Label + type: string + error: + title: Error + '/projects/{project_id}/metadata/ports': + get: + tags: + - project + summary: List Project Metadata Ports + description: New in version *0.12* + operationId: list_project_metadata_ports + parameters: + - required: true + schema: + title: Project Id + type: string + format: uuid + name: project_id + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[list[simcore_service_webserver.projects.projects_ports_handlers.ProjectMetadataPortGet]]' + type: object + properties: + data: + title: Data + type: array + items: + title: ProjectMetadataPortGet + required: + - key + - kind + type: object + properties: + key: + title: Key + type: string + description: Project port's unique identifer. Same as the UUID of the associated port node + format: uuid + kind: + title: Kind + enum: + - input + - output + type: string + content_schema: + title: Content Schema + type: object + description: 'jsonschema for the port''s value. SEE https://json-schema.org/understanding-json-schema/' + error: + title: Error + '/nodes/{nodeInstanceUUID}/outputUi/{outputKey}': + get: + tags: + - node + description: get a json description of the ui for presenting the output within the mainUi and a list of open api json schema objects describing the possible json payloads and responses for the api calls available at this endpoint + operationId: get_node_output_ui + parameters: + - $ref: '#/paths/~1nodes~1%7BnodeInstanceUUID%7D~1iframe/get/parameters/0' + - in: path + name: outputKey + required: true + schema: + type: string + responses: + '200': + description: Service Information + content: + application/json: + schema: + type: object + properties: + plugin: + type: string + config: + type: object + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '/nodes/{nodeInstanceUUID}/outputUi/{outputKey}/{apiCall}': + post: + tags: + - node + summary: send data back to the output api ... protocol depends on the definition + operationId: send_to_node_output_api + parameters: + - $ref: '#/paths/~1nodes~1%7BnodeInstanceUUID%7D~1iframe/get/parameters/0' + - $ref: '#/paths/~1nodes~1%7BnodeInstanceUUID%7D~1outputUi~1%7BoutputKey%7D/get/parameters/1' + - in: path + name: apiCall + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + oneOf: + - description: oa3 json schema description of the request structure + type: object + required: + - start + - count + properties: + start: + type: integer + count: + type: integer + filter: + type: string + orderBy: + type: string + - type: object + required: + - key + properties: + key: + type: string + - description: | + oa3 json schema description of the request structure. + If no `rootKey` is specified, the first level of the tree is returned. + The `filter` will return any items matching the filter string as well as any + folder items containing matching items further down the tree. + type: object + properties: + rootKey: + type: string + filter: + type: string + - type: object + required: + - key + properties: + key: + type: string + responses: + default: + description: node type specific api call according to the node type presented + content: + application/json: + schema: + oneOf: + - type: array + items: + type: object + properties: + key: + type: string + label: + type: string + thumbnail: + description: 'data url - https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs' + type: string + - type: object + - type: array + items: + type: object + properties: + key: + type: string + label: + type: string + folder: + type: boolean + - type: object + '/nodes/{nodeInstanceUUID}/iframe': + get: + tags: + - node + summary: entry point for iframe interaction with the node. This relies on the reverse proxy code. + operationId: get_node_output_iframe + parameters: + - in: path + name: nodeInstanceUUID + required: true + schema: + type: string + responses: + default: + description: any response appropriate in the iframe context + '/projects/{study_uuid}/tags/{tag_id}': + parameters: + - name: tag_id + in: path + required: true + schema: + type: integer + - name: study_uuid + in: path + required: true + schema: + type: string + put: + tags: + - project + summary: Links an existing label with an existing study + operationId: add_tag + responses: + '200': + description: The tag has been successfully linked to the study + content: + application/json: + schema: + $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - project + summary: Removes an existing link between a label and a study + operationId: remove_tag + responses: + '200': + description: The tag has been successfully removed from the study + content: + application/json: + schema: + $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/projects/{project_uuid}/checkpoint/{ref_id}/iterations': + get: + tags: + - meta-projects + summary: List Project Iterations + description: Lists current project's iterations + operationId: simcore_service_webserver.meta_modeling_handlers._list_meta_project_iterations_handler + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + - required: true + schema: + title: Ref Id + anyOf: + - type: integer + - type: string + name: ref_id + in: path + - description: index to the first item to return (pagination) + required: false + schema: + title: Offset + exclusiveMinimum: false + type: integer + description: index to the first item to return (pagination) + default: 0 + minimum: 0 + name: offset + in: query + - description: maximum number of items to return (pagination) + required: false + schema: + title: Limit + maximum: 50 + minimum: 1 + type: integer + description: maximum number of items to return (pagination) + default: 20 + name: limit + in: query + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Page[IterationItem]' + required: + - _meta + - _links + - data + type: object + properties: + _meta: + title: PageMetaInfoLimitOffset + required: + - total + - count + type: object + properties: + limit: + title: Limit + exclusiveMinimum: true + type: integer + default: 20 + minimum: 0 + total: + title: Total + minimum: 0 + type: integer + offset: + title: Offset + minimum: 0 + type: integer + default: 0 + count: + title: Count + minimum: 0 + type: integer + _links: + title: PageLinks + required: + - self + - first + - last + type: object + properties: + self: + title: Self + maxLength: 65536 + minLength: 1 + type: string + format: uri + first: + title: First + maxLength: 65536 + minLength: 1 + type: string + format: uri + prev: + title: Prev + maxLength: 65536 + minLength: 1 + type: string + format: uri + next: + title: Next + maxLength: 65536 + minLength: 1 + type: string + format: uri + last: + title: Last + maxLength: 65536 + minLength: 1 + type: string + format: uri + additionalProperties: false + data: + title: Data + type: array + items: + title: IterationItem + required: + - name + - parent + - workcopy_project_id + - workcopy_project_url + - url + type: object + properties: + name: + title: Name + type: string + description: 'Iteration''s resource name [AIP-122](https://google.aip.dev/122)' + parent: + title: Parent + allOf: + - title: ParentMetaProjectRef + required: + - project_id + - ref_id + type: object + properties: + project_id: + title: Project Id + type: string + format: uuid + ref_id: + title: Ref Id + type: integer + description: Reference to the the meta-project that defines this iteration + workcopy_project_id: + title: Workcopy's Project Id + type: string + description: ID to this iteration's working copy.A working copy is a real project where this iteration is run + format: uuid + workcopy_project_url: + title: Workcopy's Project Url + maxLength: 2083 + minLength: 1 + type: string + format: uri + url: + title: Url + maxLength: 2083 + minLength: 1 + type: string + format: uri + '404': + description: This project has no iterations.Only meta-project have iterations and they must be explicitly created. + '422': + description: Validation Error + content: + application/json: + schema: + title: HTTPValidationError + type: object + properties: + detail: + title: Detail + type: array + items: + title: ValidationError + required: + - loc + - msg + - type + type: object + properties: + loc: + title: Location + type: array + items: + type: string + msg: + title: Message + type: string + type: + title: Error Type + type: string + '/projects/{project_uuid}/checkpoint/{ref_id}/iterations/{iter_id}': + get: + tags: + - meta-projects + summary: Get Project Iterations + description: Get current project's iterations + operationId: simcore_service_webserver.meta_modeling_handlers._get_meta_project_iterations_handler + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + - required: true + schema: + title: Ref Id + anyOf: + - type: integer + - type: string + name: ref_id + in: path + - required: true + name: iter_id + schema: + type: integer + in: path + responses: + '200': + description: Successful Response + '/projects/{project_uuid}/checkpoint/{ref_id}/iterations/-/results': + get: + tags: + - meta-projects + summary: List Project Iterations Results + description: Lists current project's iterations results table + operationId: simcore_service_webserver.meta_modeling_handlers._list_meta_project_iterations_results_handler + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + - required: true + schema: + title: Ref Id + anyOf: + - type: integer + - type: string + name: ref_id + in: path + - description: index to the first item to return (pagination) + required: false + schema: + title: Offset + exclusiveMinimum: false + type: integer + description: index to the first item to return (pagination) + default: 0 + minimum: 0 + name: offset + in: query + - description: maximum number of items to return (pagination) + required: false + schema: + title: Limit + maximum: 50 + minimum: 1 + type: integer + description: maximum number of items to return (pagination) + default: 20 + name: limit + in: query + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Page[IterationResultItem]' + required: + - _meta + - _links + - data + type: object + properties: + _meta: + $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/200/content/application~1json/schema/properties/_meta' + _links: + $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/200/content/application~1json/schema/properties/_links' + data: + title: Data + type: array + items: + $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/200/content/application~1json/schema/properties/data/items' + '404': + description: This project has no iterations.Only meta-project have iterations and they must be explicitly created. + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/422/content/application~1json/schema' + '/projects/{project_uuid}/checkpoint/{ref_id}/iterations/{iter_id}/results': + get: + tags: + - meta-projects + summary: Get Project Iteration Results + description: Get current project's iterations + operationId: simcore_service_webserver.meta_modeling_handlers._get_meta_project_iteration_results_handler + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + - required: true + schema: + title: Ref Id + anyOf: + - type: integer + - type: string + name: ref_id + in: path + - required: true + schema: + type: integer + name: iter_id + in: path + responses: + '200': + description: Successful Response + /repos/projects: + get: + tags: + - repository + summary: List Repos + description: List info about versioned projects + operationId: simcore_service_webserver.version_control_handlers._list_repos_handler + parameters: + - description: index to the first item to return (pagination) + required: false + schema: + title: Offset + exclusiveMinimum: false + type: integer + description: index to the first item to return (pagination) + default: 0 + name: offset + in: query + - description: maximum number of items to return (pagination) + required: false + schema: + title: Limit + maximum: 50 + minimum: 1 + type: integer + description: maximum number of items to return (pagination) + default: 20 + name: limit + in: query + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Page[Repo]' + required: + - _meta + - _links + - data + type: object + properties: + _meta: + title: PageMetaInfoLimitOffset + required: + - limit + - total + - count + type: object + properties: + limit: + title: Limit + exclusiveMinimum: false + type: integer + total: + title: Total + minimum: 0 + type: integer + offset: + title: Offset + minimum: 0 + type: integer + default: 0 + count: + title: Count + minimum: 0 + type: integer + additionalProperties: false + _links: + title: PageLinks + required: + - self + - first + - last + type: object + properties: + self: + title: Self + maxLength: 65536 + minLength: 1 + type: string + format: uri + first: + title: First + maxLength: 65536 + minLength: 1 + type: string + format: uri + prev: + title: Prev + maxLength: 65536 + minLength: 1 + type: string + format: uri + next: + title: Next + maxLength: 65536 + minLength: 1 + type: string + format: uri + last: + title: Last + maxLength: 65536 + minLength: 1 + type: string + format: uri + additionalProperties: false + data: + title: Data + type: array + items: + title: Repo + required: + - project_uuid + - url + type: object + properties: + project_uuid: + title: Project Uuid + type: string + format: uuid + url: + title: Url + maxLength: 2083 + minLength: 1 + type: string + format: uri + '422': + description: Validation Error + content: + application/json: + schema: + title: HTTPValidationError + type: object + properties: + detail: + title: Detail + type: array + items: + title: ValidationError + required: + - loc + - msg + - type + type: object + properties: + loc: + title: Location + type: array + items: + type: string + msg: + title: Message + type: string + type: + title: Error Type + type: string + '/repos/projects/{project_uuid}/checkpoints': + get: + tags: + - repository + summary: List Checkpoints + description: Lists commits&tags tree of the project + operationId: simcore_service_webserver.version_control_handlers._list_checkpoints_handler + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + - description: index to the first item to return (pagination) + required: false + schema: + title: Offset + exclusiveMinimum: false + type: integer + description: index to the first item to return (pagination) + default: 0 + name: offset + in: query + - description: maximum number of items to return (pagination) + required: false + schema: + title: Limit + maximum: 50 + minimum: 1 + type: integer + description: maximum number of items to return (pagination) + default: 20 + name: limit + in: query + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Page[Checkpoint]' + required: + - _meta + - _links + - data + type: object + properties: + _meta: + $ref: '#/paths/~1repos~1projects/get/responses/200/content/application~1json/schema/properties/_meta' + _links: + $ref: '#/paths/~1repos~1projects/get/responses/200/content/application~1json/schema/properties/_links' + data: + title: Data + type: array + items: + $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema/properties/data' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + post: + tags: + - repository + summary: Create Checkpoint + operationId: simcore_service_webserver.version_control_handlers._create_checkpoint_handler + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + requestBody: + content: + application/json: + schema: + title: CheckpointNew + required: + - tag + type: object + properties: + tag: + title: Tag + type: string + message: + title: Message + type: string + required: true + responses: + '201': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[Checkpoint]' + type: object + properties: + data: + title: Checkpoint + required: + - id + - checksum + - tag + - message + - parent + - created_at + - url + type: object + properties: + id: + title: Id + exclusiveMinimum: false + type: integer + checksum: + title: Checksum + type: string + tag: + title: Tag + type: string + message: + title: Message + type: string + parent: + title: Parent + exclusiveMinimum: false + type: integer + created_at: + title: Created At + type: string + format: date-time + url: + title: Url + maxLength: 2083 + minLength: 1 + type: string + format: uri + error: + title: Error + required: + - code + - message + type: object + properties: + code: + title: Code + type: integer + message: + title: Message + type: string + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + '/repos/projects/{project_uuid}/checkpoints/HEAD': + get: + tags: + - repository + summary: Gets HEAD (i.e. current) checkpoint + description: Get current commit + operationId: simcore_service_webserver.version_control_handlers._get_checkpoint_handler_head + parameters: + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + '/repos/projects/{project_uuid}/checkpoints/{ref_id}': + get: + tags: + - repository + summary: Get Checkpoint + description: Set ref_id=HEAD to return current commit + operationId: simcore_service_webserver.version_control_handlers._get_checkpoint_handler + parameters: + - description: 'A repository ref (commit, tag or branch)' + required: true + schema: + title: Ref Id + anyOf: + - type: string + format: uuid + - type: string + description: 'A repository ref (commit, tag or branch)' + name: ref_id + in: path + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + patch: + tags: + - repository + summary: Update Checkpoint Annotations + operationId: simcore_service_webserver.version_control_handlers._update_checkpoint_annotations_handler + parameters: + - description: 'A repository ref (commit, tag or branch)' + required: true + schema: + title: Ref Id + anyOf: + - type: string + format: uuid + - type: string + description: 'A repository ref (commit, tag or branch)' + name: ref_id + in: path + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + requestBody: + content: + application/json: + schema: + title: CheckpointAnnotations + type: object + properties: + tag: + title: Tag + type: string + message: + title: Message + type: string + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + '/repos/projects/{project_uuid}/checkpoints/{ref_id}:checkout': + post: + tags: + - repository + summary: Checkout + description: |- + Affect current working copy of the project, i.e. get_project will now return + the check out + operationId: simcore_service_webserver.version_control_handlers._checkout_handler + parameters: + - description: 'A repository ref (commit, tag or branch)' + required: true + schema: + title: Ref Id + anyOf: + - type: string + format: uuid + - type: string + description: 'A repository ref (commit, tag or branch)' + name: ref_id + in: path + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + '/repos/projects/{project_uuid}/checkpoints/{ref_id}/workbench/view': + get: + tags: + - repository + summary: View Project Workbench + description: Returns a view of the workbench for a given project's version + operationId: simcore_service_webserver.version_control_handlers._view_project_workbench_handler + parameters: + - description: 'A repository ref (commit, tag or branch)' + required: true + schema: + title: Ref Id + anyOf: + - type: string + format: uuid + - type: string + description: 'A repository ref (commit, tag or branch)' + name: ref_id + in: path + - description: Project unique identifier + required: true + schema: + title: Project Uuid + type: string + description: Project unique identifier + format: uuid + name: project_uuid + in: path + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[WorkbenchView]' + type: object + properties: + data: + title: WorkbenchView + type: object + properties: + workbench: + title: Workbench + type: object + additionalProperties: + title: Node + required: + - key + - version + - label + - inputs + - outputs + type: object + properties: + key: + title: Key + type: string + version: + title: Version + pattern: \d+\.\d+\.\d+ + type: string + label: + title: Label + type: string + inputs: + title: Inputs + type: object + outputs: + title: Outputs + type: object + default: {} + ui: + title: Ui + type: object + default: {} + description: A view (i.e. read-only and visual) of the project's workbench + error: + $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema/properties/error' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' + /activity/status: + get: + operationId: get_status + tags: + - activity + responses: + '200': + description: 'Object containing queuing, CPU and Memory usage/limits information of services' + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + additionalProperties: true + type: object + properties: + stats: + type: object + properties: + cpuUsage: + type: number + minimum: 0 + memoryUsage: + type: number + limits: + type: object + properties: + cpus: + type: number + mem: + type: number + queued: + type: boolean + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + /tags: + get: + tags: + - tag + summary: List Tags + operationId: list_tags + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[list[simcore_service_webserver.tags_handlers.TagGet]]' + type: object + properties: + data: + title: Data + type: array + items: + $ref: '#/paths/~1tags/post/responses/200/content/application~1json/schema/properties/data' + error: + title: Error + post: + tags: + - tag + summary: Create Tag + operationId: create_tag + requestBody: + content: + application/json: + schema: + title: TagCreate + required: + - name + - color + type: object + properties: + name: + title: Name + type: string + description: + title: Description + type: string + color: + title: Color + pattern: '^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$' + type: string + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + title: 'Envelope[TagGet]' + type: object + properties: + data: + title: TagGet + required: + - id + - name + - color + - accessRights + type: object + properties: + id: + title: Id + exclusiveMinimum: true + type: integer + minimum: 0 + name: + title: Name + type: string + description: + title: Description + type: string + color: + title: Color + type: string + accessRights: + title: TagAccessRights + required: + - read + - write + - delete + type: object + properties: + read: + title: Read + type: boolean + write: + title: Write + type: boolean + delete: + title: Delete + type: boolean + error: + title: Error + '/tags/{tag_id}': + delete: + tags: + - tag + summary: Delete Tag + operationId: delete_tag + parameters: + - required: true + schema: + title: Tag Id + type: integer + name: tag_id + in: path + responses: + '204': + description: Successful Response + patch: + tags: + - tag + summary: Update Tag + operationId: update_tag + parameters: + - required: true + schema: + title: Tag Id + type: integer + name: tag_id + in: path + requestBody: + content: + application/json: + schema: + title: TagUpdate + type: object + properties: + name: + title: Name + type: string + description: + title: Description + type: string + color: + title: Color + pattern: '^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$' + type: string + additionalProperties: false + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1tags/post/responses/200/content/application~1json/schema' + /publications/service-submission: + post: + tags: + - publication + summary: Submits a new service candidate + operationId: service_submission + requestBody: + content: + multipart/form-data: + schema: + type: object + required: + - metadata + properties: + metadata: + type: string + format: binary + attachment: + type: string + format: binary + responses: + '204': + description: Submission has been registered + default: + $ref: '#/components/responses/DefaultErrorResponse' + /catalog/dags: + get: + tags: + - catalog + operationId: list_catalog_dags + responses: + '200': + description: List of catalog dags + '422': + description: Validation Error + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + tags: + - catalog + summary: Creates a new dag in catalog + operationId: create_catalog_dag + requestBody: + content: + application/json: + schema: + type: object + additionalProperties: true + responses: + '201': + description: The dag was successfully created + '422': + description: Validation Error + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/catalog/dags/{dag_id}': + parameters: + - in: path + name: dag_id + required: true + schema: + title: Dag Id + type: integer + put: + tags: + - catalog + summary: Replaces a dag in catalog + operationId: replace_catalog_dag + requestBody: + content: + application/json: + schema: + type: object + additionalProperties: true + responses: + '200': + description: The dag was replaced in catalog + '422': + description: Validation Error + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - catalog + summary: Deletes an existing dag + operationId: delete_catalog_dag + responses: + '204': + description: Successfully deleted + '422': + description: Validation Error + /catalog/services: + get: + tags: + - catalog + summary: List Services + operationId: list_services_handler + responses: + '200': + description: Returns list of services from the catalog + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/catalog/services/{service_key}/{service_version}': + parameters: + - in: path + name: service_key + required: true + schema: + title: Service key + type: string + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + - in: path + name: service_version + required: true + schema: + title: Service version + type: string + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + get: + tags: + - catalog + summary: Get Service + operationId: get_service_handler + responses: + '200': + description: Returns service + default: + $ref: '#/components/responses/DefaultErrorResponse' + patch: + tags: + - catalog + summary: Update Service + operationId: update_service_handler + requestBody: + content: + application/json: + schema: + type: object + additionalProperties: true + responses: + '200': + description: Returns modified service + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/catalog/services/{service_key}/{service_version}/inputs': + get: + tags: + - catalog + operationId: list_service_inputs_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + responses: + '200': + content: + application/json: + schema: + additionalProperties: false + description: Metadata on a service input port + example: + defaultValue: 0 + description: Time to wait before completion + displayOrder: 2 + keyId: input_2 + label: Sleep Time + type: number + unit: second + unitLong: seconds + unitShort: sec + widget: + details: + minHeight: 1 + type: TextArea + properties: + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + description: use this to numerically sort the properties for display + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + title: Filetokeymap + type: object + keyId: + description: Unique name identifier for this input + pattern: '^[-_a-zA-Z0-9]+$' + title: Keyid + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + pattern: '^(number|integer|boolean|string|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + unitLong: + description: 'Long name of the unit, if available' + title: Unitlong + type: string + unitShort: + description: 'Short name for the unit, if available' + title: Unitshort + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + x-exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - displayOrder + - label + - description + - type + - keyId + title: ServiceInputApiOut + type: object + description: Successful Response + '422': + content: + application/json: + schema: + properties: + detail: + items: + properties: + loc: + items: + type: string + title: Location + type: array + msg: + title: Message + type: string + type: + title: Error Type + type: string + required: + - loc + - msg + - type + title: ValidationError + type: object + title: Detail + type: array + title: HTTPValidationError + type: object + description: Validation Error + summary: List Service Inputs + '/catalog/services/{service_key}/{service_version}/inputs/{input_key}': + get: + tags: + - catalog + operationId: get_service_input_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + - in: path + name: input_key + required: true + schema: + pattern: '^[-_a-zA-Z0-9]+$' + title: Input Key + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/200/content/application~1json/schema' + description: Successful Response + '422': + content: + application/json: + schema: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' + description: Validation Error + summary: Get Service Input + '/catalog/services/{service_key}/{service_version}/inputs:match': + get: + tags: + - catalog + description: 'Filters inputs of this service that match a given service output. Returns compatible input ports of the service, provided an output port of a connected node.' + operationId: get_compatible_inputs_given_source_output_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + - in: query + name: fromService + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Fromservice + type: string + - in: query + name: fromVersion + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Fromversion + type: string + - in: query + name: fromOutput + required: true + schema: + pattern: '^[-_a-zA-Z0-9]+$' + title: Fromoutput + type: string + responses: + '200': + content: + application/json: + schema: + items: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Response Get Compatible Inputs Given Source Output Catalog Services Service Key Service Version Inputs Match Get + type: array + description: Successful Response + '422': + content: + application/json: + schema: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' + description: Validation Error + summary: Get Compatible Inputs Given Source Output + '/catalog/services/{service_key}/{service_version}/outputs': + get: + tags: + - catalog + operationId: list_service_outputs_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + responses: + '200': + content: + application/json: + schema: + items: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1outputs~1%7Boutput_key%7D/get/responses/200/content/application~1json/schema' + title: Response List Service Outputs Catalog Services Service Key Service Version Outputs Get + type: array + description: Successful Response + '422': + content: + application/json: + schema: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' + description: Validation Error + summary: List Service Outputs + '/catalog/services/{service_key}/{service_version}/outputs/{output_key}': + get: + tags: + - catalog + operationId: get_service_output_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + - in: path + name: output_key + required: true + schema: + pattern: '^[-_a-zA-Z0-9]+$' + title: Output Key + type: string + responses: + '200': + content: + application/json: + schema: + additionalProperties: false + description: Metadata on a service input or output port + example: + defaultValue: 0 + description: Time to wait before completion + displayOrder: 2 + keyId: input_2 + label: Sleep Time + type: number + unit: second + unitLong: seconds + unitShort: sec + widget: + details: + minHeight: 1 + type: TextArea + properties: + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + description: use this to numerically sort the properties for display + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + title: Filetokeymap + type: object + keyId: + description: Unique name identifier for this input + pattern: '^[-_a-zA-Z0-9]+$' + title: Keyid + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + pattern: '^(number|integer|boolean|string|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + unitLong: + description: 'Long name of the unit, if available' + title: Unitlong + type: string + unitShort: + description: 'Short name for the unit, if available' + title: Unitshort + type: string + widget: + allOf: + - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/200/content/application~1json/schema/properties/widget/allOf/0' + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - displayOrder + - label + - description + - type + - keyId + title: ServiceOutputApiOut + type: object + description: Successful Response + '422': + content: + application/json: + schema: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' + description: Validation Error + summary: Get Service Output + '/catalog/services/{service_key}/{service_version}/outputs:match': + get: + tags: + - catalog + description: Filters outputs of this service that match a given service input. Returns compatible output port of a connected node for a given input + operationId: get_compatible_outputs_given_target_input_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + - in: query + name: toService + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Toservice + type: string + - in: query + name: toVersion + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Toversion + type: string + - in: query + name: toInput + required: true + schema: + pattern: '^[-_a-zA-Z0-9]+$' + title: Toinput + type: string + responses: + '200': + content: + application/json: + schema: + items: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Response Get Compatible Outputs Given Target Input Catalog Services Service Key Service Version Outputs Match Get + type: array + description: Successful Response + '422': + content: + application/json: + schema: + $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' + description: Validation Error + summary: Get Compatible Outputs Given Target Input + '/catalog/services/{service_key}/{service_version}/resources': + get: + tags: + - catalog + description: Returns the service default resources + operationId: get_service_resources_handler + parameters: + - in: path + name: service_key + required: true + schema: + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Service Key + type: string + - in: path + name: service_version + required: true + schema: + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Service Version + type: string + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/paths/~1projects~1%7Bproject_id%7D~1nodes~1%7Bnode_id%7D~1resources/get/responses/200/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/clusters:ping': + post: + summary: test connectivity with cluster + operationId: ping_cluster_handler + tags: + - cluster + requestBody: + required: true + description: the cluster endpoint/authentication to test + content: + application/json: + schema: + type: object + properties: + endpoint: + type: string + minLength: 1 + maxLength: 65536 + authentication: + description: Dask gateway authentication + anyOf: + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/0' + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/1' + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/2' + required: + - endpoint + - authentication + additionalProperties: false + responses: + '204': + description: connectivity is OK + default: + $ref: '#/components/responses/DefaultErrorResponse' + /clusters: + get: + summary: List my clusters + operationId: list_clusters_handler + tags: + - cluster + responses: + '200': + description: list of the clusters I have access to + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + $ref: '#/paths/~1clusters/post/responses/201/content/application~1json/schema/properties/data' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + post: + summary: Create a new cluster + operationId: create_cluster_handler + tags: + - cluster + requestBody: + required: true + description: the cluster to create + content: + application/json: + schema: + type: object + properties: + name: + description: the cluster name + type: string + description: + description: the cluster description + type: string + type: + description: the cluster type + type: string + enum: + - ON_PREMISE + - AWS + thumbnail: + type: string + endpoint: + type: string + minLength: 1 + maxLength: 65536 + authentication: + description: Dask gateway authentication + anyOf: + - type: object + properties: + type: + type: string + enum: + - simple + default: simple + username: + type: string + password: + type: string + writeOnly: true + required: + - username + - password + additionalProperties: false + - type: object + properties: + type: + type: string + enum: + - kerberos + default: kerberos + additionalProperties: false + - type: object + properties: + type: + type: string + enum: + - jupyterhub + default: jupyterhub + api_token: + type: string + required: + - api_token + additionalProperties: false + required: + - name + - type + - endpoint + - authentication + additionalProperties: false + responses: + '201': + description: cluster created + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + id: + description: the cluster id + type: integer + minimum: 1 + name: + description: the cluster name + type: string + description: + description: the cluster description + type: string + type: + description: the cluster type + type: string + enum: + - ON_PREMISE + - AWS + owner: + description: the cluster owner group + type: integer + minimum: 1 + thumbnail: + type: string + format: uri + endpoint: + type: string + minLength: 1 + maxLength: 65536 + authentication: + description: Dask gateway authentication + anyOf: + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/0' + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/1' + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/2' + accessRights: + type: object + description: object containing the GroupID as key and read/write/execution permissions as value + x-patternProperties: + ^\S+$: + $ref: '#/paths/~1clusters~1%7Bcluster_id%7D/patch/requestBody/content/application~1json/schema/properties/accessRights/x-patternProperties/%5E%5CS%2B%24' + required: + - id + - name + - accessRights + - endpoint + - authentication + additionalProperties: false + example: + - id: 1 + name: AWS cluster + type: AWS + endpoint: 'https://registry.osparc-development.fake.dev' + authentication: + type: simple + username: someuser + password: somepassword + owner: 2 + accessRights: + '2': + read: true + write: true + delete: true + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/clusters/{cluster_id}': + parameters: + - name: cluster_id + in: path + required: true + schema: + type: string + get: + tags: + - cluster + summary: Gets one cluster + operationId: get_cluster_handler + responses: + '200': + description: got cluster + content: + application/json: + schema: + $ref: '#/paths/~1clusters/post/responses/201/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + patch: + summary: Update one cluster + operationId: update_cluster_handler + tags: + - cluster + requestBody: + required: true + description: the cluster to update + content: + application/json: + schema: + type: object + properties: + name: + description: the cluster name + type: string + description: + description: the cluster description + type: string + type: + description: the cluster type + type: string + enum: + - ON_PREMISE + - AWS + owner: + description: the cluster owner group + type: integer + minimum: 1 + thumbnail: + type: string + endpoint: + type: string + minLength: 1 + maxLength: 65536 + authentication: + description: Dask gateway authentication + anyOf: + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/0' + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/1' + - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/2' + accessRights: + type: object + description: object containing the GroupID as key and read/write/execution permissions as value + x-patternProperties: + ^\S+$: + description: defines acesss rights for the cluster + type: object + properties: + read: + type: boolean + description: allows usage of the cluster + write: + type: boolean + description: allows modification of the cluster + delete: + type: boolean + description: allows deletion of the cluster + required: + - read + - write + - delete + additionalProperties: false + responses: + '200': + description: the modified cluster + content: + application/json: + schema: + $ref: '#/paths/~1clusters/post/responses/201/content/application~1json/schema' + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + tags: + - cluster + summary: Deletes one cluster + operationId: delete_cluster_handler + responses: + '204': + description: cluster has been successfully deleted + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/clusters/{cluster_id}:ping': + parameters: + - name: cluster_id + in: path + required: true + schema: + type: string + post: + summary: test connectivity with cluster + operationId: ping_cluster_cluster_id_handler + tags: + - cluster + responses: + '204': + description: connectivity is OK + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/clusters/{cluster_id}/details': + parameters: + - name: cluster_id + in: path + required: true + schema: + type: string + get: + tags: + - cluster + summary: Gets one cluster details + operationId: get_cluster_details_handler + responses: + '200': + description: got cluster + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + scheduler: + type: object + description: contains information about the cluster scheduler + cluster: + type: object + description: contains information about the cluster workers + dashboardLink: + type: string + minLength: 1 + maxLength: 65536 + description: contains the link to the cluster dashboard + required: + - scheduler + - cluster + - dashboardLink + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + /tasks: + get: + operationId: list_tasks + tags: + - tasks + responses: + '200': + description: Returns the list of active tasks (running and/or done) + content: + application/json: + schema: + type: array + items: + $ref: '#/paths/~1projects/post/responses/202/content/application~1json/schema' + '/tasks/{task_id}': + parameters: + - name: task_id + in: path + required: true + schema: + type: string + get: + operationId: get_task_status + tags: + - tasks + responses: + '200': + description: Returns the task status + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - task_progress + - done + - started + properties: + task_progress: + type: number + minimum: 0 + maximum: 1 + done: + type: boolean + started: + type: string + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + example: '2018-07-01T11:13:43Z' + error: + nullable: true + default: null + default: + $ref: '#/components/responses/DefaultErrorResponse' + delete: + operationId: cancel_and_delete_task + description: Aborts and remove the task + tags: + - tasks + responses: + '204': + description: Task was successfully aborted + default: + $ref: '#/components/responses/DefaultErrorResponse' + '/tasks/{task_id}/result': + parameters: + - name: task_id + in: path + required: true + schema: + type: string + get: + operationId: get_task_result + tags: + - tasks + responses: + 2XX: + description: Retrieve the task result and returns directly its HTTP code + default: + $ref: '#/components/responses/DefaultErrorResponse' + /viewers: + get: + operationId: list_viewers + parameters: + - in: query + name: file_type + required: false + schema: + title: File Type + description: Filters list to viewers supporting that filetype + type: string + responses: + '200': + content: + application/json: + schema: + properties: + data: + items: + $ref: '#/paths/~1viewers~1default/get/responses/200/content/application~1json/schema/properties/data' + type: array + required: + - data + title: ViewerListEnveloped + type: object + description: Successful Response + summary: Lists viewers + description: Lists all publicaly available viewers. Notice that this might contain multiple services for the same filetype + tags: + - viewer + /viewers/default: + get: + operationId: list_default_viewers + parameters: + - in: query + name: file_type + required: false + schema: + title: File Type + description: Filters list to viewers supporting that filetype + type: string + responses: + '200': + content: + application/json: + schema: + properties: + data: + properties: + file_type: + title: File Type + type: string + description: Identifier for the file type + view_url: + description: 'Base url to execute viewer. Needs appending file_size,[file_name] and download_link as query parameters' + format: uri + maxLength: 2083 + minLength: 1 + title: Redirection Url + type: string + title: + description: Short formatted label with name and version of the viewer + title: Viewer Title + type: string + required: + - file_type + - viewer_title + - view_url + title: Viewer + type: object + required: + - data + title: ViewerEnveloped + type: object + description: Successful Response + summary: List Default Viewers + description: Lists a default viewer for each supported filetype. Only publicaly available viewers. + tags: + - viewer +components: + responses: + DefaultErrorResponse: + description: Default http error response body + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + nullable: true + properties: + logs: + description: log messages + type: array + items: + type: object + properties: + level: + description: log level + type: string + default: INFO + enum: + - DEBUG + - WARNING + - INFO + - ERROR + message: + description: 'log message. If logger is USER, then it MUST be human readable' + type: string + logger: + description: name of the logger receiving this message + type: string + required: + - message + example: + message: 'Hi there, Mr user' + level: INFO + logger: user-logger + errors: + description: errors metadata + type: array + items: + type: object + required: + - code + - message + properties: + code: + type: string + description: Typically the name of the exception that produced it otherwise some known error code + message: + type: string + description: Error message specific to this item + resource: + type: string + description: API resource affected by this error + field: + type: string + description: Specific field within the resource + status: + description: HTTP error code + type: integer + example: + BadRequestError: + logs: + - message: Requested information is incomplete or malformed + level: ERROR + - message: Invalid email and password + level: ERROR + logger: USER + errors: + - code: InvalidEmail + message: Email is malformed + field: email + - code: UnsavePassword + message: Password is not secure + field: pasword + status: 400 From 90e16315f11511c116256aefcf0fdaeece6a22a7 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Sun, 12 Mar 2023 10:07:16 +0100 Subject: [PATCH 02/34] WIP: refactoring/testing different options how to replace old node-meta and project open api specs --- .../node-meta-v0.0.1-converted.yaml | 0 .../{ => depreciated}/node-meta-v0.0.1.json | 0 .../project-v0.0.1-converted.yaml | 0 .../{ => depreciated}/project-v0.0.1.json | 0 .../json-schema-node-meta-generated.json | 858 +++++ .../json-schema-project-generated.json | 989 ++++++ .../schemas/openapi-node-meta-generated.yaml | 406 +++ ...ic.yaml => openapi-project-generated.yaml} | 10 +- api/specs/common/schemas/project.yaml | 4 +- api/specs/common/schemas/services.yaml | 2 +- .../openapi-projects-matus-test.yaml | 606 ---- .../webserver/scripts/openapi_node_meta.py | 35 + .../webserver/scripts/openapi_project.py | 34 + .../webserver/scripts/openapi_projects.py | 44 - matus-json-schema-to-openapi-schema.json | 2569 --------------- matus-without-ref.json | 2728 ---------------- original_schema_lhs_project_v001.json | 768 ----- original_schema_rhs_pydantic_generated.json | 996 ------ .../src/models_library/projects.py | 20 +- .../tests/test__models_fit_schemas.py | 2 +- .../models-library/tests/test_services.py | 8 +- .../src/pytest_simcore/schemas.py | 2 +- schema_lhs.json | 768 ----- schema_rhs.json | 996 ------ .../core/settings.py | 2 +- services/director/Dockerfile | 6 +- .../api/v0/openapi.yaml | 1020 ++---- .../src/simcore_service_director/config.py | 2 +- services/director/tests/conftest.py | 2 +- .../api/v0/opeanapi-original.yaml | 2835 +++++++++++++++++ .../api/v0/openapi.yaml | 618 +--- services/web/server/Makefile | 16 +- .../api/v0/openapi.yaml | 176 +- .../json-schema-node-meta-generated.json | 859 +++++ .../json-schema-project-generated.json | 989 ++++++ .../api/v0/schemas/node-meta-v0.0.1.json | 477 --- .../api/v0/schemas/project-v0.0.1.json | 768 ----- services/web/server/tests/unit/conftest.py | 2 +- .../tests/unit/isolated/test_director_api.py | 2 +- .../test_projects__project_models_rest.py | 5 +- 40 files changed, 7487 insertions(+), 12137 deletions(-) rename api/specs/common/schemas/{ => depreciated}/node-meta-v0.0.1-converted.yaml (100%) rename api/specs/common/schemas/{ => depreciated}/node-meta-v0.0.1.json (100%) rename api/specs/common/schemas/{ => depreciated}/project-v0.0.1-converted.yaml (100%) rename api/specs/common/schemas/{ => depreciated}/project-v0.0.1.json (100%) create mode 100644 api/specs/common/schemas/json-schema-node-meta-generated.json create mode 100644 api/specs/common/schemas/json-schema-project-generated.json create mode 100644 api/specs/common/schemas/openapi-node-meta-generated.yaml rename api/specs/common/schemas/{project-v0.0.1-converted-automatic.yaml => openapi-project-generated.yaml} (98%) delete mode 100644 api/specs/webserver/openapi-projects-matus-test.yaml create mode 100644 api/specs/webserver/scripts/openapi_node_meta.py create mode 100644 api/specs/webserver/scripts/openapi_project.py delete mode 100644 api/specs/webserver/scripts/openapi_projects.py delete mode 100644 matus-json-schema-to-openapi-schema.json delete mode 100644 matus-without-ref.json delete mode 100644 original_schema_lhs_project_v001.json delete mode 100644 original_schema_rhs_pydantic_generated.json delete mode 100644 schema_lhs.json delete mode 100644 schema_rhs.json create mode 100644 services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json diff --git a/api/specs/common/schemas/node-meta-v0.0.1-converted.yaml b/api/specs/common/schemas/depreciated/node-meta-v0.0.1-converted.yaml similarity index 100% rename from api/specs/common/schemas/node-meta-v0.0.1-converted.yaml rename to api/specs/common/schemas/depreciated/node-meta-v0.0.1-converted.yaml diff --git a/api/specs/common/schemas/node-meta-v0.0.1.json b/api/specs/common/schemas/depreciated/node-meta-v0.0.1.json similarity index 100% rename from api/specs/common/schemas/node-meta-v0.0.1.json rename to api/specs/common/schemas/depreciated/node-meta-v0.0.1.json diff --git a/api/specs/common/schemas/project-v0.0.1-converted.yaml b/api/specs/common/schemas/depreciated/project-v0.0.1-converted.yaml similarity index 100% rename from api/specs/common/schemas/project-v0.0.1-converted.yaml rename to api/specs/common/schemas/depreciated/project-v0.0.1-converted.yaml diff --git a/api/specs/common/schemas/project-v0.0.1.json b/api/specs/common/schemas/depreciated/project-v0.0.1.json similarity index 100% rename from api/specs/common/schemas/project-v0.0.1.json rename to api/specs/common/schemas/depreciated/project-v0.0.1.json diff --git a/api/specs/common/schemas/json-schema-node-meta-generated.json b/api/specs/common/schemas/json-schema-node-meta-generated.json new file mode 100644 index 00000000000..712a173cbd6 --- /dev/null +++ b/api/specs/common/schemas/json-schema-node-meta-generated.json @@ -0,0 +1,858 @@ +{ + "title": "ServiceDockerData", + "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "short, human readable name for the node", + "example": "Fast Counter", + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "description": { + "title": "Description", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ], + "type": "string" + }, + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "integration-version": { + "title": "Integration-Version", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ], + "type": "string" + }, + "type": { + "description": "service type", + "examples": [ + "computational" + ], + "allOf": [ + { + "$ref": "#/definitions/ServiceType" + } + ] + }, + "badges": { + "title": "Badges", + "type": "array", + "items": { + "$ref": "#/definitions/Badge" + } + }, + "authors": { + "title": "Authors", + "minItems": 1, + "type": "array", + "items": { + "$ref": "#/definitions/Author" + } + }, + "contact": { + "title": "Contact", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ], + "type": "string", + "format": "email" + }, + "inputs": { + "title": "Inputs", + "description": "definition of the inputs of this node", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/ServiceInput" + } + }, + "outputs": { + "title": "Outputs", + "description": "definition of the outputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/ServiceOutput" + } + } + }, + "boot-options": { + "title": "Boot-Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "$ref": "#/definitions/BootOption" + } + } + } + }, + "required": [ + "name", + "description", + "key", + "version", + "type", + "authors", + "contact", + "inputs", + "outputs" + ], + "additionalProperties": false, + "examples": [ + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "displayOrder": 1, + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "displayOrder": 1, + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + } + }, + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + }, + "boot-options": { + "example_service_defined_boot_mode": { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + "example_service_defined_theme_selection": { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + } + } + ], + "definitions": { + "ServiceType": { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + }, + "Badge": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + }, + "Author": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + }, + "WidgetType": { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + }, + "TextArea": { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + "Structure": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + }, + "SelectBox": { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "$ref": "#/definitions/Structure" + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + }, + "Widget": { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "$ref": "#/definitions/WidgetType" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "$ref": "#/definitions/TextArea" + }, + { + "$ref": "#/definitions/SelectBox" + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + }, + "ServiceInput": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "$ref": "#/definitions/Widget" + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + }, + "ServiceOutput": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "$ref": "#/definitions/Widget" + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + }, + "BootChoice": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + }, + "BootOption": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/BootChoice" + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/api/specs/common/schemas/json-schema-project-generated.json b/api/specs/common/schemas/json-schema-project-generated.json new file mode 100644 index 00000000000..36270b43f4b --- /dev/null +++ b/api/specs/common/schemas/json-schema-project-generated.json @@ -0,0 +1,989 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Node" + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "$ref": "#/definitions/AccessRights" + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "$ref": "#/definitions/ProjectState" + }, + "ui": { + "$ref": "#/definitions/StudyUI" + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/PortLink" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/AccessEnum" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "$ref": "#/definitions/NodeState" + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "$ref": "#/definitions/Owner" + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "$ref": "#/definitions/ProjectStatus" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "$ref": "#/definitions/ProjectLocked" + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "$ref": "#/definitions/ProjectRunningState" + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "marker": { + "$ref": "#/definitions/Marker" + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/WorkbenchUI" + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Slideshow" + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Annotation" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml new file mode 100644 index 00000000000..9edec013c58 --- /dev/null +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -0,0 +1,406 @@ +paths: + ? '' + : get: + summary: Get Project Inputs + description: New in version *0.10* + operationId: get_project_inputs_get + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ServiceDockerData' + required: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: {} +components: + schemas: + Author: + title: Author + required: + - name + - email + type: object + properties: + name: + title: Name + type: string + description: Name of the author + example: Jim Knopf + email: + title: Email + type: string + description: Email address + format: email + affiliation: + title: Affiliation + type: string + description: Affiliation of the author + additionalProperties: false + Badge: + title: Badge + required: + - name + - image + - url + type: object + properties: + name: + title: Name + type: string + description: Name of the subject + image: + title: Image + maxLength: 2083 + minLength: 1 + type: string + description: Url to the badge + format: uri + url: + title: Url + maxLength: 2083 + minLength: 1 + type: string + description: Link to the status + format: uri + additionalProperties: false + BootChoice: + title: BootChoice + required: + - label + - description + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + BootOption: + title: BootOption + required: + - label + - description + - default + - items + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + $ref: '#/components/schemas/BootChoice' + HTTPValidationError: + title: HTTPValidationError + type: object + properties: + detail: + title: Detail + type: array + items: + $ref: '#/components/schemas/ValidationError' + SelectBox: + title: SelectBox + required: + - structure + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + $ref: '#/components/schemas/Structure' + additionalProperties: false + ServiceDockerData: + title: ServiceDockerData + required: + - name + - description + - key + - version + - type + - authors + - contact + - inputs + - outputs + type: object + properties: + name: + title: Name + type: string + description: short, human readable name for the node + example: Fast Counter + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url to the thumbnail + format: uri + description: + title: Description + type: string + description: human readable description of the purpose of the node + key: + title: Key + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + type: string + description: distinctive name for the node based on the docker registry + path + version: + title: Version + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + description: service version number + integration-version: + title: Integration-Version + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + description: integration version number + type: + allOf: + - $ref: '#/components/schemas/ServiceType' + description: service type + badges: + title: Badges + type: array + items: + $ref: '#/components/schemas/Badge' + authors: + title: Authors + minItems: 1 + type: array + items: + $ref: '#/components/schemas/Author' + contact: + title: Contact + type: string + description: email to correspond to the authors about the node + format: email + inputs: + title: Inputs + pattern: ^[-_a-zA-Z0-9]+$ + type: object + additionalProperties: + $ref: '#/components/schemas/ServiceInput' + description: definition of the inputs of this node + outputs: + title: Outputs + type: object + description: definition of the outputs of this node + boot-options: + title: Boot-Options + type: object + description: Service defined boot options. These get injected in the service + as env variables. + additionalProperties: false + description: 'Static metadata for a service injected in the image labels + + + This is one to one with node-meta-v0.0.1.json' + ServiceInput: + title: ServiceInput + required: + - label + - description + - type + type: object + properties: + displayOrder: + title: Displayorder + type: number + description: 'DEPRECATED: new display order is taken from the item position. + This will be removed.' + deprecated: true + label: + title: Label + type: string + description: short name for the property + example: Age + description: + title: Description + type: string + description: description of the property + example: Age in seconds since 1970 + type: + title: Type + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + type: string + description: data type expected on this input glob matching for data type + is allowed + contentSchema: + title: Contentschema + type: object + description: jsonschema of this input/output. Required when type='ref_contentSchema' + fileToKeyMap: + title: Filetokeymap + type: object + description: Place the data associated with the named keys in files + unit: + title: Unit + type: string + description: Units, when it refers to a physical quantity + defaultValue: + title: Defaultvalue + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + widget: + title: Widget + allOf: + - $ref: '#/components/schemas/Widget' + description: custom widget to use instead of the default one determined + from the data-type + additionalProperties: false + description: Metadata on a service input port + ServiceOutput: + title: ServiceOutput + required: + - label + - description + - type + type: object + properties: + displayOrder: + title: Displayorder + type: number + description: 'DEPRECATED: new display order is taken from the item position. + This will be removed.' + deprecated: true + label: + title: Label + type: string + description: short name for the property + example: Age + description: + title: Description + type: string + description: description of the property + example: Age in seconds since 1970 + type: + title: Type + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + type: string + description: data type expected on this input glob matching for data type + is allowed + contentSchema: + title: Contentschema + type: object + description: jsonschema of this input/output. Required when type='ref_contentSchema' + fileToKeyMap: + title: Filetokeymap + type: object + description: Place the data associated with the named keys in files + unit: + title: Unit + type: string + description: Units, when it refers to a physical quantity + widget: + title: Widget + allOf: + - $ref: '#/components/schemas/Widget' + description: custom widget to use instead of the default one determined + from the data-type + deprecated: true + additionalProperties: false + description: Base class for service input/outputs + ServiceType: + title: ServiceType + enum: + - computational + - dynamic + - frontend + - backend + type: string + description: An enumeration. + Structure: + title: Structure + required: + - key + - label + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + additionalProperties: false + TextArea: + title: TextArea + required: + - minHeight + type: object + properties: + minHeight: + title: Minheight + exclusiveMinimum: true + type: integer + description: minimum Height of the textarea + minimum: 0 + additionalProperties: false + ValidationError: + title: ValidationError + required: + - loc + - msg + - type + type: object + properties: + loc: + title: Location + type: array + items: + anyOf: + - type: string + - type: integer + msg: + title: Message + type: string + type: + title: Error Type + type: string + Widget: + title: Widget + required: + - type + - details + type: object + properties: + type: + allOf: + - $ref: '#/components/schemas/WidgetType' + description: type of the property + details: + title: Details + anyOf: + - $ref: '#/components/schemas/TextArea' + - $ref: '#/components/schemas/SelectBox' + additionalProperties: false + WidgetType: + title: WidgetType + enum: + - TextArea + - SelectBox + type: string + description: An enumeration. diff --git a/api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml b/api/specs/common/schemas/openapi-project-generated.yaml similarity index 98% rename from api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml rename to api/specs/common/schemas/openapi-project-generated.yaml index 40fdee81a74..dccec5d49ea 100644 --- a/api/specs/common/schemas/project-v0.0.1-converted-automatic.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -410,9 +410,7 @@ components: type: string description: Contains the reference to the project classifiers state: - anyOf: - - type: 'null' - - $ref: '#/components/schemas/ProjectState' + $ref: '#/components/schemas/ProjectState' ui: $ref: '#/components/schemas/StudyUI' quality: @@ -499,8 +497,10 @@ components: - FAILED - ABORTED type: string - description: "State of execution of a project's computational workflow\n\n \ - \ SEE StateType for task state\n " + description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project.yaml b/api/specs/common/schemas/project.yaml index 764a84d862b..bf351ab9267 100644 --- a/api/specs/common/schemas/project.yaml +++ b/api/specs/common/schemas/project.yaml @@ -1,11 +1,11 @@ components: schemas: ProjectIn: - $ref: "./project-v0.0.1-converted-automatic.yaml#/components/schemas/Project" + $ref: "./openapi-project-generated.yaml#/components/schemas/Project" ProjectOut: allOf: - - $ref: "./project-v0.0.1-converted-automatic.yaml#/components/schemas/Project" + - $ref: "./openapi-project-generated.yaml#/components/schemas/Project" - type: object properties: state: diff --git a/api/specs/common/schemas/services.yaml b/api/specs/common/schemas/services.yaml index 803ad83294e..02dd9fc3b52 100644 --- a/api/specs/common/schemas/services.yaml +++ b/api/specs/common/schemas/services.yaml @@ -8,7 +8,7 @@ components: data: type: array items: - $ref: "./node-meta-v0.0.1-converted.yaml" + $ref: "./openapi-node-meta-generated.yaml#/components/schemas/ServiceDockerData" error: nullable: true default: null diff --git a/api/specs/webserver/openapi-projects-matus-test.yaml b/api/specs/webserver/openapi-projects-matus-test.yaml deleted file mode 100644 index 40fdee81a74..00000000000 --- a/api/specs/webserver/openapi-projects-matus-test.yaml +++ /dev/null @@ -1,606 +0,0 @@ -paths: - ? '' - : get: - summary: Get Project Inputs - description: New in version *0.10* - operationId: get_project_inputs_get - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Project' - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: {} -components: - schemas: - AccessEnum: - title: AccessEnum - enum: - - ReadAndWrite - - Invisible - - ReadOnly - type: string - description: An enumeration. - AccessRights: - title: AccessRights - required: - - read - - write - - delete - type: object - properties: - read: - title: Read - type: boolean - description: gives read access - write: - title: Write - type: boolean - description: gives write access - delete: - title: Delete - type: boolean - description: gives deletion rights - additionalProperties: false - Annotation: - title: Annotation - required: - - type - - color - - attributes - type: object - properties: - type: - title: Type - enum: - - rect - - text - type: string - color: - title: Color - type: string - format: color - attributes: - title: Attributes - type: object - description: svg attributes - additionalProperties: false - DatCoreFileLink: - title: DatCoreFileLink - required: - - store - - path - - label - - dataset - type: object - properties: - store: - title: Store - type: integer - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - path: - title: Path - anyOf: - - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - type: string - - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - type: string - description: The path to the file in the storage provider domain - label: - title: Label - type: string - description: The real file name - eTag: - title: Etag - type: string - description: Entity tag that uniquely represents the file. The method to - generate the tag is not specified (black box). - dataset: - title: Dataset - type: string - description: Unique identifier to access the dataset on datcore (REQUIRED - for datcore) - additionalProperties: false - description: I/O port type to hold a link to a file in DATCORE storage - example: - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - DownloadLink: - title: DownloadLink - required: - - downloadLink - type: object - properties: - downloadLink: - title: Downloadlink - maxLength: 65536 - minLength: 1 - type: string - format: uri - label: - title: Label - type: string - additionalProperties: false - description: I/O port type to hold a generic download link to a file (e.g. S3 - pre-signed link, etc) - HTTPValidationError: - title: HTTPValidationError - type: object - properties: - detail: - title: Detail - type: array - items: - $ref: '#/components/schemas/ValidationError' - Marker: - title: Marker - required: - - color - type: object - properties: - color: - title: Color - type: string - format: color - additionalProperties: false - Node: - title: Node - required: - - key - - version - - label - type: object - properties: - key: - title: Key - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - description: distinctive name for the node based on the docker registry - path - version: - title: Version - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - description: semantic version number of the node - label: - title: Label - type: string - description: The short name of the node - progress: - title: Progress - maximum: 100.0 - minimum: 0.0 - type: number - description: the node progress value - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url of the latest screenshot of the node - format: uri - runHash: - anyOf: - - type: 'null' - - title: Runhash - type: string - description: the hex digest of the resolved inputs +outputs hash at the - time when the last outputs were generated - inputs: - title: Inputs - type: object - description: values of input properties - inputsUnits: - title: Inputsunits - type: object - description: Overrides default unit (if any) defined in the service for - each port - inputAccess: - type: object - description: map with key - access level pairs - inputNodes: - title: Inputnodes - type: array - items: - type: string - format: uuid - description: node IDs of where the node is connected to - outputs: - title: Outputs - type: object - description: values of output properties - outputNode: - title: Outputnode - type: boolean - deprecated: true - outputNodes: - title: Outputnodes - type: array - items: - type: string - format: uuid - description: Used in group-nodes. Node IDs of those connected to the output - parent: - anyOf: - - type: 'null' - - title: Parent - type: string - description: Parent's (group-nodes') node ID s. Used to group - format: uuid - position: - title: Position - allOf: - - $ref: '#/components/schemas/Position' - description: Use projects_ui.WorkbenchUI.position instead - deprecated: true - state: - title: State - allOf: - - $ref: '#/components/schemas/NodeState' - description: The node's state object - bootOptions: - title: Bootoptions - type: object - description: Some services provide alternative parameters to be injected - at boot time. The user selection should be stored here, and it will overwrite - the services's defaults. - additionalProperties: false - NodeState: - title: NodeState - type: object - properties: - modified: - title: Modified - type: boolean - description: true if the node's outputs need to be re-computed - default: true - dependencies: - title: Dependencies - uniqueItems: true - type: array - items: - type: string - format: uuid - description: contains the node inputs dependencies if they need to be computed - first - currentStatus: - allOf: - - $ref: '#/components/schemas/RunningState' - description: the node's current state - default: NOT_STARTED - additionalProperties: false - Owner: - title: Owner - required: - - user_id - - first_name - - last_name - type: object - properties: - user_id: - title: User Id - exclusiveMinimum: true - type: integer - description: Owner's identifier when registered in the user's database table - minimum: 0 - first_name: - title: First Name - type: string - description: Owner first name - last_name: - title: Last Name - type: string - description: Owner last name - additionalProperties: false - PortLink: - title: PortLink - required: - - nodeUuid - - output - type: object - properties: - nodeUuid: - title: Nodeuuid - type: string - description: The node to get the port output from - format: uuid - output: - title: Output - pattern: ^[-_a-zA-Z0-9]+$ - type: string - description: The port key in the node given by nodeUuid - additionalProperties: false - description: I/O port type to reference to an output port of another node in - the same project - Position: - title: Position - required: - - x - - y - type: object - properties: - x: - title: X - type: integer - description: The x position - example: - - '12' - y: - title: Y - type: integer - description: The y position - example: - - '15' - additionalProperties: false - Project: - title: osparc-simcore project - required: - - uuid - - name - - description - - thumbnail - - creationDate - - lastChangeDate - - workbench - - prjOwner - - accessRights - type: object - properties: - uuid: - title: Uuid - type: string - description: project unique identifier - format: uuid - name: - title: Name - type: string - description: project name - description: - title: Description - type: string - description: longer one-line description about the project - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url of the project thumbnail - format: uri - creationDate: - title: Creationdate - pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - description: project creation date - lastChangeDate: - title: Lastchangedate - pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - description: last save date - workbench: - title: Workbench - type: object - description: Project's pipeline - prjOwner: - title: Prjowner - type: string - description: user email - format: email - accessRights: - title: Accessrights - type: object - description: object containing the GroupID as key and read/write/execution - permissions as value - tags: - title: Tags - type: array - items: - type: integer - default: [] - classifiers: - title: Classifiers - type: array - items: - type: string - description: Contains the reference to the project classifiers - state: - anyOf: - - type: 'null' - - $ref: '#/components/schemas/ProjectState' - ui: - $ref: '#/components/schemas/StudyUI' - quality: - title: Quality - type: object - description: stores the study quality assessment - default: {} - dev: - title: Dev - type: object - description: object used for development purposes only - additionalProperties: false - ProjectLocked: - title: ProjectLocked - required: - - value - - status - type: object - properties: - value: - title: Value - type: boolean - description: True if the project is locked - owner: - title: Owner - allOf: - - $ref: '#/components/schemas/Owner' - description: If locked, the user that owns the lock - status: - allOf: - - $ref: '#/components/schemas/ProjectStatus' - description: The status of the project - additionalProperties: false - ProjectRunningState: - title: ProjectRunningState - required: - - value - type: object - properties: - value: - allOf: - - $ref: '#/components/schemas/RunningState' - description: The running state of the project - additionalProperties: false - ProjectState: - title: ProjectState - required: - - locked - - state - type: object - properties: - locked: - title: Locked - allOf: - - $ref: '#/components/schemas/ProjectLocked' - description: The project lock state - state: - title: State - allOf: - - $ref: '#/components/schemas/ProjectRunningState' - description: The project running state - additionalProperties: false - ProjectStatus: - title: ProjectStatus - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - description: An enumeration. - RunningState: - title: RunningState - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - description: "State of execution of a project's computational workflow\n\n \ - \ SEE StateType for task state\n " - SimCoreFileLink: - title: SimCoreFileLink - required: - - store - - path - type: object - properties: - store: - title: Store - type: integer - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - path: - title: Path - anyOf: - - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - type: string - - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - type: string - description: The path to the file in the storage provider domain - label: - title: Label - type: string - description: The real file name - eTag: - title: Etag - type: string - description: Entity tag that uniquely represents the file. The method to - generate the tag is not specified (black box). - dataset: - title: Dataset - type: string - deprecated: true - additionalProperties: false - description: I/O port type to hold a link to a file in simcore S3 storage - example: - store: 0 - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt - Slideshow: - title: Slideshow - required: - - position - type: object - properties: - position: - title: Position - type: integer - instructions: - title: Instructions - type: string - StudyUI: - title: StudyUI - type: object - properties: - workbench: - title: Workbench - type: object - slideshow: - title: Slideshow - type: object - currentNodeId: - title: Currentnodeid - type: string - format: uuid - annotations: - title: Annotations - type: object - ValidationError: - title: ValidationError - required: - - loc - - msg - - type - type: object - properties: - loc: - title: Location - type: array - items: - anyOf: - - type: string - - type: integer - msg: - title: Message - type: string - type: - title: Error Type - type: string - WorkbenchUI: - title: WorkbenchUI - required: - - position - type: object - properties: - position: - title: Position - allOf: - - $ref: '#/components/schemas/Position' - description: The node position in the workbench - marker: - $ref: '#/components/schemas/Marker' - additionalProperties: false diff --git a/api/specs/webserver/scripts/openapi_node_meta.py b/api/specs/webserver/scripts/openapi_node_meta.py new file mode 100644 index 00000000000..d086bbc29e6 --- /dev/null +++ b/api/specs/webserver/scripts/openapi_node_meta.py @@ -0,0 +1,35 @@ +""" Helper script to automatically generate OAS + +This OAS are the source of truth +""" + +# pylint: disable=redefined-outer-name +# pylint: disable=unused-argument +# pylint: disable=unused-variable +# pylint: disable=too-many-arguments + + +from fastapi import FastAPI +import json + +from models_library.services import ServiceDockerData + +app = FastAPI(redoc_url=None, openapi_version="3.0.0") + + +@app.get( + "", +) +async def get_project_inputs(project: ServiceDockerData): + """New in version *0.10*""" + + +if __name__ == "__main__": + from _common import CURRENT_DIR, create_openapi_specs + + # Generate OAS for the ServiceDockerData pydantic model via the FastAPI app + create_openapi_specs(app, CURRENT_DIR.parent / "../common/schemas/openapi-node-meta-generated.yaml") + + # Generate json schema from the ServiceDockerData pydantic model + with open(CURRENT_DIR.parent / "../common/schemas/json-schema-node-meta-generated.json", 'w') as f: + json.dump(json.loads(ServiceDockerData.schema_json()), f, indent=2) diff --git a/api/specs/webserver/scripts/openapi_project.py b/api/specs/webserver/scripts/openapi_project.py new file mode 100644 index 00000000000..a2a70e28a6c --- /dev/null +++ b/api/specs/webserver/scripts/openapi_project.py @@ -0,0 +1,34 @@ +""" Helper script to automatically generate OAS + +This OAS are the source of truth +""" + +# pylint: disable=redefined-outer-name +# pylint: disable=unused-argument +# pylint: disable=unused-variable +# pylint: disable=too-many-arguments + +from fastapi import FastAPI +import json + +from models_library.projects import Project + +app = FastAPI(redoc_url=None, openapi_version="3.0.0") + + +@app.get( + "", +) +async def get_project_inputs(project: Project): + """New in version *0.10*""" + + +if __name__ == "__main__": + from _common import CURRENT_DIR, create_openapi_specs + + # Generate OAS for the Project pydantic model via the FastAPI app + create_openapi_specs(app, CURRENT_DIR.parent / "../common/schemas/openapi-project-generated.yaml") + + # Generate json schema from the Project pydantic model + with open(CURRENT_DIR.parent / "../common/schemas/json-schema-project-generated.json", 'w') as f: + json.dump(json.loads(Project.schema_json()), f, indent=2) diff --git a/api/specs/webserver/scripts/openapi_projects.py b/api/specs/webserver/scripts/openapi_projects.py deleted file mode 100644 index d31dd482ec4..00000000000 --- a/api/specs/webserver/scripts/openapi_projects.py +++ /dev/null @@ -1,44 +0,0 @@ -""" Helper script to automatically generate OAS - -This OAS are the source of truth -""" - -# pylint: disable=redefined-outer-name -# pylint: disable=unused-argument -# pylint: disable=unused-variable -# pylint: disable=too-many-arguments - - -# from enum import Enum -# from typing import Union - -from fastapi import FastAPI -# from models_library.generics import Envelope -# from models_library.projects import ProjectID -# from models_library.projects_nodes import NodeID -# from simcore_service_webserver.projects.projects_ports_handlers import ( -# ProjectInputGet, -# ProjectInputUpdate, -# ProjectMetadataPortGet, -# ProjectOutputGet, -# ) -from models_library.projects import Project - -app = FastAPI(redoc_url=None) - -# TAGS: list[Union[str, Enum]] = [ -# "project", -# ] - - -@app.get( - "", -) -async def get_project_inputs(project: Project): - """New in version *0.10*""" - - -if __name__ == "__main__": - from _common import CURRENT_DIR, create_openapi_specs - - create_openapi_specs(app, CURRENT_DIR.parent / "openapi-projects-matus-test.yaml") diff --git a/matus-json-schema-to-openapi-schema.json b/matus-json-schema-to-openapi-schema.json deleted file mode 100644 index df3059a5580..00000000000 --- a/matus-json-schema-to-openapi-schema.json +++ /dev/null @@ -1,2569 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "type": "string", - "format": "uuid", - "example": "07640335-a91f-468c-ab69-a374fa82078d" - }, - "name": { - "title": "Name", - "description": "project name", - "type": "string", - "example": "Temporal Distortion Simulator" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "type": "string", - "example": "Dabbling in temporal transitions ..." - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string", - "example": "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "type": "string", - "example": "2018-07-01T11:13:43Z" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "type": "string", - "example": "2018-07-01T11:13:43Z" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "type": "string", - "example": "simcore/services/comp/itis/sleeper" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "type": "string", - "example": "1.0.0" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "type": "string", - "example": "JupyterLab" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string", - "example": "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - }, - "runHash": { - "anyOf": [ - { - "nullable": true - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - }, - "additionalProperties": true - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - }, - "additionalProperties": true - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - } - }, - "additionalProperties": true - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - }, - "additionalProperties": true - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "nullable": true - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "example": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - } - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "x-patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - }, - "additionalProperties": true - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - } - }, - "additionalProperties": true - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "x-patternProperties": { - "^\\S+$": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - } - }, - "additionalProperties": true - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "type": "array", - "items": { - "type": "string" - }, - "example": "some:id:to:a:classifier" - }, - "state": { - "anyOf": [ - { - "nullable": true - }, - { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "exclusiveMinimum": true, - "type": "integer", - "minimum": 0, - "example": 2 - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "type": "string", - "example": "John" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "type": "string", - "example": "Smith" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "example": { - "value": false, - "status": "CLOSED" - } - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ], - "example": "STARTED" - } - }, - "required": [ - "value" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - } - ] - }, - "ui": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - } - }, - "additionalProperties": true - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - } - }, - "additionalProperties": true - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - } - }, - "additionalProperties": true - } - } - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "example": { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - } - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "example": { - "downloadLink": "https://fakeimg.pl/250x100/" - } - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "example": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - } - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "type": "string", - "example": "simcore/services/comp/itis/sleeper" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "type": "string", - "example": "1.0.0" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "type": "string", - "example": "JupyterLab" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string", - "example": "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - }, - "runHash": { - "anyOf": [ - { - "nullable": true - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - }, - "additionalProperties": true - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - }, - "additionalProperties": true - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - } - }, - "additionalProperties": true - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "x-patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - }, - "additionalProperties": true - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "nullable": true - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "example": { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - } - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "x-patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - }, - "additionalProperties": true - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "exclusiveMinimum": true, - "type": "integer", - "minimum": 0, - "example": 2 - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "type": "string", - "example": "John" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "type": "string", - "example": "Smith" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "exclusiveMinimum": true, - "type": "integer", - "minimum": 0, - "example": 2 - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "type": "string", - "example": "John" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "type": "string", - "example": "Smith" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "example": { - "value": false, - "status": "CLOSED" - } - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ], - "example": "STARTED" - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "exclusiveMinimum": true, - "type": "integer", - "minimum": 0, - "example": 2 - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "type": "string", - "example": "John" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "type": "string", - "example": "Smith" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "example": { - "value": false, - "status": "CLOSED" - } - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ], - "example": "STARTED" - } - }, - "required": [ - "value" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "example": { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - } - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - } - }, - "additionalProperties": true - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - } - }, - "additionalProperties": true - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "x-patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - } - }, - "additionalProperties": true - } - } - } - } -} diff --git a/matus-without-ref.json b/matus-without-ref.json deleted file mode 100644 index 96c0b4bf3e5..00000000000 --- a/matus-without-ref.json +++ /dev/null @@ -1,2728 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ], - "type": "string", - "format": "uuid" - }, - "name": { - "title": "Name", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ], - "type": "string" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ], - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - } - } - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "patternProperties": { - "^\\S+$": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - } - } - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "type": "array", - "items": { - "type": "string" - } - }, - "state": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - } - ] - }, - "ui": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - } - } - } - } - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - } - } - } - } - } - } -} \ No newline at end of file diff --git a/original_schema_lhs_project_v001.json b/original_schema_lhs_project_v001.json deleted file mode 100644 index f826958ab58..00000000000 --- a/original_schema_lhs_project_v001.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} \ No newline at end of file diff --git a/original_schema_rhs_pydantic_generated.json b/original_schema_rhs_pydantic_generated.json deleted file mode 100644 index cb72a25e167..00000000000 --- a/original_schema_rhs_pydantic_generated.json +++ /dev/null @@ -1,996 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ], - "type": "string", - "format": "uuid" - }, - "name": { - "title": "Name", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ], - "type": "string" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ], - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Node" - } - } - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "patternProperties": { - "^\\S+$": { - "$ref": "#/definitions/AccessRights" - } - } - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "type": "array", - "items": { - "type": "string" - } - }, - "state": { - "anyOf": [ - { - "type": "null" - }, - { - "$ref": "#/definitions/ProjectState" - } - ] - }, - "ui": { - "$ref": "#/definitions/StudyUI" - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/PortLink" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/AccessEnum" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "$ref": "#/definitions/NodeState" - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "$ref": "#/definitions/Owner" - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "$ref": "#/definitions/ProjectStatus" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "$ref": "#/definitions/ProjectLocked" - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "$ref": "#/definitions/ProjectRunningState" - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "marker": { - "$ref": "#/definitions/Marker" - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/WorkbenchUI" - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Slideshow" - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Annotation" - } - } - } - } - } - } -} diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 581f6e30a41..6dd39b8c656 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -155,13 +155,13 @@ class Config: title = "osparc-simcore project" extra = Extra.forbid - @staticmethod - def schema_extra(schema: dict, _model: "Project"): - # pylint: disable=unsubscriptable-object - - # Patch to allow jsonschema nullable - # SEE https://github.com/samuelcolvin/pydantic/issues/990#issuecomment-645961530 - state_pydantic_schema = deepcopy(schema["properties"]["state"]) - schema["properties"]["state"] = { - "anyOf": [{"type": "null"}, state_pydantic_schema] - } + # @staticmethod + # def schema_extra(schema: dict, _model: "Project"): + # # pylint: disable=unsubscriptable-object + + # # Patch to allow jsonschema nullable + # # SEE https://github.com/samuelcolvin/pydantic/issues/990#issuecomment-645961530 + # state_pydantic_schema = deepcopy(schema["properties"]["state"]) + # schema["properties"]["state"] = { + # "anyOf": [{"type": "null"}, state_pydantic_schema] + # } diff --git a/packages/models-library/tests/test__models_fit_schemas.py b/packages/models-library/tests/test__models_fit_schemas.py index aed9f354b34..9c22785ce6e 100644 --- a/packages/models-library/tests/test__models_fit_schemas.py +++ b/packages/models-library/tests/test__models_fit_schemas.py @@ -13,7 +13,7 @@ @pytest.mark.parametrize( "pydantic_model, original_json_schema", - [(ServiceDockerData, "node-meta-v0.0.1.json"), (Project, "project-v0.0.1.json")], + [(ServiceDockerData, "json-schema-node-meta-generated.json"), (Project, "json-schema-project-generated.json")], ) def test_generated_schema_same_as_original( pydantic_model: BaseModel, diff --git a/packages/models-library/tests/test_services.py b/packages/models-library/tests/test_services.py index 7cba14f9725..e231749db58 100644 --- a/packages/models-library/tests/test_services.py +++ b/packages/models-library/tests/test_services.py @@ -182,10 +182,10 @@ def test_services_model_examples(model_cls, model_cls_examples): @pytest.mark.parametrize( "python_regex_pattern, json_schema_file_name, json_schema_entry_paths", [ - (SERVICE_KEY_RE, "project-v0.0.1.json", ["key"]), - (VERSION_RE, "project-v0.0.1.json", ["version"]), - (VERSION_RE, "node-meta-v0.0.1.json", ["version"]), - (SERVICE_KEY_RE, "node-meta-v0.0.1.json", ["key"]), + (SERVICE_KEY_RE, "json-schema-project-generated.json", ["key"]), + (VERSION_RE, "json-schema-project-generated.json", ["version"]), + (VERSION_RE, "json-schema-node-meta-generated.json", ["version"]), + (SERVICE_KEY_RE, "json-schema-node-meta-generated.json", ["key"]), ], ) def test_same_regex_patterns_in_jsonschema_and_python( diff --git a/packages/pytest-simcore/src/pytest_simcore/schemas.py b/packages/pytest-simcore/src/pytest_simcore/schemas.py index 8bdfecb9af8..d26b46244ef 100644 --- a/packages/pytest-simcore/src/pytest_simcore/schemas.py +++ b/packages/pytest-simcore/src/pytest_simcore/schemas.py @@ -20,7 +20,7 @@ def common_schemas_specs_dir(osparc_simcore_root_dir: Path) -> Path: @pytest.fixture(scope="session") def node_meta_schema_file(common_schemas_specs_dir: Path) -> Path: - node_meta_file = common_schemas_specs_dir / "node-meta-v0.0.1.json" + node_meta_file = common_schemas_specs_dir / "json-schema-node-meta-generated.json" assert node_meta_file.exists() return node_meta_file diff --git a/schema_lhs.json b/schema_lhs.json deleted file mode 100644 index f826958ab58..00000000000 --- a/schema_lhs.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} \ No newline at end of file diff --git a/schema_rhs.json b/schema_rhs.json deleted file mode 100644 index 21cda378bc1..00000000000 --- a/schema_rhs.json +++ /dev/null @@ -1,996 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ], - "type": "string", - "format": "uuid" - }, - "name": { - "title": "Name", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ], - "type": "string" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ], - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Node" - } - } - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "patternProperties": { - "^\\S+$": { - "$ref": "#/definitions/AccessRights" - } - } - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "type": "array", - "items": { - "type": "string" - } - }, - "state": { - "anyOf": [ - { - "type": "null" - }, - { - "$ref": "#/definitions/ProjectState" - } - ] - }, - "ui": { - "$ref": "#/definitions/StudyUI" - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/PortLink" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/AccessEnum" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "$ref": "#/definitions/NodeState" - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "$ref": "#/definitions/Owner" - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "$ref": "#/definitions/ProjectStatus" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "$ref": "#/definitions/ProjectLocked" - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "$ref": "#/definitions/ProjectRunningState" - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "marker": { - "$ref": "#/definitions/Marker" - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/WorkbenchUI" - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Slideshow" - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Annotation" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/services/director-v2/src/simcore_service_director_v2/core/settings.py b/services/director-v2/src/simcore_service_director_v2/core/settings.py index b48776e7547..ed6f0d4b5f9 100644 --- a/services/director-v2/src/simcore_service_director_v2/core/settings.py +++ b/services/director-v2/src/simcore_service_director_v2/core/settings.py @@ -517,7 +517,7 @@ class AppSettings(BaseCustomSettings, MixinLoggingSettings): SWARM_STACK_NAME: str = Field("undefined-please-check", env="SWARM_STACK_NAME") NODE_SCHEMA_LOCATION: str = Field( - f"{API_ROOT}/{API_VTAG}/schemas/node-meta-v0.0.1.json", + f"{API_ROOT}/{API_VTAG}/schemas/json-schema-node-meta-generated.json", description="used when in devel mode vs release mode", ) diff --git a/services/director/Dockerfile b/services/director/Dockerfile index 1df4e033ac2..5feebf8a7e5 100644 --- a/services/director/Dockerfile +++ b/services/director/Dockerfile @@ -90,8 +90,8 @@ RUN pip --no-cache-dir install -r /build/services/director/requirements/_base.tx # FIXME: # necessary to prevent duplicated files. # Will be removed when director is refactored using cookiecutter as this will not be necessary anymore -COPY --chown=scu:scu api/specs/common/schemas/node-meta-v0.0.1.json \ - /build/services/director/src/simcore_service_director/api/v0/oas-parts/schemas/node-meta-v0.0.1.json +COPY --chown=scu:scu api/specs/common/schemas/json-schema-node-meta-generated.json \ + /build/services/director/src/simcore_service_director/api/v0/oas-parts/schemas/json-schema-node-meta-generated.json # --------------------------Prod-depends-only stage ------------------- # This stage is for production only dependencies that get partially wiped out afterwards (final docker image concerns) @@ -147,7 +147,7 @@ CMD ["services/director/docker/boot.sh"] FROM build as development ENV SC_BUILD_TARGET=development -ENV NODE_SCHEMA_LOCATION=../../../api/specs/common/schemas/node-meta-v0.0.1.json +ENV NODE_SCHEMA_LOCATION=../../../api/specs/common/schemas/json-schema-node-meta-generated.json WORKDIR /devel RUN chown -R scu:scu "${VIRTUAL_ENV}" ENTRYPOINT [ "/bin/sh", "services/director/docker/entrypoint.sh" ] diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index 3e9f05493f2..a6b215b4508 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -141,331 +141,139 @@ paths: data: type: array items: - title: simcore node - description: Description of a simcore node 'class' with input and output - type: object - additionalProperties: false + title: ServiceDockerData required: + - name + - description - key - version - type - - name - - description - authors - contact - inputs - outputs + type: object properties: - key: + name: + title: Name type: string - description: distinctive name for the node based on the docker registry path + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url to the thumbnail + format: uri + description: + title: Description + type: string + description: human readable description of the purpose of the node + key: + title: Key pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: simcore/services/comp/itis/sleeper - integration-version: type: string - description: integration version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 + description: distinctive name for the node based on the docker registry path version: + title: Version + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' type: string description: service version number + integration-version: + title: Integration-Version pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - type: type: string + description: integration version number + type: + allOf: + - title: ServiceType + enum: + - computational + - dynamic + - frontend + - backend + type: string + description: An enumeration. description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' badges: + title: Badges type: array items: - type: object + title: Badge required: - name - image - url - additionalProperties: false + type: object properties: name: + title: Name type: string description: Name of the subject - example: travis-ci image: + title: Image + maxLength: 2083 + minLength: 1 type: string - description: Url to the shield - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + description: Url to the badge + format: uri url: + title: Url + maxLength: 2083 + minLength: 1 type: string - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type + description: Link to the status + format: uri + additionalProperties: false authors: - type: array + title: Authors minItems: 1 + type: array items: - type: object + title: Author required: - name - email - additionalProperties: false + type: object properties: name: + title: Name type: string description: Name of the author - example: Sun Bak + example: Jim Knopf email: - description: Email address + title: Email type: string + description: Email address format: email - example: sun@sense.eight affiliation: - description: Affiliation of the author + title: Affiliation type: string - example: Sense8 + description: Affiliation of the author + additionalProperties: false contact: + title: Contact type: string - format: email description: email to correspond to the authors about the node - example: lab@net.flix + format: email inputs: + title: Inputs type: object description: definition of the inputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - description: data type expected on this input glob matching for data type is allowed - example: - - number - - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' - - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' - - 'data:text/plain' - - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - contentSchema: - title: Content Schema - description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: 'Units of this input value, if a physical quantity' - type: string - widget: - description: custom widget to use instead of the default one determined from the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true outputs: + title: Outputs type: object description: definition of the outputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - 'data:application/json' - - 'data:application/vnd.ms-excel ' - - 'data:text/plain' - - 'data:application/hdf5' - contentSchema: - title: Content Schema - description: jsonschema of this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: 'Units of the output value, if a physical quantity' - type: string - additionalProperties: true boot-options: - title: Boot Options - description: Service defined boot options. These get injected in the service as env variables. + title: Boot-Options type: object - x-patternProperties: - '^[_a-zA-Z0-9]+$': - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true + description: Service defined boot options. These get injected in the service as env variables. + additionalProperties: false + description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json error: nullable: true default: null @@ -580,331 +388,139 @@ paths: data: type: array items: - title: simcore node - description: Description of a simcore node 'class' with input and output - type: object - additionalProperties: false + title: ServiceDockerData required: + - name + - description - key - version - type - - name - - description - authors - contact - inputs - outputs + type: object properties: - key: + name: + title: Name type: string - description: distinctive name for the node based on the docker registry path + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url to the thumbnail + format: uri + description: + title: Description + type: string + description: human readable description of the purpose of the node + key: + title: Key pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: simcore/services/comp/itis/sleeper - integration-version: type: string - description: integration version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 + description: distinctive name for the node based on the docker registry path version: + title: Version + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' type: string description: service version number + integration-version: + title: Integration-Version pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - type: type: string + description: integration version number + type: + allOf: + - title: ServiceType + enum: + - computational + - dynamic + - frontend + - backend + type: string + description: An enumeration. description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' badges: + title: Badges type: array items: - type: object + title: Badge required: - name - image - url - additionalProperties: false + type: object properties: name: + title: Name type: string description: Name of the subject - example: travis-ci image: + title: Image + maxLength: 2083 + minLength: 1 type: string - description: Url to the shield - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + description: Url to the badge + format: uri url: + title: Url + maxLength: 2083 + minLength: 1 type: string - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type + description: Link to the status + format: uri + additionalProperties: false authors: - type: array + title: Authors minItems: 1 + type: array items: - type: object + title: Author required: - name - email - additionalProperties: false + type: object properties: name: + title: Name type: string description: Name of the author - example: Sun Bak + example: Jim Knopf email: - description: Email address + title: Email type: string + description: Email address format: email - example: sun@sense.eight affiliation: - description: Affiliation of the author + title: Affiliation type: string - example: Sense8 + description: Affiliation of the author + additionalProperties: false contact: + title: Contact type: string - format: email description: email to correspond to the authors about the node - example: lab@net.flix + format: email inputs: + title: Inputs type: object description: definition of the inputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - description: data type expected on this input glob matching for data type is allowed - example: - - number - - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' - - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' - - 'data:text/plain' - - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - contentSchema: - title: Content Schema - description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: 'Units of this input value, if a physical quantity' - type: string - widget: - description: custom widget to use instead of the default one determined from the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true outputs: + title: Outputs type: object description: definition of the outputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - 'data:application/json' - - 'data:application/vnd.ms-excel ' - - 'data:text/plain' - - 'data:application/hdf5' - contentSchema: - title: Content Schema - description: jsonschema of this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: 'Units of the output value, if a physical quantity' - type: string - additionalProperties: true boot-options: - title: Boot Options - description: Service defined boot options. These get injected in the service as env variables. + title: Boot-Options type: object - x-patternProperties: - '^[_a-zA-Z0-9]+$': - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true + description: Service defined boot options. These get injected in the service as env variables. + additionalProperties: false + description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json error: nullable: true default: null @@ -2433,331 +2049,139 @@ components: data: type: array items: - title: simcore node - description: Description of a simcore node 'class' with input and output - type: object - additionalProperties: false + title: ServiceDockerData required: + - name + - description - key - version - type - - name - - description - authors - contact - inputs - outputs + type: object properties: - key: + name: + title: Name type: string - description: distinctive name for the node based on the docker registry path + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 + type: string + description: url to the thumbnail + format: uri + description: + title: Description + type: string + description: human readable description of the purpose of the node + key: + title: Key pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: simcore/services/comp/itis/sleeper - integration-version: type: string - description: integration version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 + description: distinctive name for the node based on the docker registry path version: + title: Version + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' type: string description: service version number + integration-version: + title: Integration-Version pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - type: type: string + description: integration version number + type: + allOf: + - title: ServiceType + enum: + - computational + - dynamic + - frontend + - backend + type: string + description: An enumeration. description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' badges: + title: Badges type: array items: - type: object + title: Badge required: - name - image - url - additionalProperties: false + type: object properties: name: + title: Name type: string description: Name of the subject - example: travis-ci image: + title: Image + maxLength: 2083 + minLength: 1 type: string - description: Url to the shield - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + description: Url to the badge + format: uri url: + title: Url + maxLength: 2083 + minLength: 1 type: string - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type + description: Link to the status + format: uri + additionalProperties: false authors: - type: array + title: Authors minItems: 1 + type: array items: - type: object + title: Author required: - name - email - additionalProperties: false + type: object properties: name: + title: Name type: string description: Name of the author - example: Sun Bak + example: Jim Knopf email: - description: Email address + title: Email type: string + description: Email address format: email - example: sun@sense.eight affiliation: - description: Affiliation of the author + title: Affiliation type: string - example: Sense8 + description: Affiliation of the author + additionalProperties: false contact: + title: Contact type: string - format: email description: email to correspond to the authors about the node - example: lab@net.flix + format: email inputs: + title: Inputs type: object description: definition of the inputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - description: data type expected on this input glob matching for data type is allowed - example: - - number - - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' - - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' - - 'data:text/plain' - - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - contentSchema: - title: Content Schema - description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: 'Units of this input value, if a physical quantity' - type: string - widget: - description: custom widget to use instead of the default one determined from the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true outputs: + title: Outputs type: object description: definition of the outputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - 'data:application/json' - - 'data:application/vnd.ms-excel ' - - 'data:text/plain' - - 'data:application/hdf5' - contentSchema: - title: Content Schema - description: jsonschema of this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: 'Units of the output value, if a physical quantity' - type: string - additionalProperties: true boot-options: - title: Boot Options - description: Service defined boot options. These get injected in the service as env variables. + title: Boot-Options type: object - x-patternProperties: - '^[_a-zA-Z0-9]+$': - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true + description: Service defined boot options. These get injected in the service as env variables. + additionalProperties: false + description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json error: nullable: true default: null diff --git a/services/director/src/simcore_service_director/config.py b/services/director/src/simcore_service_director/config.py index 187c963a853..6c498f700bd 100644 --- a/services/director/src/simcore_service_director/config.py +++ b/services/director/src/simcore_service_director/config.py @@ -121,7 +121,7 @@ def _from_env_with_default(env: str, python_type, default): # used when in devel mode vs release mode NODE_SCHEMA_LOCATION: str = os.environ.get( - "NODE_SCHEMA_LOCATION", f"{API_ROOT}/{API_VERSION}/schemas/node-meta-v0.0.1.json" + "NODE_SCHEMA_LOCATION", f"{API_ROOT}/{API_VERSION}/schemas/json-schema-node-meta-generated.json" ) # used to find the right network name SIMCORE_SERVICES_NETWORK_NAME: Optional[str] = os.environ.get( diff --git a/services/director/tests/conftest.py b/services/director/tests/conftest.py index 229960559d0..e03744bb647 100644 --- a/services/director/tests/conftest.py +++ b/services/director/tests/conftest.py @@ -45,7 +45,7 @@ def package_dir(): @pytest.fixture def configure_schemas_location(package_dir, common_schemas_specs_dir): config.NODE_SCHEMA_LOCATION = str( - common_schemas_specs_dir / "node-meta-v0.0.1.json" + common_schemas_specs_dir / "json-schema-node-meta-generated.json" ) resources.RESOURCE_NODE_SCHEMA = os.path.relpath( config.NODE_SCHEMA_LOCATION, package_dir diff --git a/services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml b/services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml new file mode 100644 index 00000000000..3e9f05493f2 --- /dev/null +++ b/services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml @@ -0,0 +1,2835 @@ +openapi: 3.0.0 +info: + description: This is the oSparc's director API + version: 0.1.0 + title: Director API + contact: + name: IT'IS Foundation + email: support@simcore.com + license: + name: MIT + url: 'https://github.com/ITISFoundation/osparc-simcore/blob/master/LICENSE' +servers: + - description: Development server + url: 'http://{host}:{port}/{version}' + variables: + host: + default: localhost + port: + default: '8080' + version: + default: v0 + enum: + - v0 + - description: Production server + url: 'http://director:{port}/{version}' + variables: + port: + default: '8080' + version: + default: v0 + enum: + - v0 +tags: + - name: admins + description: Secured Admin-only calls + - name: developers + description: Operations available to regular developers + - name: users + description: Operations available to regular users +paths: + /: + get: + tags: + - users + summary: Service health-check endpoint + description: Some general information on the API and state of the service behind + operationId: root_get + responses: + '200': + description: Service information + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + properties: + name: + type: string + example: director service + status: + type: string + example: SERVICE_RUNNING + api_version: + type: string + example: 1.0.0-dev + version: + type: string + example: 1dfcfdc + error: + nullable: true + default: null + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + /services: + get: + tags: + - users + summary: Lists available services in the oSparc platform + description: Lists available services in the oSparc platform + operationId: services_get + parameters: + - in: query + name: service_type + description: | + The service type: + * computational - a computational service + * interactive - an interactive service + required: false + schema: + type: string + enum: + - computational + - interactive + example: computational + responses: + '200': + description: 'Success, returns the list of available services' + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + title: simcore node + description: Description of a simcore node 'class' with input and output + type: object + additionalProperties: false + required: + - key + - version + - type + - name + - description + - authors + - contact + - inputs + - outputs + properties: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: simcore/services/comp/itis/sleeper + integration-version: + type: string + description: integration version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + version: + type: string + description: service version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + type: + type: string + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + name: + type: string + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + type: string + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + badges: + type: array + items: + type: object + required: + - name + - image + - url + additionalProperties: false + properties: + name: + type: string + description: Name of the subject + example: travis-ci + image: + type: string + description: Url to the shield + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + url: + type: string + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' + description: + type: string + description: human readable description of the purpose of the node + example: Our best node type + authors: + type: array + minItems: 1 + items: + type: object + required: + - name + - email + additionalProperties: false + properties: + name: + type: string + description: Name of the author + example: Sun Bak + email: + description: Email address + type: string + format: email + example: sun@sense.eight + affiliation: + description: Affiliation of the author + type: string + example: Sense8 + contact: + type: string + format: email + description: email to correspond to the authors about the node + example: lab@net.flix + inputs: + type: object + description: definition of the inputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + type: object + description: all the input configurable for this service + additionalProperties: false + required: + - displayOrder + - label + - description + - type + properties: + displayOrder: + description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' + deprecated: true + type: number + label: + type: string + description: short name for the property + example: + - Age + description: + type: string + description: description of the property + example: + - Age in seconds since 1970 + type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + contentSchema: + title: Content Schema + description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data associated with the named keys in files + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + defaultValue: + description: initial value for this input + type: + - string + - number + - integer + - boolean + example: + - Dog + - true + unit: + title: Unit + description: 'Units of this input value, if a physical quantity' + type: string + widget: + description: custom widget to use instead of the default one determined from the data-type + anyOf: + - type: object + additionalProperties: false + required: + - type + properties: + type: + description: type of the property + type: string + enum: + - TextArea + minHeight: + description: minimum Height of the textarea + type: integer + minimum: 1 + - type: object + additionalProperties: false + required: + - type + - structure + properties: + type: + description: type of the property + type: string + enum: + - SelectBox + structure: + type: array + minItems: 1 + items: + type: object + additionalProperties: false + required: + - key + - label + properties: + key: + type: + - string + - boolean + - number + label: + type: string + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog + additionalProperties: true + outputs: + type: object + description: definition of the outputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + type: object + description: all the output produced by this node + additionalProperties: false + required: + - displayOrder + - label + - description + - type + properties: + displayOrder: + type: number + description: use this to numerically sort the properties for display + example: + - 1 + - -0.2 + label: + type: string + description: short name for the property + example: + - Age + description: + type: string + description: description of the property + example: + - Age in seconds since 1970 + type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' + description: data type expected on this output + example: + - number + - integer + - boolean + - string + - 'data:application/json' + - 'data:application/vnd.ms-excel ' + - 'data:text/plain' + - 'data:application/hdf5' + contentSchema: + title: Content Schema + description: jsonschema of this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + unit: + title: Unit + description: 'Units of the output value, if a physical quantity' + type: string + additionalProperties: true + boot-options: + title: Boot Options + description: Service defined boot options. These get injected in the service as env variables. + type: object + x-patternProperties: + '^[_a-zA-Z0-9]+$': + title: BootOptionMode + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootOptionItem + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + required: + - label + - description + - default + - items + additionalProperties: true + error: + nullable: true + default: null + '401': + description: Unauthorized access + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '/services/{service_key}/{service_version}': + get: + tags: + - users + summary: Returns details of the selected service if available in the oSparc platform + description: Returns details of the selected service if available in the oSparc platform + operationId: services_by_key_version_get + parameters: + - in: path + name: service_key + description: The key (url) of the service + required: true + schema: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - in: path + name: service_version + description: The tag/version of the service + required: true + schema: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + responses: + '200': + description: 'Success, returns the details of the service' + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + title: simcore node + description: Description of a simcore node 'class' with input and output + type: object + additionalProperties: false + required: + - key + - version + - type + - name + - description + - authors + - contact + - inputs + - outputs + properties: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: simcore/services/comp/itis/sleeper + integration-version: + type: string + description: integration version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + version: + type: string + description: service version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + type: + type: string + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + name: + type: string + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + type: string + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + badges: + type: array + items: + type: object + required: + - name + - image + - url + additionalProperties: false + properties: + name: + type: string + description: Name of the subject + example: travis-ci + image: + type: string + description: Url to the shield + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + url: + type: string + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' + description: + type: string + description: human readable description of the purpose of the node + example: Our best node type + authors: + type: array + minItems: 1 + items: + type: object + required: + - name + - email + additionalProperties: false + properties: + name: + type: string + description: Name of the author + example: Sun Bak + email: + description: Email address + type: string + format: email + example: sun@sense.eight + affiliation: + description: Affiliation of the author + type: string + example: Sense8 + contact: + type: string + format: email + description: email to correspond to the authors about the node + example: lab@net.flix + inputs: + type: object + description: definition of the inputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + type: object + description: all the input configurable for this service + additionalProperties: false + required: + - displayOrder + - label + - description + - type + properties: + displayOrder: + description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' + deprecated: true + type: number + label: + type: string + description: short name for the property + example: + - Age + description: + type: string + description: description of the property + example: + - Age in seconds since 1970 + type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + contentSchema: + title: Content Schema + description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data associated with the named keys in files + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + defaultValue: + description: initial value for this input + type: + - string + - number + - integer + - boolean + example: + - Dog + - true + unit: + title: Unit + description: 'Units of this input value, if a physical quantity' + type: string + widget: + description: custom widget to use instead of the default one determined from the data-type + anyOf: + - type: object + additionalProperties: false + required: + - type + properties: + type: + description: type of the property + type: string + enum: + - TextArea + minHeight: + description: minimum Height of the textarea + type: integer + minimum: 1 + - type: object + additionalProperties: false + required: + - type + - structure + properties: + type: + description: type of the property + type: string + enum: + - SelectBox + structure: + type: array + minItems: 1 + items: + type: object + additionalProperties: false + required: + - key + - label + properties: + key: + type: + - string + - boolean + - number + label: + type: string + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog + additionalProperties: true + outputs: + type: object + description: definition of the outputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + type: object + description: all the output produced by this node + additionalProperties: false + required: + - displayOrder + - label + - description + - type + properties: + displayOrder: + type: number + description: use this to numerically sort the properties for display + example: + - 1 + - -0.2 + label: + type: string + description: short name for the property + example: + - Age + description: + type: string + description: description of the property + example: + - Age in seconds since 1970 + type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' + description: data type expected on this output + example: + - number + - integer + - boolean + - string + - 'data:application/json' + - 'data:application/vnd.ms-excel ' + - 'data:text/plain' + - 'data:application/hdf5' + contentSchema: + title: Content Schema + description: jsonschema of this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + unit: + title: Unit + description: 'Units of the output value, if a physical quantity' + type: string + additionalProperties: true + boot-options: + title: Boot Options + description: Service defined boot options. These get injected in the service as env variables. + type: object + x-patternProperties: + '^[_a-zA-Z0-9]+$': + title: BootOptionMode + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootOptionItem + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + required: + - label + - description + - default + - items + additionalProperties: true + error: + nullable: true + default: null + '401': + description: Unauthorized access + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '404': + description: Service not found + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '/services/{service_key}/{service_version}/labels': + get: + tags: + - users + summary: Returns the list of tags attached to a service + operationId: get_service_labels + parameters: + - in: path + name: service_key + description: The key (url) of the service + required: true + schema: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - in: path + name: service_version + description: The tag/version of the service + required: true + schema: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + responses: + '200': + description: 'Success, returns the details of the service' + content: + application/json: + schema: + type: object + additionalProperties: + type: string + '401': + description: Unauthorized access + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '404': + description: Service not found + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '/service_extras/{service_key}/{service_version}': + get: + tags: + - users + summary: Returns the service's details which should be hidden from the user defined as extras. + description: Currently returns the node_requirements an array of resoruces needed for scheduling. + operationId: service_extras_by_key_version_get + parameters: + - in: path + name: service_key + description: The key (url) of the service + required: true + schema: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - in: path + name: service_version + description: The tag/version of the service + required: true + schema: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + responses: + '200': + description: 'Success, returns an object containing details hidden from the user' + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - node_requirements + properties: + node_requirements: + type: object + required: + - CPU + - RAM + properties: + CPU: + type: number + default: 1 + minimum: 1 + GPU: + type: integer + minimum: 0 + RAM: + type: integer + format: int64 + minimum: 1024 + MPI: + type: integer + maximum: 1 + service_build_details: + type: object + properties: + build_date: + type: string + vcs_ref: + type: string + vcs_url: + type: string + container_spec: + type: object + properties: + command: + type: array + items: + type: string + error: + nullable: true + default: null + '401': + description: Unauthorized access + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '404': + description: Service not found + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + /running_interactive_services: + get: + tags: + - users + summary: Returns a list of interactive services + operationId: running_interactive_services_list_get + parameters: + - in: query + name: user_id + required: false + schema: + type: string + - in: query + name: project_id + required: false + schema: + type: string + responses: + '200': + description: Returns the running services instances + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: array + items: + type: object + required: + - published_port + - service_uuid + - service_key + - service_version + - service_host + - service_port + - service_state + - user_id + properties: + published_port: + description: The ports where the service provides its interface + type: integer + format: int32 + minimum: 1 + example: 30000 + entry_point: + description: The entry point where the service provides its interface if specified + type: string + example: /the/entry/point/is/here + service_uuid: + description: The UUID attached to this service + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + service_key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + service_version: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + service_host: + description: service host name within the network + type: string + example: jupyter_E1O2E-LAH + service_port: + description: port to access the service within the network + type: integer + minimum: 1 + example: 8081 + service_basepath: + description: different base path where current service is mounted otherwise defaults to root + type: string + example: /x/E1O2E-LAH + default: '' + service_state: + description: | + the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start + type: string + enum: + - pending + - pulling + - starting + - running + - complete + - failed + service_message: + description: the service message + type: string + example: no suitable node (insufficient resources on 1 node) + user_id: + description: the user that started the service + type: string + example: '123' + error: + nullable: true + default: null + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + post: + tags: + - users + summary: Starts an interactive service in the oSparc platform + operationId: running_interactive_services_post + parameters: + - in: query + name: user_id + description: The ID of the user that starts the service + required: true + schema: + type: string + example: asdfgj233 + - in: query + name: project_id + description: The ID of the project in which the service starts + required: true + schema: + type: string + example: asdfgj233 + - in: query + name: service_key + description: The key (url) of the service + required: true + schema: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - in: query + name: service_tag + description: The tag/version of the service + required: false + schema: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + - in: query + name: service_uuid + description: The uuid to assign the service with + required: true + schema: + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + - in: query + name: service_basepath + description: predefined basepath for the backend service otherwise uses root + required: false + schema: + type: string + example: /x/EycCXbU0H/ + default: '' + responses: + '201': + description: Succesfully created the service in the oSparc platform. Returns the location where the service runs. + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - published_port + - service_uuid + - service_key + - service_version + - service_host + - service_port + - service_state + - user_id + properties: + published_port: + description: The ports where the service provides its interface + type: integer + format: int32 + minimum: 1 + example: 30000 + entry_point: + description: The entry point where the service provides its interface if specified + type: string + example: /the/entry/point/is/here + service_uuid: + description: The UUID attached to this service + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + service_key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + service_version: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + service_host: + description: service host name within the network + type: string + example: jupyter_E1O2E-LAH + service_port: + description: port to access the service within the network + type: integer + minimum: 1 + example: 8081 + service_basepath: + description: different base path where current service is mounted otherwise defaults to root + type: string + example: /x/E1O2E-LAH + default: '' + service_state: + description: | + the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start + type: string + enum: + - pending + - pulling + - starting + - running + - complete + - failed + service_message: + description: the service message + type: string + example: no suitable node (insufficient resources on 1 node) + user_id: + description: the user that started the service + type: string + example: '123' + error: + nullable: true + default: null + '400': + description: 'Malformed function call, missing field' + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '401': + description: Unauthorized access + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '404': + description: Service not found + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '409': + description: A service with the same uuid already exists + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '/running_interactive_services/{service_uuid}': + get: + tags: + - users + summary: Succesfully returns if a service with the defined uuid is up and running + description: Succesfully returns if a service with the defined uuid is up and running + operationId: running_interactive_services_get + parameters: + - in: path + name: service_uuid + description: The uuid of the service + required: true + schema: + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + responses: + '200': + description: OK service exists and runs. Returns service location. + content: + application/json: + schema: + type: object + required: + - data + properties: + data: + type: object + required: + - published_port + - service_uuid + - service_key + - service_version + - service_host + - service_port + - service_state + - user_id + properties: + published_port: + description: The ports where the service provides its interface + type: integer + format: int32 + minimum: 1 + example: 30000 + entry_point: + description: The entry point where the service provides its interface if specified + type: string + example: /the/entry/point/is/here + service_uuid: + description: The UUID attached to this service + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + service_key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + service_version: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + service_host: + description: service host name within the network + type: string + example: jupyter_E1O2E-LAH + service_port: + description: port to access the service within the network + type: integer + minimum: 1 + example: 8081 + service_basepath: + description: different base path where current service is mounted otherwise defaults to root + type: string + example: /x/E1O2E-LAH + default: '' + service_state: + description: | + the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start + type: string + enum: + - pending + - pulling + - starting + - running + - complete + - failed + service_message: + description: the service message + type: string + example: no suitable node (insufficient resources on 1 node) + user_id: + description: the user that started the service + type: string + example: '123' + error: + nullable: true + default: null + '400': + description: 'Malformed function call, missing field' + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '404': + description: Service not found + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + delete: + tags: + - users + summary: Stops and removes an interactive service from the oSparc platform + description: Stops and removes an interactive service from the oSparc platform + operationId: running_interactive_services_delete + parameters: + - in: path + name: service_uuid + description: The uuid of the service + required: true + schema: + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + - in: query + name: save_state + description: Save the state prior to removing the service + required: false + schema: + type: boolean + default: true + responses: + '204': + description: Succesfully stopped and removed the service from the oSparc platform + '400': + description: 'Malformed function call, missing field' + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + '404': + description: Service not found + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + default: + description: Unexpected error + content: + application/json: + schema: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 +components: + parameters: + UserId: + in: query + name: user_id + description: The ID of the user that starts the service + required: true + schema: + type: string + example: asdfgj233 + ProjectId: + in: query + name: project_id + description: The ID of the project in which the service starts + required: true + schema: + type: string + example: asdfgj233 + AssignmentUuid: + in: query + name: service_uuid + description: The uuid to assign the service with + required: true + schema: + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + ServiceKeyPath: + in: path + name: service_key + description: The key (url) of the service + required: true + schema: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + ServiceKey: + in: query + name: service_key + description: The key (url) of the service + required: true + schema: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + ServiceType: + in: query + name: service_type + description: | + The service type: + * computational - a computational service + * interactive - an interactive service + required: false + schema: + type: string + enum: + - computational + - interactive + example: computational + ServiceBasePath: + in: query + name: service_basepath + description: predefined basepath for the backend service otherwise uses root + required: false + schema: + type: string + example: /x/EycCXbU0H/ + default: '' + ServiceUuid: + in: path + name: service_uuid + description: The uuid of the service + required: true + schema: + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + ServiceVersionPath: + in: path + name: service_version + description: The tag/version of the service + required: true + schema: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + ServiceVersion: + in: query + name: service_tag + description: The tag/version of the service + required: false + schema: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + SaveState: + in: query + name: save_state + description: Save the state prior to removing the service + required: false + schema: + type: boolean + default: true + schemas: + ErrorEnveloped: + type: object + required: + - error + properties: + data: + nullable: true + default: null + error: + type: object + required: + - status + - message + properties: + message: + description: Error message + type: string + example: Unexpected error + errors: + type: array + items: + properties: + code: + type: string + description: Server Exception + example: ServiceUUIDNotFoundError + status: + description: Error code + type: integer + example: 404 + RunningServiceEnveloped: + type: object + required: + - data + properties: + data: + type: object + required: + - published_port + - service_uuid + - service_key + - service_version + - service_host + - service_port + - service_state + - user_id + properties: + published_port: + description: The ports where the service provides its interface + type: integer + format: int32 + minimum: 1 + example: 30000 + entry_point: + description: The entry point where the service provides its interface if specified + type: string + example: /the/entry/point/is/here + service_uuid: + description: The UUID attached to this service + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + service_key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + service_version: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + service_host: + description: service host name within the network + type: string + example: jupyter_E1O2E-LAH + service_port: + description: port to access the service within the network + type: integer + minimum: 1 + example: 8081 + service_basepath: + description: different base path where current service is mounted otherwise defaults to root + type: string + example: /x/E1O2E-LAH + default: '' + service_state: + description: | + the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start + type: string + enum: + - pending + - pulling + - starting + - running + - complete + - failed + service_message: + description: the service message + type: string + example: no suitable node (insufficient resources on 1 node) + user_id: + description: the user that started the service + type: string + example: '123' + error: + nullable: true + default: null + RunningServicesEnveloped: + type: object + required: + - data + properties: + data: + type: array + items: + type: object + required: + - published_port + - service_uuid + - service_key + - service_version + - service_host + - service_port + - service_state + - user_id + properties: + published_port: + description: The ports where the service provides its interface + type: integer + format: int32 + minimum: 1 + example: 30000 + entry_point: + description: The entry point where the service provides its interface if specified + type: string + example: /the/entry/point/is/here + service_uuid: + description: The UUID attached to this service + type: string + example: 123e4567-e89b-12d3-a456-426655440000 + service_key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + service_version: + type: string + description: semantic version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: + - 1.0.0 + - 0.0.1 + service_host: + description: service host name within the network + type: string + example: jupyter_E1O2E-LAH + service_port: + description: port to access the service within the network + type: integer + minimum: 1 + example: 8081 + service_basepath: + description: different base path where current service is mounted otherwise defaults to root + type: string + example: /x/E1O2E-LAH + default: '' + service_state: + description: | + the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start + type: string + enum: + - pending + - pulling + - starting + - running + - complete + - failed + service_message: + description: the service message + type: string + example: no suitable node (insufficient resources on 1 node) + user_id: + description: the user that started the service + type: string + example: '123' + error: + nullable: true + default: null + ServicesEnveloped: + type: object + required: + - data + properties: + data: + type: array + items: + title: simcore node + description: Description of a simcore node 'class' with input and output + type: object + additionalProperties: false + required: + - key + - version + - type + - name + - description + - authors + - contact + - inputs + - outputs + properties: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: simcore/services/comp/itis/sleeper + integration-version: + type: string + description: integration version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + version: + type: string + description: service version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + type: + type: string + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + name: + type: string + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + type: string + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + badges: + type: array + items: + type: object + required: + - name + - image + - url + additionalProperties: false + properties: + name: + type: string + description: Name of the subject + example: travis-ci + image: + type: string + description: Url to the shield + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + url: + type: string + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' + description: + type: string + description: human readable description of the purpose of the node + example: Our best node type + authors: + type: array + minItems: 1 + items: + type: object + required: + - name + - email + additionalProperties: false + properties: + name: + type: string + description: Name of the author + example: Sun Bak + email: + description: Email address + type: string + format: email + example: sun@sense.eight + affiliation: + description: Affiliation of the author + type: string + example: Sense8 + contact: + type: string + format: email + description: email to correspond to the authors about the node + example: lab@net.flix + inputs: + type: object + description: definition of the inputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + type: object + description: all the input configurable for this service + additionalProperties: false + required: + - displayOrder + - label + - description + - type + properties: + displayOrder: + description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' + deprecated: true + type: number + label: + type: string + description: short name for the property + example: + - Age + description: + type: string + description: description of the property + example: + - Age in seconds since 1970 + type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + contentSchema: + title: Content Schema + description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data associated with the named keys in files + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + defaultValue: + description: initial value for this input + type: + - string + - number + - integer + - boolean + example: + - Dog + - true + unit: + title: Unit + description: 'Units of this input value, if a physical quantity' + type: string + widget: + description: custom widget to use instead of the default one determined from the data-type + anyOf: + - type: object + additionalProperties: false + required: + - type + properties: + type: + description: type of the property + type: string + enum: + - TextArea + minHeight: + description: minimum Height of the textarea + type: integer + minimum: 1 + - type: object + additionalProperties: false + required: + - type + - structure + properties: + type: + description: type of the property + type: string + enum: + - SelectBox + structure: + type: array + minItems: 1 + items: + type: object + additionalProperties: false + required: + - key + - label + properties: + key: + type: + - string + - boolean + - number + label: + type: string + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog + additionalProperties: true + outputs: + type: object + description: definition of the outputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + type: object + description: all the output produced by this node + additionalProperties: false + required: + - displayOrder + - label + - description + - type + properties: + displayOrder: + type: number + description: use this to numerically sort the properties for display + example: + - 1 + - -0.2 + label: + type: string + description: short name for the property + example: + - Age + description: + type: string + description: description of the property + example: + - Age in seconds since 1970 + type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' + description: data type expected on this output + example: + - number + - integer + - boolean + - string + - 'data:application/json' + - 'data:application/vnd.ms-excel ' + - 'data:text/plain' + - 'data:application/hdf5' + contentSchema: + title: Content Schema + description: jsonschema of this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + unit: + title: Unit + description: 'Units of the output value, if a physical quantity' + type: string + additionalProperties: true + boot-options: + title: Boot Options + description: Service defined boot options. These get injected in the service as env variables. + type: object + x-patternProperties: + '^[_a-zA-Z0-9]+$': + title: BootOptionMode + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootOptionItem + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + required: + - label + - description + - default + - items + additionalProperties: true + error: + nullable: true + default: null + ServiceExtrasEnveloped: + type: object + required: + - data + properties: + data: + type: object + required: + - node_requirements + properties: + node_requirements: + type: object + required: + - CPU + - RAM + properties: + CPU: + type: number + default: 1 + minimum: 1 + GPU: + type: integer + minimum: 0 + RAM: + type: integer + format: int64 + minimum: 1024 + MPI: + type: integer + maximum: 1 + service_build_details: + type: object + properties: + build_date: + type: string + vcs_ref: + type: string + vcs_url: + type: string + container_spec: + type: object + properties: + command: + type: array + items: + type: string + error: + nullable: true + default: null + HealthCheckEnveloped: + type: object + required: + - data + properties: + data: + type: object + properties: + name: + type: string + example: director service + status: + type: string + example: SERVICE_RUNNING + api_version: + type: string + example: 1.0.0-dev + version: + type: string + example: 1dfcfdc + error: + nullable: true + default: null diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index 1fc0360136a..9bf88dfc184 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1158,534 +1158,150 @@ components: endpoint: type: string Project: - title: simcore project - description: Description of a simcore project - type: object - additionalProperties: false + title: osparc-simcore project required: - uuid - name - description - - prjOwner - - accessRights + - thumbnail - creationDate - lastChangeDate - - thumbnail - workbench + - prjOwner + - accessRights + type: object properties: uuid: + title: Uuid type: string - format: uuid description: project unique identifier - example: 07640335-a91f-468c-ab69-a374fa82078d + format: uuid name: + title: Name type: string description: project name - example: Temporal Distortion Simulator description: + title: Description type: string description: longer one-line description about the project - example: Dabbling in temporal transitions ... - prjOwner: + thumbnail: + title: Thumbnail + maxLength: 2083 + minLength: 1 type: string - format: email - description: user email - accessRights: - type: object - description: object containing the GroupID as key and read/write/execution permissions as value - x-patternProperties: - ^\S+$: - type: object - description: the group id - additionalProperties: false - required: - - read - - write - - delete - properties: - read: - type: boolean - description: gives read access - write: - type: boolean - description: gives write access - delete: - type: boolean - description: gives deletion rights - additionalProperties: true + description: url of the project thumbnail + format: uri creationDate: + title: Creationdate + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' type: string description: project creation date - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' lastChangeDate: - type: string - description: last save date + title: Lastchangedate pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' - thumbnail: type: string - minLength: 0 - maxLength: 2083 - format: uri - description: url of the latest screenshot of the project - example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + description: last save date workbench: + title: Workbench type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - key - - version - - label - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: - - simcore/services/comp/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - version: - type: string - description: semantic version number of the node - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - label: - type: string - description: The short name of the node - example: - - JupyterLab - progress: - type: number - maximum: 100 - minimum: 0 - description: the node progress value - thumbnail: - minLength: 0 - maxLength: 2083 - format: uri - type: string - description: url of the latest screenshot of the node - example: - - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' - runHash: - description: the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated - type: - - string - - 'null' - example: - - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 - inputs: - type: object - description: values of input properties - patternProperties: - '^[-_a-zA-Z0-9]+$': - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - nodeUuid - - output - properties: - nodeUuid: - type: string - format: uuid - output: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - inputsUnits: - type: object - description: values of input unit - patternProperties: - '^[-_a-zA-Z0-9]+$': - type: string - example: - - kilo-meter - - milli-second - - micro-gram - - kelvin - inputAccess: - description: map with key - access level pairs - type: object - patternProperties: - '^[-_a-zA-Z0-9]+$': - type: string - enum: - - Invisible - - ReadOnly - - ReadAndWrite - default: ReadAndWrite - example: - - ReadOnly - inputNodes: - type: array - items: - type: string - format: uuid - description: node IDs of where the node is connected to - example: - - nodeUuid1 - - nodeUuid2 - outputs: - default: {} - type: object - patternProperties: - '^[-_a-zA-Z0-9]+$': - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - outputNode: - type: boolean - deprecated: true - outputNodes: - type: array - items: - type: string - format: uuid - description: Used in group-nodes. Node IDs of those connected to the output - example: - - nodeUuid1 - - nodeUuid2 - parent: - type: - - 'null' - - string - format: uuid - description: Parent's (group-nodes') node ID s. - example: - - nodeUuid1 - - nodeUuid2 - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - deprecated: true - state: - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: contains the node inputs dependencies if they need to be computed first - type: array - uniqueItems: true - items: - type: string - format: uuid - currentStatus: - description: the node's current state - default: NOT_STARTED - example: - - RUNNING - - FAILED - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - bootOptions: - title: Boot Options - description: 'Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services''s defaults.' - type: object - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - additionalProperties: true - ui: + description: Project's pipeline + prjOwner: + title: Prjowner + type: string + description: user email + format: email + accessRights: + title: Accessrights type: object - additionalProperties: true - properties: - workbench: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - position - properties: - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - marker: - type: object - additionalProperties: false - required: - - color - properties: - color: - type: string - description: Marker's color - example: - - '#FF0000' - - '#0000FF' - additionalProperties: true - slideshow: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - position - properties: - position: - type: integer - description: Slide's position - example: - - 0 - - 2 - instructions: - type: - - string - - 'null' - description: Instructions about what to do in this step - example: - - This is a **sleeper** - - 'Please, select the config file defined [in this link](asdf)' - additionalProperties: true - currentNodeId: - type: string - format: uuid - annotations: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - type - - color - - attributes - properties: - type: - type: string - description: Annotation type - example: - - rect - - text - color: - type: string - description: Annotation's color - example: - - '#FF0000' - - '#0000FF' - attributes: - type: object - description: svg attributes - additionalProperties: true + description: object containing the GroupID as key and read/write/execution permissions as value tags: + title: Tags type: array items: type: integer + default: [] classifiers: + title: Classifiers type: array - description: Contains the reference to the project classifiers items: type: string - example: 'some:id:to:a:classifier' - dev: - type: object - description: object used for development purposes only + description: Contains the reference to the project classifiers state: - title: State - description: Project state - anyOf: - - nullable: true - - title: ProjectState - type: object - additionalProperties: false - properties: - locked: - title: Locked - description: The project lock state - allOf: - - title: ProjectLocked - type: object - additionalProperties: false - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: 'If locked, the user that owns the lock' - allOf: - - title: Owner - type: object - additionalProperties: false - properties: - user_id: - title: User Id - type: integer - description: Owner's identifier when registered in the user's database table - example: - - 2 - first_name: - title: First Name - description: Owner first name - example: - - John - type: string - last_name: - title: Last Name - description: Owner last name - example: - - Smith - type: string - required: - - user_id - - first_name - - last_name - status: - title: Status - description: The status of the project + title: ProjectState + required: + - locked + - state + type: object + properties: + locked: + title: Locked + allOf: + - title: ProjectLocked + required: + - value + - status + type: object + properties: + value: + title: Value + type: boolean + description: True if the project is locked + owner: + title: Owner + allOf: + - title: Owner + required: + - user_id + - first_name + - last_name + type: object + properties: + user_id: + title: User Id + exclusiveMinimum: true + type: integer + description: Owner's identifier when registered in the user's database table + minimum: 0 + first_name: + title: First Name + type: string + description: Owner first name + last_name: + title: Last Name + type: string + description: Owner last name + additionalProperties: false + description: 'If locked, the user that owns the lock' + status: + allOf: + - title: ProjectStatus enum: - CLOSED - CLOSING - CLONING - - OPENING - EXPORTING + - OPENING - OPENED type: string - required: - - value - - status - state: - title: State - description: The project running state - allOf: - - title: ProjectRunningState - type: object - additionalProperties: false - properties: - value: - title: RunningState description: An enumeration. + description: The status of the project + additionalProperties: false + description: The project lock state + state: + title: State + allOf: + - title: ProjectRunningState + required: + - value + type: object + properties: + value: + allOf: + - title: RunningState enum: - UNKNOWN - - NOT_STARTED - PUBLISHED + - NOT_STARTED - PENDING - STARTED - RETRY @@ -1693,15 +1309,41 @@ components: - FAILED - ABORTED type: string - required: - - value - required: - - locked - - state - quality: + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + description: The running state of the project + additionalProperties: false + description: The project running state + additionalProperties: false + ui: + title: StudyUI type: object + properties: + workbench: + title: Workbench + type: object + slideshow: + title: Slideshow + type: object + currentNodeId: + title: Currentnodeid + type: string + format: uuid + annotations: + title: Annotations + type: object + quality: title: Quality - description: Object containing Quality Assessment related data + type: object + description: stores the study quality assessment + default: {} + dev: + title: Dev + type: object + description: object used for development purposes only + additionalProperties: false responses: DefaultErrorResponse: description: Unexpected error diff --git a/services/web/server/Makefile b/services/web/server/Makefile index 2819dc09da7..7997ba098ce 100644 --- a/services/web/server/Makefile +++ b/services/web/server/Makefile @@ -30,14 +30,14 @@ run-devel: ## runs app with pg service -_project_models_rest.py: ## auto-generates pydantic model for project rest API model - # auto-generates $@ from $< - datamodel-codegen \ - --input $(CURDIR)/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json \ - --input-file-type jsonschema \ - --snake-case-field \ - --use-schema-description \ - --output $@ +# _project_models_rest.py: ## auto-generates pydantic model for project rest API model +# # auto-generates $@ from $< +# datamodel-codegen \ +# --input $(CURDIR)/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json \ +# --input-file-type jsonschema \ +# --snake-case-field \ +# --use-schema-description \ +# --output $@ 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 3f035b6204c..36be7132e9a 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 @@ -2378,98 +2378,96 @@ paths: type: string description: Contains the reference to the project classifiers state: - anyOf: - - title: ProjectState - required: - - locked - - state - type: object - properties: - locked: - title: Locked - allOf: - - title: ProjectLocked - required: - - value - - status - type: object - properties: - value: - title: Value - type: boolean - description: True if the project is locked - owner: - title: Owner - allOf: - - title: Owner - required: - - user_id - - first_name - - last_name - type: object - properties: - user_id: - title: User Id - exclusiveMinimum: true - type: integer - description: Owner's identifier when registered in the user's database table - minimum: 0 - first_name: - title: First Name - type: string - description: Owner first name - last_name: - title: Last Name - type: string - description: Owner last name - additionalProperties: false - description: 'If locked, the user that owns the lock' - status: - allOf: - - title: ProjectStatus - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED + title: ProjectState + required: + - locked + - state + type: object + properties: + locked: + title: Locked + allOf: + - title: ProjectLocked + required: + - value + - status + type: object + properties: + value: + title: Value + type: boolean + description: True if the project is locked + owner: + title: Owner + allOf: + - title: Owner + required: + - user_id + - first_name + - last_name + type: object + properties: + user_id: + title: User Id + exclusiveMinimum: true + type: integer + description: Owner's identifier when registered in the user's database table + minimum: 0 + first_name: + title: First Name type: string - description: An enumeration. - description: The status of the project - additionalProperties: false - description: The project lock state - state: - title: State - allOf: - - title: ProjectRunningState - required: - - value - type: object - properties: - value: - allOf: - - title: RunningState - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED + description: Owner first name + last_name: + title: Last Name type: string - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state + description: Owner last name + additionalProperties: false + description: 'If locked, the user that owns the lock' + status: + allOf: + - title: ProjectStatus + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + description: An enumeration. + description: The status of the project + additionalProperties: false + description: The project lock state + state: + title: State + allOf: + - title: ProjectRunningState + required: + - value + type: object + properties: + value: + allOf: + - title: RunningState + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + description: |- + State of execution of a project's computational workflow - description: The running state of the project - additionalProperties: false - description: The project running state - additionalProperties: false + SEE StateType for task state + description: The running state of the project + additionalProperties: false + description: The project running state + additionalProperties: false ui: title: StudyUI type: object diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json new file mode 100644 index 00000000000..9f1662ccdf3 --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json @@ -0,0 +1,859 @@ +{ + "title": "ServiceDockerData", + "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "short, human readable name for the node", + "example": "Fast Counter", + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "description": { + "title": "Description", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ], + "type": "string" + }, + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "integration-version": { + "title": "Integration-Version", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ], + "type": "string" + }, + "type": { + "description": "service type", + "examples": [ + "computational" + ], + "allOf": [ + { + "$ref": "#/definitions/ServiceType" + } + ] + }, + "badges": { + "title": "Badges", + "type": "array", + "items": { + "$ref": "#/definitions/Badge" + } + }, + "authors": { + "title": "Authors", + "minItems": 1, + "type": "array", + "items": { + "$ref": "#/definitions/Author" + } + }, + "contact": { + "title": "Contact", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ], + "type": "string", + "format": "email" + }, + "inputs": { + "title": "Inputs", + "description": "definition of the inputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/ServiceInput" + } + } + }, + "outputs": { + "title": "Outputs", + "description": "definition of the outputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/ServiceOutput" + } + } + }, + "boot-options": { + "title": "Boot-Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "$ref": "#/definitions/BootOption" + } + } + } + }, + "required": [ + "name", + "description", + "key", + "version", + "type", + "authors", + "contact", + "inputs", + "outputs" + ], + "additionalProperties": false, + "examples": [ + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "displayOrder": 1, + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "displayOrder": 1, + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + } + }, + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + }, + "boot-options": { + "example_service_defined_boot_mode": { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + "example_service_defined_theme_selection": { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + } + } + ], + "definitions": { + "ServiceType": { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + }, + "Badge": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + }, + "Author": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + }, + "WidgetType": { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + }, + "TextArea": { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + "Structure": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + }, + "SelectBox": { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "$ref": "#/definitions/Structure" + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + }, + "Widget": { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "$ref": "#/definitions/WidgetType" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "$ref": "#/definitions/TextArea" + }, + { + "$ref": "#/definitions/SelectBox" + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + }, + "ServiceInput": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "$ref": "#/definitions/Widget" + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + }, + "ServiceOutput": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "$ref": "#/definitions/Widget" + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + }, + "BootChoice": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + }, + "BootOption": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/BootChoice" + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json new file mode 100644 index 00000000000..36270b43f4b --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json @@ -0,0 +1,989 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Node" + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "$ref": "#/definitions/AccessRights" + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "$ref": "#/definitions/ProjectState" + }, + "ui": { + "$ref": "#/definitions/StudyUI" + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "example": { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + "examples": [ + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "example": { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/PortLink" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "$ref": "#/definitions/AccessEnum" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/SimCoreFileLink" + }, + { + "$ref": "#/definitions/DatCoreFileLink" + }, + { + "$ref": "#/definitions/DownloadLink" + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "$ref": "#/definitions/NodeState" + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "$ref": "#/definitions/Owner" + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "$ref": "#/definitions/ProjectStatus" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "$ref": "#/definitions/RunningState" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "$ref": "#/definitions/ProjectLocked" + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "$ref": "#/definitions/ProjectRunningState" + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "$ref": "#/definitions/Position" + } + ] + }, + "marker": { + "$ref": "#/definitions/Marker" + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/WorkbenchUI" + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Slideshow" + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "$ref": "#/definitions/Annotation" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} diff --git a/services/web/server/tests/unit/conftest.py b/services/web/server/tests/unit/conftest.py index 24361afdc04..4c14dd8f8fa 100644 --- a/services/web/server/tests/unit/conftest.py +++ b/services/web/server/tests/unit/conftest.py @@ -69,7 +69,7 @@ def factory(): @pytest.fixture def project_schema_file(api_version_prefix) -> Path: prj_schema_path = resources.get_path( - f"api/{api_version_prefix}/schemas/project-v0.0.1.json" + f"api/{api_version_prefix}/schemas/json-schema-project-generated.json" ) assert prj_schema_path.exists() return prj_schema_path diff --git a/services/web/server/tests/unit/isolated/test_director_api.py b/services/web/server/tests/unit/isolated/test_director_api.py index 0e3056b176a..9b07215f475 100644 --- a/services/web/server/tests/unit/isolated/test_director_api.py +++ b/services/web/server/tests/unit/isolated/test_director_api.py @@ -65,7 +65,7 @@ def registry_service_model_schema(osparc_simcore_root_dir: Path) -> Dict: # https://github.com/ITISFoundation/osparc-simcore/tree/master/api/specs/common/schemas/node-meta-v0.0.1.json schema = json.loads( ( - osparc_simcore_root_dir / "api/specs/common/schemas/node-meta-v0.0.1.json" + osparc_simcore_root_dir / "api/specs/common/schemas/json-schema-node-meta-generated.json" ).read_text() ) diff --git a/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py b/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py index 9c112f6da79..430a471ddb9 100644 --- a/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py +++ b/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py @@ -23,7 +23,7 @@ @pytest.fixture def project_jsonschema(): - with resources.stream(f"api/{API_VTAG}/schemas/project-v0.0.1.json") as fh: + with resources.stream(f"api/{API_VTAG}/schemas/json-schema-project-generated.json") as fh: return json.load(fh) @@ -116,7 +116,8 @@ def default_thumbnail(cls, v): assert project_resp_body.dict() == NEW_PROJECT.response_body -@pytest.mark.skip(reason="DEV") +# @pytest.mark.skip(reason="DEV") +@pytest.mark.testit def test_generated_model_in_sync_with_json_schema_specs( diff_json_schemas: Callable, project_jsonschema: dict[str, Any] ): From fd650b1d8cf205fdd7c4fa91a027c544d789eca5 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Sun, 12 Mar 2023 19:15:04 +0100 Subject: [PATCH 03/34] WIP: refactoring/testing different options how to replace old node-meta and project open api specs --- api/specs/common/schemas/Makefile | 10 +- .../json-schema-node-meta-generated.json | 858 ------ .../json-schema-project-generated.json | 989 ------ ...-meta-v0.0.1-pydantic-converted-clean.yaml | 589 ++++ .../node-meta-v0.0.1-pydantic-converted.yaml | 1270 ++++++++ .../schemas/node-meta-v0.0.1-pydantic.json | 1823 +++++++++++ .../schemas/openapi-node-meta-generated.yaml | 3 - .../schemas/openapi-project-generated.yaml | 10 - ...oject-v0.0.1-pydantic-converted-clean.yaml | 788 +++++ .../project-v0.0.1-pydantic-converted.yaml | 2024 ++++++++++++ .../schemas/project-v0.0.1-pydantic.json | 2721 +++++++++++++++++ api/specs/common/schemas/project.yaml | 6 +- .../schemas/scripts/remove_definitions.py | 17 + api/specs/common/schemas/services.yaml | 4 +- .../webserver/scripts/openapi_node_meta.py | 8 +- .../webserver/scripts/openapi_project.py | 9 +- api/specs/webserver/scripts/requirements.txt | 1 + .../src/models_library/projects_nodes_io.py | 21 +- .../api/v0/openapi.yaml | 1986 ++++++++++-- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 1823 +++++++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 2721 +++++++++++++++++ .../api/v0/openapi.yaml | 818 ++++- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 1823 +++++++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 2721 +++++++++++++++++ .../api/v0/openapi.yaml | 818 ++++- .../json-schema-node-meta-generated.json | 859 ------ .../json-schema-project-generated.json | 989 ------ .../v0/schemas/node-meta-v0.0.1-pydantic.json | 1823 +++++++++++ .../api/v0/schemas/node-meta-v0.0.1.json | 477 +++ .../v0/schemas/project-v0.0.1-pydantic.json | 2721 +++++++++++++++++ .../api/v0/schemas/project-v0.0.1.json | 768 +++++ 31 files changed, 27210 insertions(+), 4288 deletions(-) delete mode 100644 api/specs/common/schemas/json-schema-node-meta-generated.json delete mode 100644 api/specs/common/schemas/json-schema-project-generated.json create mode 100644 api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml create mode 100644 api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml create mode 100644 api/specs/common/schemas/node-meta-v0.0.1-pydantic.json create mode 100644 api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml create mode 100644 api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml create mode 100644 api/specs/common/schemas/project-v0.0.1-pydantic.json create mode 100644 api/specs/common/schemas/scripts/remove_definitions.py create mode 100644 services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json create mode 100644 services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json create mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json create mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json diff --git a/api/specs/common/schemas/Makefile b/api/specs/common/schemas/Makefile index cb1785ccd95..aae1ea273ad 100644 --- a/api/specs/common/schemas/Makefile +++ b/api/specs/common/schemas/Makefile @@ -1,7 +1,8 @@ .PHONY: all build clean help objects = $(wildcard *.json) -outputs := $(objects:.json=-converted.yaml) +outputs := $(objects:.json=-converted-clean.yaml) + TOOL_IMAGE_NAME := json-schema-to-openapi-schema @@ -15,6 +16,13 @@ all: check $(outputs) -v ${CURDIR}:/output \ $(TOOL_IMAGE_NAME) +.PRECIOUS: %-converted.yaml +%-converted-clean.yaml:%-converted.yaml + # remove the "definition" key from %-converted.yaml + python scripts/remove_definitions.py $^ $@ + # # remove the temporary created %-converted.yaml + # rm $^ + # target: check – Checks whether tool is installed check: @docker history $(TOOL_IMAGE_NAME) 2>/dev/null \ diff --git a/api/specs/common/schemas/json-schema-node-meta-generated.json b/api/specs/common/schemas/json-schema-node-meta-generated.json deleted file mode 100644 index 712a173cbd6..00000000000 --- a/api/specs/common/schemas/json-schema-node-meta-generated.json +++ /dev/null @@ -1,858 +0,0 @@ -{ - "title": "ServiceDockerData", - "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "short, human readable name for the node", - "example": "Fast Counter", - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "description": { - "title": "Description", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ], - "type": "string" - }, - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "integration-version": { - "title": "Integration-Version", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ], - "type": "string" - }, - "type": { - "description": "service type", - "examples": [ - "computational" - ], - "allOf": [ - { - "$ref": "#/definitions/ServiceType" - } - ] - }, - "badges": { - "title": "Badges", - "type": "array", - "items": { - "$ref": "#/definitions/Badge" - } - }, - "authors": { - "title": "Authors", - "minItems": 1, - "type": "array", - "items": { - "$ref": "#/definitions/Author" - } - }, - "contact": { - "title": "Contact", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ], - "type": "string", - "format": "email" - }, - "inputs": { - "title": "Inputs", - "description": "definition of the inputs of this node", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/ServiceInput" - } - }, - "outputs": { - "title": "Outputs", - "description": "definition of the outputs of this node", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/ServiceOutput" - } - } - }, - "boot-options": { - "title": "Boot-Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "$ref": "#/definitions/BootOption" - } - } - } - }, - "required": [ - "name", - "description", - "key", - "version", - "type", - "authors", - "contact", - "inputs", - "outputs" - ], - "additionalProperties": false, - "examples": [ - { - "name": "oSparc Python Runner", - "key": "simcore/services/comp/osparc-python-runner", - "type": "computational", - "integration-version": "1.0.0", - "version": "1.7.0", - "description": "oSparc Python Runner", - "contact": "smith@company.com", - "authors": [ - { - "name": "John Smith", - "email": "smith@company.com", - "affiliation": "Company" - }, - { - "name": "Richard Brown", - "email": "brown@uni.edu", - "affiliation": "University" - } - ], - "inputs": { - "input_1": { - "displayOrder": 1, - "label": "Input data", - "description": "Any code, requirements or data file", - "type": "data:*/*" - } - }, - "outputs": { - "output_1": { - "displayOrder": 1, - "label": "Output data", - "description": "All data produced by the script is zipped as output_data.zip", - "type": "data:*/*", - "fileToKeyMap": { - "output_data.zip": "output_1" - } - } - } - }, - { - "name": "oSparc Python Runner", - "key": "simcore/services/comp/osparc-python-runner", - "type": "computational", - "integration-version": "1.0.0", - "version": "1.7.0", - "description": "oSparc Python Runner", - "contact": "smith@company.com", - "authors": [ - { - "name": "John Smith", - "email": "smith@company.com", - "affiliation": "Company" - }, - { - "name": "Richard Brown", - "email": "brown@uni.edu", - "affiliation": "University" - } - ], - "inputs": { - "input_1": { - "label": "Input data", - "description": "Any code, requirements or data file", - "type": "data:*/*" - } - }, - "outputs": { - "output_1": { - "label": "Output data", - "description": "All data produced by the script is zipped as output_data.zip", - "type": "data:*/*", - "fileToKeyMap": { - "output_data.zip": "output_1" - } - } - }, - "boot-options": { - "example_service_defined_boot_mode": { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - "example_service_defined_theme_selection": { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - } - } - ], - "definitions": { - "ServiceType": { - "title": "ServiceType", - "description": "An enumeration.", - "enum": [ - "computational", - "dynamic", - "frontend", - "backend" - ], - "type": "string" - }, - "Badge": { - "title": "Badge", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ], - "type": "string" - }, - "image": { - "title": "Image", - "description": "Url to the badge", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "url": { - "title": "Url", - "description": "Link to the status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - } - }, - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false - }, - "Author": { - "title": "Author", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the author", - "example": "Jim Knopf", - "type": "string" - }, - "email": { - "title": "Email", - "description": "Email address", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ], - "type": "string", - "format": "email" - }, - "affiliation": { - "title": "Affiliation", - "description": "Affiliation of the author", - "examples": [ - "Sense8", - "Babylon 5" - ], - "type": "string" - } - }, - "required": [ - "name", - "email" - ], - "additionalProperties": false - }, - "WidgetType": { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - }, - "TextArea": { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - "Structure": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - }, - "SelectBox": { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "$ref": "#/definitions/Structure" - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - }, - "Widget": { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "$ref": "#/definitions/WidgetType" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "$ref": "#/definitions/TextArea" - }, - { - "$ref": "#/definitions/SelectBox" - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - }, - "ServiceInput": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "$ref": "#/definitions/Widget" - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] - }, - "ServiceOutput": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "$ref": "#/definitions/Widget" - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] - }, - "BootChoice": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - }, - "BootOption": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/BootChoice" - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } -} \ No newline at end of file diff --git a/api/specs/common/schemas/json-schema-project-generated.json b/api/specs/common/schemas/json-schema-project-generated.json deleted file mode 100644 index 36270b43f4b..00000000000 --- a/api/specs/common/schemas/json-schema-project-generated.json +++ /dev/null @@ -1,989 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ], - "type": "string", - "format": "uuid" - }, - "name": { - "title": "Name", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ], - "type": "string" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ], - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Node" - } - } - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "patternProperties": { - "^\\S+$": { - "$ref": "#/definitions/AccessRights" - } - } - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "type": "array", - "items": { - "type": "string" - } - }, - "state": { - "$ref": "#/definitions/ProjectState" - }, - "ui": { - "$ref": "#/definitions/StudyUI" - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/PortLink" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/AccessEnum" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "$ref": "#/definitions/NodeState" - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "$ref": "#/definitions/Owner" - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "$ref": "#/definitions/ProjectStatus" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "$ref": "#/definitions/ProjectLocked" - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "$ref": "#/definitions/ProjectRunningState" - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "marker": { - "$ref": "#/definitions/Marker" - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/WorkbenchUI" - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Slideshow" - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Annotation" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml new file mode 100644 index 00000000000..d5d53587ca6 --- /dev/null +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -0,0 +1,589 @@ +additionalProperties: false +description: 'Static metadata for a service injected in the image labels + + + This is one to one with node-meta-v0.0.1.json' +example: + authors: + - affiliation: Company + email: smith@company.com + name: John Smith + - affiliation: University + email: brown@uni.edu + name: Richard Brown + contact: smith@company.com + description: oSparc Python Runner + inputs: + input_1: + description: Any code, requirements or data file + displayOrder: 1 + label: Input data + type: data:*/* + integration-version: 1.0.0 + key: simcore/services/comp/osparc-python-runner + name: oSparc Python Runner + outputs: + output_1: + description: All data produced by the script is zipped as output_data.zip + displayOrder: 1 + fileToKeyMap: + output_data.zip: output_1 + label: Output data + type: data:*/* + type: computational + version: 1.7.0 +properties: + authors: + items: + additionalProperties: false + properties: + affiliation: + description: Affiliation of the author + example: Sense8 + title: Affiliation + type: string + email: + description: Email address + example: sun@sense.eight + format: email + title: Email + type: string + name: + description: Name of the author + example: Jim Knopf + title: Name + type: string + required: + - name + - email + title: Author + type: object + minItems: 1 + title: Authors + type: array + badges: + items: + additionalProperties: false + properties: + image: + description: Url to the badge + example: https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master + format: uri + maxLength: 2083 + minLength: 1 + title: Image + type: string + name: + description: Name of the subject + example: travis-ci + title: Name + type: string + url: + description: Link to the status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of + CI: build, test and pushing images''' + format: uri + maxLength: 2083 + minLength: 1 + title: Url + type: string + required: + - name + - image + - url + title: Badge + type: object + title: Badges + type: array + boot-options: + additionalProperties: true + description: Service defined boot options. These get injected in the service as + env variables. + title: Boot-Options + type: object + x-patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object + contact: + description: email to correspond to the authors about the node + example: lab@net.flix + format: email + title: Contact + type: string + description: + description: human readable description of the purpose of the node + example: Our best node type + title: Description + type: string + inputs: + additionalProperties: true + description: definition of the inputs of this node + title: Inputs + type: object + x-patternProperties: + ^[-_a-zA-Z0-9]+$: + additionalProperties: false + description: Metadata on a service input port + example: + - description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: data:*/* + - defaultValue: 0 + description: Time to wait before completion + displayOrder: 2 + label: Sleep Time - v2 + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - defaultValue: 0 + description: Time to wait before completion + label: Sleep Time - latest + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - contentSchema: + items: + type: number + title: list[number] + type: array + description: Some array of numbers + label: array_numbers + type: ref_contentSchema + - contentSchema: + properties: + b: + title: Bool + type: boolean + i: + default: 3 + title: Int + type: integer + s: + title: Str + type: string + required: + - b + - s + title: an object named A + type: object + description: Some object + label: my_object + type: ref_contentSchema + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: + - Dog + - true + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. + This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type + is allowed + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + title: Type + type: string + unit: + description: Units, when it refers to a physical quantity + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined + from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object + integration-version: + description: integration version number + example: 1.0.0 + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + title: Integration-Version + type: string + key: + description: distinctive name for the node based on the docker registry path + example: simcore/services/comp/itis/sleeper + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + title: Key + type: string + name: + description: short, human readable name for the node + example: Fast Counter + title: Name + type: string + outputs: + additionalProperties: true + description: definition of the outputs of this node + title: Outputs + type: object + x-patternProperties: + ^[-_a-zA-Z0-9]+$: + additionalProperties: false + description: Base class for service input/outputs + example: + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept - units + type: number + unit: second + - description: Time the service waited before completion + label: Time Slept - w/o displayorder + type: number + unit: second + - description: Output file uploaded from the outputs folder + displayOrder: 4 + label: Output file 1 + type: data:*/* + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. + This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type + is allowed + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + title: Type + type: string + unit: + description: Units, when it refers to a physical quantity + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined + from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object + thumbnail: + description: url to the thumbnail + example: https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + type: + allOf: + - description: An enumeration. + enum: + - computational + - dynamic + - frontend + - backend + title: ServiceType + type: string + description: service type + example: computational + version: + description: service version number + example: 1.0.0 + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + title: Version + type: string +required: +- name +- description +- key +- version +- type +- authors +- contact +- inputs +- outputs +title: ServiceDockerData +type: object diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml new file mode 100644 index 00000000000..f6ddc5cc80e --- /dev/null +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -0,0 +1,1270 @@ +title: ServiceDockerData +description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json +type: object +properties: + name: + title: Name + description: short, human readable name for the node + example: Fast Counter + type: string + thumbnail: + title: Thumbnail + description: url to the thumbnail + minLength: 1 + maxLength: 2083 + format: uri + type: string + example: >- + https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png + description: + title: Description + description: human readable description of the purpose of the node + type: string + example: Our best node type + key: + title: Key + description: distinctive name for the node based on the docker registry path + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + type: string + example: simcore/services/comp/itis/sleeper + version: + title: Version + description: service version number + pattern: >- + ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + example: 1.0.0 + integration-version: + title: Integration-Version + description: integration version number + pattern: >- + ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + example: 1.0.0 + type: + description: service type + allOf: + - title: ServiceType + description: An enumeration. + enum: + - computational + - dynamic + - frontend + - backend + type: string + example: computational + badges: + title: Badges + type: array + items: + title: Badge + type: object + properties: + name: + title: Name + description: Name of the subject + type: string + example: travis-ci + image: + title: Image + description: Url to the badge + minLength: 1 + maxLength: 2083 + format: uri + type: string + example: >- + https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master + url: + title: Url + description: Link to the status + minLength: 1 + maxLength: 2083 + format: uri + type: string + example: >- + https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: + build, test and pushing images' + required: + - name + - image + - url + additionalProperties: false + authors: + title: Authors + minItems: 1 + type: array + items: + title: Author + type: object + properties: + name: + title: Name + description: Name of the author + example: Jim Knopf + type: string + email: + title: Email + description: Email address + type: string + format: email + example: sun@sense.eight + affiliation: + title: Affiliation + description: Affiliation of the author + type: string + example: Sense8 + required: + - name + - email + additionalProperties: false + contact: + title: Contact + description: email to correspond to the authors about the node + type: string + format: email + example: lab@net.flix + inputs: + title: Inputs + description: definition of the inputs of this node + type: object + x-patternProperties: + ^[-_a-zA-Z0-9]+$: + title: ServiceInput + description: Metadata on a service input port + type: object + properties: + displayOrder: + title: Displayorder + description: >- + DEPRECATED: new display order is taken from the item position. + This will be removed. + deprecated: true + type: number + label: + title: Label + description: short name for the property + example: Age + type: string + description: + title: Description + description: description of the property + example: Age in seconds since 1970 + type: string + type: + title: Type + description: >- + data type expected on this input glob matching for data type is + allowed + pattern: >- + ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - >- + data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + type: string + contentSchema: + title: Contentschema + description: >- + jsonschema of this input/output. Required when + type='ref_contentSchema' + type: object + fileToKeyMap: + title: Filetokeymap + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + type: object + patternProperties: + .+: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + unit: + title: Unit + description: Units, when it refers to a physical quantity + type: string + defaultValue: + title: Defaultvalue + example: + - Dog + - true + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + widget: + title: Widget + description: >- + custom widget to use instead of the default one determined from + the data-type + allOf: + - title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + exclusiveMinimum: 0 + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + required: + - label + - description + - type + additionalProperties: false + example: + - displayOrder: 1 + label: Input files - file-wo-widget + description: Files downloaded from service connected at the input + type: data:*/* + - displayOrder: 2 + label: Sleep Time - v2 + description: Time to wait before completion + type: number + defaultValue: 0 + unit: second + widget: + type: TextArea + details: + minHeight: 3 + - label: Sleep Time - latest + description: Time to wait before completion + type: number + defaultValue: 0 + unit: second + widget: + type: TextArea + details: + minHeight: 3 + - label: array_numbers + description: Some array of numbers + type: ref_contentSchema + contentSchema: + title: list[number] + type: array + items: + type: number + - label: my_object + description: Some object + type: ref_contentSchema + contentSchema: + title: an object named A + type: object + properties: + i: + title: Int + type: integer + default: 3 + b: + title: Bool + type: boolean + s: + title: Str + type: string + required: + - b + - s + additionalProperties: true + outputs: + title: Outputs + description: definition of the outputs of this node + type: object + x-patternProperties: + ^[-_a-zA-Z0-9]+$: + title: ServiceOutput + description: Base class for service input/outputs + type: object + properties: + displayOrder: + title: Displayorder + description: >- + DEPRECATED: new display order is taken from the item position. + This will be removed. + deprecated: true + type: number + label: + title: Label + description: short name for the property + example: Age + type: string + description: + title: Description + description: description of the property + example: Age in seconds since 1970 + type: string + type: + title: Type + description: >- + data type expected on this input glob matching for data type is + allowed + pattern: >- + ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - >- + data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + type: string + contentSchema: + title: Contentschema + description: >- + jsonschema of this input/output. Required when + type='ref_contentSchema' + type: object + fileToKeyMap: + title: Filetokeymap + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + type: object + patternProperties: + .+: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + unit: + title: Unit + description: Units, when it refers to a physical quantity + type: string + widget: + title: Widget + description: >- + custom widget to use instead of the default one determined from + the data-type + deprecated: true + allOf: + - title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + exclusiveMinimum: 0 + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + required: + - label + - description + - type + additionalProperties: false + example: + - displayOrder: 2 + label: Time Slept + description: Time the service waited before completion + type: number + - displayOrder: 2 + label: Time Slept - units + description: Time the service waited before completion + type: number + unit: second + - label: Time Slept - w/o displayorder + description: Time the service waited before completion + type: number + unit: second + - label: Output file 1 + displayOrder: 4 + description: Output file uploaded from the outputs folder + type: data:*/* + additionalProperties: true + boot-options: + title: Boot-Options + description: >- + Service defined boot options. These get injected in the service as env + variables. + type: object + x-patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + title: BootOption + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootChoice + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + example: + - label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode + - label: Application theme + description: Select a theme for the application + default: b + items: + a: + label: Clear + description: Using white background + b: + label: Dark + description: Using black and gray tones + required: + - label + - description + - default + - items + example: + - label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode + - label: Application theme + description: Select a theme for the application + default: b + items: + a: + label: Clear + description: Using white background + b: + label: Dark + description: Using black and gray tones + additionalProperties: true +required: + - name + - description + - key + - version + - type + - authors + - contact + - inputs + - outputs +additionalProperties: false +definitions: + ServiceType: + title: ServiceType + description: An enumeration. + enum: + - computational + - dynamic + - frontend + - backend + type: string + Badge: + title: Badge + type: object + properties: + name: + title: Name + description: Name of the subject + example: + - travis-ci + - coverals.io + - github.io + type: string + image: + title: Image + description: Url to the badge + example: + - >- + https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master + - >- + https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master + - >- + https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation + minLength: 1 + maxLength: 2083 + format: uri + type: string + url: + title: Url + description: Link to the status + example: + - >- + https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: + build, test and pushing images' + - >- + https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master + 'Test coverage' + - https://itisfoundation.github.io/ + minLength: 1 + maxLength: 2083 + format: uri + type: string + required: + - name + - image + - url + additionalProperties: false + Author: + title: Author + type: object + properties: + name: + title: Name + description: Name of the author + example: Jim Knopf + type: string + email: + title: Email + description: Email address + example: + - sun@sense.eight + - deleen@minbar.bab + type: string + format: email + affiliation: + title: Affiliation + description: Affiliation of the author + example: + - Sense8 + - Babylon 5 + type: string + required: + - name + - email + additionalProperties: false + WidgetType: + title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + TextArea: + title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + exclusiveMinimum: 0 + type: integer + required: + - minHeight + additionalProperties: false + Structure: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + SelectBox: + title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + Widget: + title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + exclusiveMinimum: 0 + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + ServiceInput: + title: ServiceInput + description: Metadata on a service input port + type: object + properties: + displayOrder: + title: Displayorder + description: >- + DEPRECATED: new display order is taken from the item position. This + will be removed. + deprecated: true + type: number + label: + title: Label + description: short name for the property + example: Age + type: string + description: + title: Description + description: description of the property + example: Age in seconds since 1970 + type: string + type: + title: Type + description: >- + data type expected on this input glob matching for data type is + allowed + pattern: >- + ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - >- + data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + type: string + contentSchema: + title: Contentschema + description: >- + jsonschema of this input/output. Required when + type='ref_contentSchema' + type: object + fileToKeyMap: + title: Filetokeymap + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + type: object + patternProperties: + .+: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + unit: + title: Unit + description: Units, when it refers to a physical quantity + type: string + defaultValue: + title: Defaultvalue + example: + - Dog + - true + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + widget: + title: Widget + description: >- + custom widget to use instead of the default one determined from the + data-type + allOf: + - title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + exclusiveMinimum: 0 + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + required: + - label + - description + - type + additionalProperties: false + example: + - displayOrder: 1 + label: Input files - file-wo-widget + description: Files downloaded from service connected at the input + type: data:*/* + - displayOrder: 2 + label: Sleep Time - v2 + description: Time to wait before completion + type: number + defaultValue: 0 + unit: second + widget: + type: TextArea + details: + minHeight: 3 + - label: Sleep Time - latest + description: Time to wait before completion + type: number + defaultValue: 0 + unit: second + widget: + type: TextArea + details: + minHeight: 3 + - label: array_numbers + description: Some array of numbers + type: ref_contentSchema + contentSchema: + title: list[number] + type: array + items: + type: number + - label: my_object + description: Some object + type: ref_contentSchema + contentSchema: + title: an object named A + type: object + properties: + i: + title: Int + type: integer + default: 3 + b: + title: Bool + type: boolean + s: + title: Str + type: string + required: + - b + - s + ServiceOutput: + title: ServiceOutput + description: Base class for service input/outputs + type: object + properties: + displayOrder: + title: Displayorder + description: >- + DEPRECATED: new display order is taken from the item position. This + will be removed. + deprecated: true + type: number + label: + title: Label + description: short name for the property + example: Age + type: string + description: + title: Description + description: description of the property + example: Age in seconds since 1970 + type: string + type: + title: Type + description: >- + data type expected on this input glob matching for data type is + allowed + pattern: >- + ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - >- + data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + type: string + contentSchema: + title: Contentschema + description: >- + jsonschema of this input/output. Required when + type='ref_contentSchema' + type: object + fileToKeyMap: + title: Filetokeymap + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + type: object + patternProperties: + .+: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + unit: + title: Unit + description: Units, when it refers to a physical quantity + type: string + widget: + title: Widget + description: >- + custom widget to use instead of the default one determined from the + data-type + deprecated: true + allOf: + - title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + exclusiveMinimum: 0 + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + required: + - label + - description + - type + additionalProperties: false + example: + - displayOrder: 2 + label: Time Slept + description: Time the service waited before completion + type: number + - displayOrder: 2 + label: Time Slept - units + description: Time the service waited before completion + type: number + unit: second + - label: Time Slept - w/o displayorder + description: Time the service waited before completion + type: number + unit: second + - label: Output file 1 + displayOrder: 4 + description: Output file uploaded from the outputs folder + type: data:*/* + BootChoice: + title: BootChoice + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + example: + - label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode + - label: Application theme + description: Select a theme for the application + default: b + items: + a: + label: Clear + description: Using white background + b: + label: Dark + description: Using black and gray tones + BootOption: + title: BootOption + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootChoice + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + example: + - label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode + - label: Application theme + description: Select a theme for the application + default: b + items: + a: + label: Clear + description: Using white background + b: + label: Dark + description: Using black and gray tones + required: + - label + - description + - default + - items + example: + - label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode + - label: Application theme + description: Select a theme for the application + default: b + items: + a: + label: Clear + description: Using white background + b: + label: Dark + description: Using black and gray tones +example: + name: oSparc Python Runner + key: simcore/services/comp/osparc-python-runner + type: computational + integration-version: 1.0.0 + version: 1.7.0 + description: oSparc Python Runner + contact: smith@company.com + authors: + - name: John Smith + email: smith@company.com + affiliation: Company + - name: Richard Brown + email: brown@uni.edu + affiliation: University + inputs: + input_1: + displayOrder: 1 + label: Input data + description: Any code, requirements or data file + type: data:*/* + outputs: + output_1: + displayOrder: 1 + label: Output data + description: All data produced by the script is zipped as output_data.zip + type: data:*/* + fileToKeyMap: + output_data.zip: output_1 diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json new file mode 100644 index 00000000000..6a5c0c7e6c7 --- /dev/null +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -0,0 +1,1823 @@ +{ + "title": "ServiceDockerData", + "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "short, human readable name for the node", + "example": "Fast Counter", + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "description": { + "title": "Description", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ], + "type": "string" + }, + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "integration-version": { + "title": "Integration-Version", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ], + "type": "string" + }, + "type": { + "description": "service type", + "examples": [ + "computational" + ], + "allOf": [ + { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + } + ] + }, + "badges": { + "title": "Badges", + "type": "array", + "items": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + } + }, + "authors": { + "title": "Authors", + "minItems": 1, + "type": "array", + "items": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + } + }, + "contact": { + "title": "Contact", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ], + "type": "string", + "format": "email" + }, + "inputs": { + "title": "Inputs", + "description": "definition of the inputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + } + } + }, + "outputs": { + "title": "Outputs", + "description": "definition of the outputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + } + } + }, + "boot-options": { + "title": "Boot-Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + } + }, + "required": [ + "name", + "description", + "key", + "version", + "type", + "authors", + "contact", + "inputs", + "outputs" + ], + "additionalProperties": false, + "examples": [ + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "displayOrder": 1, + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "displayOrder": 1, + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + } + }, + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + }, + "boot-options": { + "example_service_defined_boot_mode": { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + "example_service_defined_theme_selection": { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + } + } + ], + "definitions": { + "ServiceType": { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + }, + "Badge": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + }, + "Author": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + }, + "WidgetType": { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + }, + "TextArea": { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + "Structure": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + }, + "SelectBox": { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + }, + "Widget": { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + }, + "ServiceInput": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + }, + "ServiceOutput": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + }, + "BootChoice": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + }, + "BootOption": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index 9edec013c58..46fde614c4b 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -193,10 +193,7 @@ components: format: email inputs: title: Inputs - pattern: ^[-_a-zA-Z0-9]+$ type: object - additionalProperties: - $ref: '#/components/schemas/ServiceInput' description: definition of the inputs of this node outputs: title: Outputs diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index dccec5d49ea..e0c7d6fdffe 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -107,11 +107,6 @@ components: for datcore) additionalProperties: false description: I/O port type to hold a link to a file in DATCORE storage - example: - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates DownloadLink: title: DownloadLink required: @@ -535,11 +530,6 @@ components: deprecated: true additionalProperties: false description: I/O port type to hold a link to a file in simcore S3 storage - example: - store: 0 - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt Slideshow: title: Slideshow required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml new file mode 100644 index 00000000000..8af0d70e816 --- /dev/null +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -0,0 +1,788 @@ +additionalProperties: false +properties: + accessRights: + additionalProperties: true + description: object containing the GroupID as key and read/write/execution permissions + as value + title: Accessrights + type: object + x-patternProperties: + ^\S+$: + additionalProperties: false + properties: + delete: + description: gives deletion rights + title: Delete + type: boolean + read: + description: gives read access + title: Read + type: boolean + write: + description: gives write access + title: Write + type: boolean + required: + - read + - write + - delete + title: AccessRights + type: object + classifiers: + description: Contains the reference to the project classifiers + example: some:id:to:a:classifier + items: + type: string + title: Classifiers + type: array + creationDate: + description: project creation date + example: '2018-07-01T11:13:43Z' + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + title: Creationdate + type: string + description: + description: longer one-line description about the project + example: Dabbling in temporal transitions ... + title: Description + type: string + dev: + description: object used for development purposes only + title: Dev + type: object + lastChangeDate: + description: last save date + example: '2018-07-01T11:13:43Z' + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + title: Lastchangedate + type: string + name: + description: project name + example: Temporal Distortion Simulator + title: Name + type: string + prjOwner: + description: user email + format: email + title: Prjowner + type: string + quality: + default: {} + description: stores the study quality assessment + title: Quality + type: object + state: + additionalProperties: false + properties: + locked: + allOf: + - additionalProperties: false + example: + status: CLOSED + value: false + properties: + owner: + allOf: + - additionalProperties: false + properties: + first_name: + description: Owner first name + example: John + title: First Name + type: string + last_name: + description: Owner last name + example: Smith + title: Last Name + type: string + user_id: + description: Owner's identifier when registered in the user's + database table + example: 2 + exclusiveMinimum: true + minimum: 0 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object + description: If locked, the user that owns the lock + title: Owner + status: + allOf: + - description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + title: ProjectStatus + type: string + description: The status of the project + value: + description: True if the project is locked + title: Value + type: boolean + required: + - value + - status + title: ProjectLocked + type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false + properties: + value: + allOf: + - description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + description: The running state of the project + example: STARTED + required: + - value + title: ProjectRunningState + type: object + description: The project running state + title: State + required: + - locked + - state + title: ProjectState + type: object + tags: + default: [] + items: + type: integer + title: Tags + type: array + thumbnail: + description: url of the project thumbnail + example: https://placeimg.com/171/96/tech/grayscale/?0.jpg + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + ui: + properties: + annotations: + additionalProperties: true + title: Annotations + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + additionalProperties: false + example: + - attributes: + height: 26 + width: 117 + x: 415 + y: 100 + color: '#FF0000' + type: rect + - attributes: + text: Hey! + x: 415 + y: 100 + color: '#0000FF' + type: text + properties: + attributes: + description: svg attributes + title: Attributes + type: object + color: + format: color + title: Color + type: string + type: + enum: + - rect + - text + title: Type + type: string + required: + - type + - color + - attributes + title: Annotation + type: object + currentNodeId: + format: uuid + title: Currentnodeid + type: string + slideshow: + additionalProperties: true + title: Slideshow + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + properties: + instructions: + title: Instructions + type: string + position: + title: Position + type: integer + required: + - position + title: Slideshow + type: object + workbench: + additionalProperties: true + title: Workbench + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + additionalProperties: false + properties: + marker: + additionalProperties: false + properties: + color: + format: color + title: Color + type: string + required: + - color + title: Marker + type: object + position: + allOf: + - additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + title: X + type: integer + y: + description: The y position + example: + - '15' + title: Y + type: integer + required: + - x + - y + title: Position + type: object + description: The node position in the workbench + title: Position + required: + - position + title: WorkbenchUI + type: object + title: StudyUI + type: object + uuid: + description: project unique identifier + example: 07640335-a91f-468c-ab69-a374fa82078d + format: uuid + title: Uuid + type: string + workbench: + additionalProperties: true + description: Project's pipeline + title: Workbench + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + additionalProperties: false + properties: + bootOptions: + description: Some services provide alternative parameters to be injected + at boot time. The user selection should be stored here, and it will + overwrite the services's defaults. + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + title: Bootoptions + type: object + inputAccess: + description: map with key - access level pairs + patternProperties: + ^[-_a-zA-Z0-9]+$: + description: An enumeration. + enum: + - ReadAndWrite + - Invisible + - ReadOnly + title: AccessEnum + type: string + type: object + inputNodes: + description: node IDs of where the node is connected to + items: + format: uuid + type: string + title: Inputnodes + type: array + inputs: + description: values of input properties + patternProperties: + ^[-_a-zA-Z0-9]+$: + anyOf: + - type: boolean + - type: integer + - type: number + - format: json-string + type: string + - type: string + - additionalProperties: false + description: I/O port type to reference to an output port of another + node in the same project + example: + - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b + output: out_2 + properties: + nodeUuid: + description: The node to get the port output from + format: uuid + title: Nodeuuid + type: string + output: + description: The port key in the node given by nodeUuid + pattern: ^[-_a-zA-Z0-9]+$ + title: Output + type: string + required: + - nodeUuid + - output + title: PortLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 + storage + example: + - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - eTag: f7e4c7076761a42a871e978c8691c676 + path: 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + store: '0' + - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + store: 0 + properties: + dataset: + deprecated: true + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for + datcore' + title: Store + type: integer + required: + - store + - path + title: SimCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + label: initial_WTstates + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + store: 1 + - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + label: initial_WTstates + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + store: 1 + properties: + dataset: + description: Unique identifier to access the dataset on datcore + (REQUIRED for datcore) + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for + datcore' + title: Store + type: integer + required: + - store + - path + - label + - dataset + title: DatCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a generic download link to a + file (e.g. S3 pre-signed link, etc) + example: + - downloadLink: https://fakeimg.pl/250x100/ + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + title: Downloadlink + type: string + label: + title: Label + type: string + required: + - downloadLink + title: DownloadLink + type: object + - items: {} + type: array + - type: object + title: Inputs + type: object + inputsUnits: + description: Overrides default unit (if any) defined in the service for + each port + patternProperties: + ^[-_a-zA-Z0-9]+$: + type: string + title: Inputsunits + type: object + key: + description: distinctive name for the node based on the docker registry + path + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + title: Key + type: string + label: + description: The short name of the node + example: + - JupyterLab + title: Label + type: string + outputNode: + deprecated: true + title: Outputnode + type: boolean + outputNodes: + description: Used in group-nodes. Node IDs of those connected to the output + items: + format: uuid + type: string + title: Outputnodes + type: array + outputs: + description: values of output properties + patternProperties: + ^[-_a-zA-Z0-9]+$: + anyOf: + - type: boolean + - type: integer + - type: number + - format: json-string + type: string + - type: string + - additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 + storage + example: + - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - eTag: f7e4c7076761a42a871e978c8691c676 + path: 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + store: '0' + - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + store: 0 + properties: + dataset: + deprecated: true + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for + datcore' + title: Store + type: integer + required: + - store + - path + title: SimCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + label: initial_WTstates + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + store: 1 + - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + label: initial_WTstates + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + store: 1 + properties: + dataset: + description: Unique identifier to access the dataset on datcore + (REQUIRED for datcore) + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + type: string + - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for + datcore' + title: Store + type: integer + required: + - store + - path + - label + - dataset + title: DatCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a generic download link to a + file (e.g. S3 pre-signed link, etc) + example: + - downloadLink: https://fakeimg.pl/250x100/ + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + title: Downloadlink + type: string + label: + title: Label + type: string + required: + - downloadLink + title: DownloadLink + type: object + - items: {} + type: array + - type: object + title: Outputs + type: object + parent: + anyOf: + - type: 'null' + - description: Parent's (group-nodes') node ID s. Used to group + format: uuid + title: Parent + type: string + position: + allOf: + - additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + title: X + type: integer + y: + description: The y position + example: + - '15' + title: Y + type: integer + required: + - x + - y + title: Position + type: object + deprecated: true + description: Use projects_ui.WorkbenchUI.position instead + title: Position + progress: + description: the node progress value + maximum: 100 + minimum: 0 + title: Progress + type: number + runHash: + anyOf: + - type: 'null' + - description: the hex digest of the resolved inputs +outputs hash at + the time when the last outputs were generated + title: Runhash + type: string + state: + allOf: + - additionalProperties: false + example: + - currentStatus: NOT_STARTED + dependencies: [] + modified: true + - currentStatus: ABORTED + dependencies: + - 42838344-03de-4ce2-8d93-589a5dcdfd05 + modified: true + - currentStatus: SUCCESS + dependencies: [] + modified: false + properties: + currentStatus: + allOf: + - description: 'State of execution of a project''s computational + workflow + + + SEE StateType for task state' + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + default: NOT_STARTED + description: the node's current state + dependencies: + description: contains the node inputs dependencies if they need + to be computed first + items: + format: uuid + type: string + title: Dependencies + type: array + uniqueItems: true + modified: + default: true + description: true if the node's outputs need to be re-computed + title: Modified + type: boolean + title: NodeState + type: object + description: The node's state object + title: State + thumbnail: + description: url of the latest screenshot of the node + example: + - https://placeimg.com/171/96/tech/grayscale/?0.jpg + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + version: + description: semantic version number of the node + example: + - 1.0.0 + - 0.0.1 + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + title: Version + type: string + required: + - key + - version + - label + title: Node + type: object +required: +- uuid +- name +- description +- thumbnail +- creationDate +- lastChangeDate +- workbench +- prjOwner +- accessRights +title: osparc-simcore project +type: object diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml new file mode 100644 index 00000000000..d87c312a8b6 --- /dev/null +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -0,0 +1,2024 @@ +title: osparc-simcore project +type: object +properties: + uuid: + title: Uuid + description: project unique identifier + type: string + format: uuid + example: 07640335-a91f-468c-ab69-a374fa82078d + name: + title: Name + description: project name + type: string + example: Temporal Distortion Simulator + description: + title: Description + description: longer one-line description about the project + type: string + example: Dabbling in temporal transitions ... + thumbnail: + title: Thumbnail + description: url of the project thumbnail + minLength: 1 + maxLength: 2083 + format: uri + type: string + example: https://placeimg.com/171/96/tech/grayscale/?0.jpg + creationDate: + title: Creationdate + description: project creation date + pattern: >- + \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + example: '2018-07-01T11:13:43Z' + lastChangeDate: + title: Lastchangedate + description: last save date + pattern: >- + \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + example: '2018-07-01T11:13:43Z' + workbench: + title: Workbench + description: Project's pipeline + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: Node + type: object + properties: + key: + title: Key + description: distinctive name for the node based on the docker registry path + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + type: string + version: + title: Version + description: semantic version number of the node + pattern: >- + ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + example: + - 1.0.0 + - 0.0.1 + type: string + label: + title: Label + description: The short name of the node + example: + - JupyterLab + type: string + progress: + title: Progress + description: the node progress value + minimum: 0 + maximum: 100 + type: number + thumbnail: + title: Thumbnail + description: url of the latest screenshot of the node + example: + - https://placeimg.com/171/96/tech/grayscale/?0.jpg + minLength: 1 + maxLength: 2083 + format: uri + type: string + runHash: + anyOf: + - type: 'null' + - title: Runhash + description: >- + the hex digest of the resolved inputs +outputs hash at the + time when the last outputs were generated + type: string + inputs: + title: Inputs + description: values of input properties + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + format: json-string + - type: string + - title: PortLink + description: >- + I/O port type to reference to an output port of another + node in the same project + type: object + properties: + nodeUuid: + title: Nodeuuid + description: The node to get the port output from + type: string + format: uuid + output: + title: Output + description: The port key in the node given by nodeUuid + pattern: ^[-_a-zA-Z0-9]+$ + type: string + required: + - nodeUuid + - output + additionalProperties: false + example: + - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b + output: out_2 + - title: SimCoreFileLink + description: >- + I/O port type to hold a link to a file in simcore S3 + storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black + box). + type: string + dataset: + title: Dataset + deprecated: true + type: string + required: + - store + - path + additionalProperties: false + example: + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + - store: '0' + path: >- + 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + eTag: f7e4c7076761a42a871e978c8691c676 + - store: 0 + path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + - title: DatCoreFileLink + description: I/O port type to hold a link to a file in DATCORE storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black + box). + type: string + dataset: + title: Dataset + description: >- + Unique identifier to access the dataset on datcore + (REQUIRED for datcore) + type: string + required: + - store + - path + - label + - dataset + additionalProperties: false + example: + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - title: DownloadLink + description: >- + I/O port type to hold a generic download link to a file + (e.g. S3 pre-signed link, etc) + type: object + properties: + downloadLink: + title: Downloadlink + minLength: 1 + maxLength: 65536 + format: uri + type: string + label: + title: Label + type: string + required: + - downloadLink + additionalProperties: false + example: + - downloadLink: https://fakeimg.pl/250x100/ + - type: array + items: {} + - type: object + inputsUnits: + title: Inputsunits + description: >- + Overrides default unit (if any) defined in the service for each + port + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + type: string + inputAccess: + description: map with key - access level pairs + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + title: AccessEnum + description: An enumeration. + enum: + - ReadAndWrite + - Invisible + - ReadOnly + type: string + inputNodes: + title: Inputnodes + description: node IDs of where the node is connected to + type: array + items: + type: string + format: uuid + outputs: + title: Outputs + description: values of output properties + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + format: json-string + - type: string + - title: SimCoreFileLink + description: >- + I/O port type to hold a link to a file in simcore S3 + storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black + box). + type: string + dataset: + title: Dataset + deprecated: true + type: string + required: + - store + - path + additionalProperties: false + example: + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + - store: '0' + path: >- + 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + eTag: f7e4c7076761a42a871e978c8691c676 + - store: 0 + path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + - title: DatCoreFileLink + description: I/O port type to hold a link to a file in DATCORE storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The + method to generate the tag is not specified (black + box). + type: string + dataset: + title: Dataset + description: >- + Unique identifier to access the dataset on datcore + (REQUIRED for datcore) + type: string + required: + - store + - path + - label + - dataset + additionalProperties: false + example: + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - title: DownloadLink + description: >- + I/O port type to hold a generic download link to a file + (e.g. S3 pre-signed link, etc) + type: object + properties: + downloadLink: + title: Downloadlink + minLength: 1 + maxLength: 65536 + format: uri + type: string + label: + title: Label + type: string + required: + - downloadLink + additionalProperties: false + example: + - downloadLink: https://fakeimg.pl/250x100/ + - type: array + items: {} + - type: object + outputNode: + title: Outputnode + deprecated: true + type: boolean + outputNodes: + title: Outputnodes + description: Used in group-nodes. Node IDs of those connected to the output + type: array + items: + type: string + format: uuid + parent: + anyOf: + - type: 'null' + - title: Parent + description: Parent's (group-nodes') node ID s. Used to group + type: string + format: uuid + position: + title: Position + description: Use projects_ui.WorkbenchUI.position instead + deprecated: true + allOf: + - title: Position + type: object + properties: + x: + title: X + description: The x position + example: + - '12' + type: integer + 'y': + title: 'Y' + description: The y position + example: + - '15' + type: integer + required: + - x + - 'y' + additionalProperties: false + state: + title: State + description: The node's state object + allOf: + - title: NodeState + type: object + properties: + modified: + title: Modified + description: true if the node's outputs need to be re-computed + default: true + type: boolean + dependencies: + title: Dependencies + description: >- + contains the node inputs dependencies if they need to be + computed first + type: array + items: + type: string + format: uuid + uniqueItems: true + currentStatus: + description: the node's current state + default: NOT_STARTED + allOf: + - title: RunningState + description: >- + State of execution of a project's computational + workflow + + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + additionalProperties: false + example: + - modified: true + dependencies: [] + currentStatus: NOT_STARTED + - modified: true + dependencies: + - 42838344-03de-4ce2-8d93-589a5dcdfd05 + currentStatus: ABORTED + - modified: false + dependencies: [] + currentStatus: SUCCESS + bootOptions: + title: Bootoptions + description: >- + Some services provide alternative parameters to be injected at + boot time. The user selection should be stored here, and it will + overwrite the services's defaults. + type: object + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + required: + - key + - version + - label + additionalProperties: false + additionalProperties: true + prjOwner: + title: Prjowner + description: user email + type: string + format: email + accessRights: + title: Accessrights + description: >- + object containing the GroupID as key and read/write/execution permissions + as value + type: object + x-patternProperties: + ^\S+$: + title: AccessRights + type: object + properties: + read: + title: Read + description: gives read access + type: boolean + write: + title: Write + description: gives write access + type: boolean + delete: + title: Delete + description: gives deletion rights + type: boolean + required: + - read + - write + - delete + additionalProperties: false + additionalProperties: true + tags: + title: Tags + default: [] + type: array + items: + type: integer + classifiers: + title: Classifiers + description: Contains the reference to the project classifiers + type: array + items: + type: string + example: some:id:to:a:classifier + state: + title: ProjectState + type: object + properties: + locked: + title: Locked + description: The project lock state + allOf: + - title: ProjectLocked + type: object + properties: + value: + title: Value + description: True if the project is locked + type: boolean + owner: + title: Owner + description: If locked, the user that owns the lock + allOf: + - title: Owner + type: object + properties: + user_id: + title: User Id + description: >- + Owner's identifier when registered in the user's + database table + exclusiveMinimum: true + type: integer + minimum: 0 + example: 2 + first_name: + title: First Name + description: Owner first name + type: string + example: John + last_name: + title: Last Name + description: Owner last name + type: string + example: Smith + required: + - user_id + - first_name + - last_name + additionalProperties: false + status: + description: The status of the project + allOf: + - title: ProjectStatus + description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + required: + - value + - status + additionalProperties: false + example: + value: false + status: CLOSED + state: + title: State + description: The project running state + allOf: + - title: ProjectRunningState + type: object + properties: + value: + description: The running state of the project + allOf: + - title: RunningState + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + example: STARTED + required: + - value + additionalProperties: false + required: + - locked + - state + additionalProperties: false + ui: + title: StudyUI + type: object + properties: + workbench: + title: Workbench + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: WorkbenchUI + type: object + properties: + position: + title: Position + description: The node position in the workbench + allOf: + - title: Position + type: object + properties: + x: + title: X + description: The x position + example: + - '12' + type: integer + 'y': + title: 'Y' + description: The y position + example: + - '15' + type: integer + required: + - x + - 'y' + additionalProperties: false + marker: + title: Marker + type: object + properties: + color: + title: Color + type: string + format: color + required: + - color + additionalProperties: false + required: + - position + additionalProperties: false + additionalProperties: true + slideshow: + title: Slideshow + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: Slideshow + type: object + properties: + position: + title: Position + type: integer + instructions: + title: Instructions + type: string + required: + - position + additionalProperties: true + currentNodeId: + title: Currentnodeid + type: string + format: uuid + annotations: + title: Annotations + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: Annotation + type: object + properties: + type: + title: Type + enum: + - rect + - text + type: string + color: + title: Color + type: string + format: color + attributes: + title: Attributes + description: svg attributes + type: object + required: + - type + - color + - attributes + additionalProperties: false + example: + - type: rect + color: '#FF0000' + attributes: + x: 415 + 'y': 100 + width: 117 + height: 26 + - type: text + color: '#0000FF' + attributes: + x: 415 + 'y': 100 + text: Hey! + additionalProperties: true + quality: + title: Quality + description: stores the study quality assessment + default: {} + type: object + dev: + title: Dev + description: object used for development purposes only + type: object +required: + - uuid + - name + - description + - thumbnail + - creationDate + - lastChangeDate + - workbench + - prjOwner + - accessRights +additionalProperties: false +definitions: + PortLink: + title: PortLink + description: >- + I/O port type to reference to an output port of another node in the same + project + type: object + properties: + nodeUuid: + title: Nodeuuid + description: The node to get the port output from + type: string + format: uuid + output: + title: Output + description: The port key in the node given by nodeUuid + pattern: ^[-_a-zA-Z0-9]+$ + type: string + required: + - nodeUuid + - output + additionalProperties: false + example: + - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b + output: out_2 + SimCoreFileLink: + title: SimCoreFileLink + description: I/O port type to hold a link to a file in simcore S3 storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The method to generate + the tag is not specified (black box). + type: string + dataset: + title: Dataset + deprecated: true + type: string + required: + - store + - path + additionalProperties: false + example: + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + - store: '0' + path: >- + 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + eTag: f7e4c7076761a42a871e978c8691c676 + - store: 0 + path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + DatCoreFileLink: + title: DatCoreFileLink + description: I/O port type to hold a link to a file in DATCORE storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The method to generate + the tag is not specified (black box). + type: string + dataset: + title: Dataset + description: >- + Unique identifier to access the dataset on datcore (REQUIRED for + datcore) + type: string + required: + - store + - path + - label + - dataset + additionalProperties: false + example: + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + DownloadLink: + title: DownloadLink + description: >- + I/O port type to hold a generic download link to a file (e.g. S3 + pre-signed link, etc) + type: object + properties: + downloadLink: + title: Downloadlink + minLength: 1 + maxLength: 65536 + format: uri + type: string + label: + title: Label + type: string + required: + - downloadLink + additionalProperties: false + example: + - downloadLink: https://fakeimg.pl/250x100/ + AccessEnum: + title: AccessEnum + description: An enumeration. + enum: + - ReadAndWrite + - Invisible + - ReadOnly + type: string + Position: + title: Position + type: object + properties: + x: + title: X + description: The x position + example: + - '12' + type: integer + 'y': + title: 'Y' + description: The y position + example: + - '15' + type: integer + required: + - x + - 'y' + additionalProperties: false + RunningState: + title: RunningState + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + NodeState: + title: NodeState + type: object + properties: + modified: + title: Modified + description: true if the node's outputs need to be re-computed + default: true + type: boolean + dependencies: + title: Dependencies + description: >- + contains the node inputs dependencies if they need to be computed + first + type: array + items: + type: string + format: uuid + uniqueItems: true + currentStatus: + description: the node's current state + default: NOT_STARTED + allOf: + - title: RunningState + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + additionalProperties: false + example: + - modified: true + dependencies: [] + currentStatus: NOT_STARTED + - modified: true + dependencies: + - 42838344-03de-4ce2-8d93-589a5dcdfd05 + currentStatus: ABORTED + - modified: false + dependencies: [] + currentStatus: SUCCESS + Node: + title: Node + type: object + properties: + key: + title: Key + description: distinctive name for the node based on the docker registry path + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + type: string + version: + title: Version + description: semantic version number of the node + pattern: >- + ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + example: + - 1.0.0 + - 0.0.1 + type: string + label: + title: Label + description: The short name of the node + example: + - JupyterLab + type: string + progress: + title: Progress + description: the node progress value + minimum: 0 + maximum: 100 + type: number + thumbnail: + title: Thumbnail + description: url of the latest screenshot of the node + example: + - https://placeimg.com/171/96/tech/grayscale/?0.jpg + minLength: 1 + maxLength: 2083 + format: uri + type: string + runHash: + anyOf: + - type: 'null' + - title: Runhash + description: >- + the hex digest of the resolved inputs +outputs hash at the time + when the last outputs were generated + type: string + inputs: + title: Inputs + description: values of input properties + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + format: json-string + - type: string + - title: PortLink + description: >- + I/O port type to reference to an output port of another node + in the same project + type: object + properties: + nodeUuid: + title: Nodeuuid + description: The node to get the port output from + type: string + format: uuid + output: + title: Output + description: The port key in the node given by nodeUuid + pattern: ^[-_a-zA-Z0-9]+$ + type: string + required: + - nodeUuid + - output + additionalProperties: false + example: + - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b + output: out_2 + - title: SimCoreFileLink + description: I/O port type to hold a link to a file in simcore S3 storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The method + to generate the tag is not specified (black box). + type: string + dataset: + title: Dataset + deprecated: true + type: string + required: + - store + - path + additionalProperties: false + example: + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + - store: '0' + path: >- + 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + eTag: f7e4c7076761a42a871e978c8691c676 + - store: 0 + path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + - title: DatCoreFileLink + description: I/O port type to hold a link to a file in DATCORE storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The method + to generate the tag is not specified (black box). + type: string + dataset: + title: Dataset + description: >- + Unique identifier to access the dataset on datcore + (REQUIRED for datcore) + type: string + required: + - store + - path + - label + - dataset + additionalProperties: false + example: + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - title: DownloadLink + description: >- + I/O port type to hold a generic download link to a file (e.g. + S3 pre-signed link, etc) + type: object + properties: + downloadLink: + title: Downloadlink + minLength: 1 + maxLength: 65536 + format: uri + type: string + label: + title: Label + type: string + required: + - downloadLink + additionalProperties: false + example: + - downloadLink: https://fakeimg.pl/250x100/ + - type: array + items: {} + - type: object + inputsUnits: + title: Inputsunits + description: Overrides default unit (if any) defined in the service for each port + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + type: string + inputAccess: + description: map with key - access level pairs + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + title: AccessEnum + description: An enumeration. + enum: + - ReadAndWrite + - Invisible + - ReadOnly + type: string + inputNodes: + title: Inputnodes + description: node IDs of where the node is connected to + type: array + items: + type: string + format: uuid + outputs: + title: Outputs + description: values of output properties + type: object + patternProperties: + ^[-_a-zA-Z0-9]+$: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + format: json-string + - type: string + - title: SimCoreFileLink + description: I/O port type to hold a link to a file in simcore S3 storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The method + to generate the tag is not specified (black box). + type: string + dataset: + title: Dataset + deprecated: true + type: string + required: + - store + - path + additionalProperties: false + example: + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + - store: '0' + path: >- + 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + eTag: f7e4c7076761a42a871e978c8691c676 + - store: 0 + path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + - store: 0 + path: >- + 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + - title: DatCoreFileLink + description: I/O port type to hold a link to a file in DATCORE storage + type: object + properties: + store: + title: Store + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + type: integer + path: + title: Path + description: The path to the file in the storage provider domain + anyOf: + - type: string + pattern: >- + ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ + - type: string + pattern: >- + ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ + label: + title: Label + description: The real file name + type: string + eTag: + title: Etag + description: >- + Entity tag that uniquely represents the file. The method + to generate the tag is not specified (black box). + type: string + dataset: + title: Dataset + description: >- + Unique identifier to access the dataset on datcore + (REQUIRED for datcore) + type: string + required: + - store + - path + - label + - dataset + additionalProperties: false + example: + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - store: 1 + dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 + path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce + label: initial_WTstates + - title: DownloadLink + description: >- + I/O port type to hold a generic download link to a file (e.g. + S3 pre-signed link, etc) + type: object + properties: + downloadLink: + title: Downloadlink + minLength: 1 + maxLength: 65536 + format: uri + type: string + label: + title: Label + type: string + required: + - downloadLink + additionalProperties: false + example: + - downloadLink: https://fakeimg.pl/250x100/ + - type: array + items: {} + - type: object + outputNode: + title: Outputnode + deprecated: true + type: boolean + outputNodes: + title: Outputnodes + description: Used in group-nodes. Node IDs of those connected to the output + type: array + items: + type: string + format: uuid + parent: + anyOf: + - type: 'null' + - title: Parent + description: Parent's (group-nodes') node ID s. Used to group + type: string + format: uuid + position: + title: Position + description: Use projects_ui.WorkbenchUI.position instead + deprecated: true + allOf: + - title: Position + type: object + properties: + x: + title: X + description: The x position + example: + - '12' + type: integer + 'y': + title: 'Y' + description: The y position + example: + - '15' + type: integer + required: + - x + - 'y' + additionalProperties: false + state: + title: State + description: The node's state object + allOf: + - title: NodeState + type: object + properties: + modified: + title: Modified + description: true if the node's outputs need to be re-computed + default: true + type: boolean + dependencies: + title: Dependencies + description: >- + contains the node inputs dependencies if they need to be + computed first + type: array + items: + type: string + format: uuid + uniqueItems: true + currentStatus: + description: the node's current state + default: NOT_STARTED + allOf: + - title: RunningState + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + additionalProperties: false + example: + - modified: true + dependencies: [] + currentStatus: NOT_STARTED + - modified: true + dependencies: + - 42838344-03de-4ce2-8d93-589a5dcdfd05 + currentStatus: ABORTED + - modified: false + dependencies: [] + currentStatus: SUCCESS + bootOptions: + title: Bootoptions + description: >- + Some services provide alternative parameters to be injected at boot + time. The user selection should be stored here, and it will overwrite + the services's defaults. + type: object + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + required: + - key + - version + - label + additionalProperties: false + AccessRights: + title: AccessRights + type: object + properties: + read: + title: Read + description: gives read access + type: boolean + write: + title: Write + description: gives write access + type: boolean + delete: + title: Delete + description: gives deletion rights + type: boolean + required: + - read + - write + - delete + additionalProperties: false + Owner: + title: Owner + type: object + properties: + user_id: + title: User Id + description: Owner's identifier when registered in the user's database table + example: + - 2 + exclusiveMinimum: 0 + type: integer + first_name: + title: First Name + description: Owner first name + example: + - John + type: string + last_name: + title: Last Name + description: Owner last name + example: + - Smith + type: string + required: + - user_id + - first_name + - last_name + additionalProperties: false + ProjectStatus: + title: ProjectStatus + description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + ProjectLocked: + title: ProjectLocked + type: object + properties: + value: + title: Value + description: True if the project is locked + type: boolean + owner: + title: Owner + description: If locked, the user that owns the lock + allOf: + - title: Owner + type: object + properties: + user_id: + title: User Id + description: >- + Owner's identifier when registered in the user's database + table + example: + - 2 + exclusiveMinimum: 0 + type: integer + first_name: + title: First Name + description: Owner first name + example: + - John + type: string + last_name: + title: Last Name + description: Owner last name + example: + - Smith + type: string + required: + - user_id + - first_name + - last_name + additionalProperties: false + status: + description: The status of the project + allOf: + - title: ProjectStatus + description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + required: + - value + - status + additionalProperties: false + example: + - value: false + status: CLOSED + - value: true + status: OPENED + owner: + user_id: 123 + first_name: Johnny + last_name: Cash + ProjectRunningState: + title: ProjectRunningState + type: object + properties: + value: + description: The running state of the project + example: + - STARTED + allOf: + - title: RunningState + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + required: + - value + additionalProperties: false + ProjectState: + title: ProjectState + type: object + properties: + locked: + title: Locked + description: The project lock state + allOf: + - title: ProjectLocked + type: object + properties: + value: + title: Value + description: True if the project is locked + type: boolean + owner: + title: Owner + description: If locked, the user that owns the lock + allOf: + - title: Owner + type: object + properties: + user_id: + title: User Id + description: >- + Owner's identifier when registered in the user's + database table + example: + - 2 + exclusiveMinimum: 0 + type: integer + first_name: + title: First Name + description: Owner first name + example: + - John + type: string + last_name: + title: Last Name + description: Owner last name + example: + - Smith + type: string + required: + - user_id + - first_name + - last_name + additionalProperties: false + status: + description: The status of the project + allOf: + - title: ProjectStatus + description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + type: string + required: + - value + - status + additionalProperties: false + example: + - value: false + status: CLOSED + - value: true + status: OPENED + owner: + user_id: 123 + first_name: Johnny + last_name: Cash + state: + title: State + description: The project running state + allOf: + - title: ProjectRunningState + type: object + properties: + value: + description: The running state of the project + example: + - STARTED + allOf: + - title: RunningState + description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + required: + - value + additionalProperties: false + required: + - locked + - state + additionalProperties: false + Marker: + title: Marker + type: object + properties: + color: + title: Color + type: string + format: color + required: + - color + additionalProperties: false + WorkbenchUI: + title: WorkbenchUI + type: object + properties: + position: + title: Position + description: The node position in the workbench + allOf: + - title: Position + type: object + properties: + x: + title: X + description: The x position + example: + - '12' + type: integer + 'y': + title: 'Y' + description: The y position + example: + - '15' + type: integer + required: + - x + - 'y' + additionalProperties: false + marker: + title: Marker + type: object + properties: + color: + title: Color + type: string + format: color + required: + - color + additionalProperties: false + required: + - position + additionalProperties: false + Slideshow: + title: Slideshow + type: object + properties: + position: + title: Position + type: integer + instructions: + title: Instructions + type: string + required: + - position + Annotation: + title: Annotation + type: object + properties: + type: + title: Type + enum: + - rect + - text + type: string + color: + title: Color + type: string + format: color + attributes: + title: Attributes + description: svg attributes + type: object + required: + - type + - color + - attributes + additionalProperties: false + example: + - type: rect + color: '#FF0000' + attributes: + x: 415 + 'y': 100 + width: 117 + height: 26 + - type: text + color: '#0000FF' + attributes: + x: 415 + 'y': 100 + text: Hey! + StudyUI: + title: StudyUI + type: object + properties: + workbench: + title: Workbench + type: object + patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: WorkbenchUI + type: object + properties: + position: + title: Position + description: The node position in the workbench + allOf: + - title: Position + type: object + properties: + x: + title: X + description: The x position + example: + - '12' + type: integer + 'y': + title: 'Y' + description: The y position + example: + - '15' + type: integer + required: + - x + - 'y' + additionalProperties: false + marker: + title: Marker + type: object + properties: + color: + title: Color + type: string + format: color + required: + - color + additionalProperties: false + required: + - position + additionalProperties: false + slideshow: + title: Slideshow + type: object + patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: Slideshow + type: object + properties: + position: + title: Position + type: integer + instructions: + title: Instructions + type: string + required: + - position + currentNodeId: + title: Currentnodeid + type: string + format: uuid + annotations: + title: Annotations + type: object + patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: + title: Annotation + type: object + properties: + type: + title: Type + enum: + - rect + - text + type: string + color: + title: Color + type: string + format: color + attributes: + title: Attributes + description: svg attributes + type: object + required: + - type + - color + - attributes + additionalProperties: false + example: + - type: rect + color: '#FF0000' + attributes: + x: 415 + 'y': 100 + width: 117 + height: 26 + - type: text + color: '#0000FF' + attributes: + x: 415 + 'y': 100 + text: Hey! diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json new file mode 100644 index 00000000000..d931c133f7f --- /dev/null +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -0,0 +1,2721 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "ui": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/api/specs/common/schemas/project.yaml b/api/specs/common/schemas/project.yaml index bf351ab9267..c68dad1a76f 100644 --- a/api/specs/common/schemas/project.yaml +++ b/api/specs/common/schemas/project.yaml @@ -1,11 +1,13 @@ components: schemas: ProjectIn: - $ref: "./openapi-project-generated.yaml#/components/schemas/Project" + # $ref: "./matus-without-ref-converted.yaml" + $ref: "./project-v0.0.1-pydantic-converted-clean.yaml" ProjectOut: allOf: - - $ref: "./openapi-project-generated.yaml#/components/schemas/Project" + # - $ref: "./matus-without-ref-converted.yaml" + - $ref: "./project-v0.0.1-pydantic-converted-clean.yaml" - type: object properties: state: diff --git a/api/specs/common/schemas/scripts/remove_definitions.py b/api/specs/common/schemas/scripts/remove_definitions.py new file mode 100644 index 00000000000..993995c2ce8 --- /dev/null +++ b/api/specs/common/schemas/scripts/remove_definitions.py @@ -0,0 +1,17 @@ +import os +import sys +import yaml + +DIR_PATH = os.path.dirname(os.path.realpath(__file__)) +source_file_name = sys.argv[1] +target_file_name = sys.argv[2] +file_source_path = DIR_PATH + f"/../{source_file_name}" +file_target_path = DIR_PATH + f"/../{target_file_name}" + +with open(file_source_path, "r") as stream: + try: + data = yaml.safe_load(stream) + data.pop("definitions", None) + yaml.dump(data, open(file_target_path, "w")) + except yaml.YAMLError as exc: + print(exc) diff --git a/api/specs/common/schemas/services.yaml b/api/specs/common/schemas/services.yaml index 02dd9fc3b52..c29280b4036 100644 --- a/api/specs/common/schemas/services.yaml +++ b/api/specs/common/schemas/services.yaml @@ -8,7 +8,9 @@ components: data: type: array items: - $ref: "./openapi-node-meta-generated.yaml#/components/schemas/ServiceDockerData" + $ref: "./node-meta-v0.0.1-pydantic-converted-clean.yaml" + # $ref: "./openapi-node-meta-generated.yaml#/components/schemas/ServiceDockerData" + # $ref: "./depreciated/node-meta-v0.0.1-converted.yaml" error: nullable: true default: null diff --git a/api/specs/webserver/scripts/openapi_node_meta.py b/api/specs/webserver/scripts/openapi_node_meta.py index d086bbc29e6..d375ec3c96d 100644 --- a/api/specs/webserver/scripts/openapi_node_meta.py +++ b/api/specs/webserver/scripts/openapi_node_meta.py @@ -11,6 +11,7 @@ from fastapi import FastAPI import json +import jsonref from models_library.services import ServiceDockerData @@ -31,5 +32,8 @@ async def get_project_inputs(project: ServiceDockerData): create_openapi_specs(app, CURRENT_DIR.parent / "../common/schemas/openapi-node-meta-generated.yaml") # Generate json schema from the ServiceDockerData pydantic model - with open(CURRENT_DIR.parent / "../common/schemas/json-schema-node-meta-generated.json", 'w') as f: - json.dump(json.loads(ServiceDockerData.schema_json()), f, indent=2) + with open(CURRENT_DIR.parent / "../common/schemas/node-meta-v0.0.1-pydantic.json", 'w') as f: + schema = ServiceDockerData.schema_json() + schema_without_ref = jsonref.loads(schema) + + json.dump(schema_without_ref, f, indent=2) diff --git a/api/specs/webserver/scripts/openapi_project.py b/api/specs/webserver/scripts/openapi_project.py index a2a70e28a6c..10c6d97da44 100644 --- a/api/specs/webserver/scripts/openapi_project.py +++ b/api/specs/webserver/scripts/openapi_project.py @@ -10,6 +10,7 @@ from fastapi import FastAPI import json +import jsonref from models_library.projects import Project @@ -27,8 +28,12 @@ async def get_project_inputs(project: Project): from _common import CURRENT_DIR, create_openapi_specs # Generate OAS for the Project pydantic model via the FastAPI app + # NOTE: currently not used, see: create_openapi_specs(app, CURRENT_DIR.parent / "../common/schemas/openapi-project-generated.yaml") # Generate json schema from the Project pydantic model - with open(CURRENT_DIR.parent / "../common/schemas/json-schema-project-generated.json", 'w') as f: - json.dump(json.loads(Project.schema_json()), f, indent=2) + with open(CURRENT_DIR.parent / "../common/schemas/project-v0.0.1-pydantic.json", 'w') as f: + schema = Project.schema_json() + schema_without_ref = jsonref.loads(schema) + + json.dump(schema_without_ref, f, indent=2) diff --git a/api/specs/webserver/scripts/requirements.txt b/api/specs/webserver/scripts/requirements.txt index 30c49abedff..da8883a7c95 100644 --- a/api/specs/webserver/scripts/requirements.txt +++ b/api/specs/webserver/scripts/requirements.txt @@ -1,3 +1,4 @@ # Extra reqs, besides webserver's fastapi +jsonref diff --git a/packages/models-library/src/models_library/projects_nodes_io.py b/packages/models-library/src/models_library/projects_nodes_io.py index 0c3ea43a046..efa40238fb0 100644 --- a/packages/models-library/src/models_library/projects_nodes_io.py +++ b/packages/models-library/src/models_library/projects_nodes_io.py @@ -146,14 +146,13 @@ def pre_fill_label_with_filename_ext(cls, v, values): class Config: extra = Extra.forbid schema_extra = { - # a project file - "example": { + "examples": [ + { "store": 0, "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", "label": "input.txt", - }, - "examples": [ + }, # legacy: store as string (SEE incident https://git.speag.com/oSparc/e2e-testing/-/issues/1) { "store": "0", @@ -199,14 +198,14 @@ def check_discriminator(cls, v): class Config: extra = Extra.forbid schema_extra = { - "example": { - # minimal - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates", - }, "examples": [ + { + # minimal + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates", + }, # with store id as str { "store": 1, diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index a6b215b4508..da6d4fb1a53 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -141,139 +141,587 @@ paths: data: type: array items: - title: ServiceDockerData - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - type: object + additionalProperties: false + description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json + example: + authors: + - affiliation: Company + email: smith@company.com + name: John Smith + - affiliation: University + email: brown@uni.edu + name: Richard Brown + contact: smith@company.com + description: oSparc Python Runner + inputs: + input_1: + description: 'Any code, requirements or data file' + displayOrder: 1 + label: Input data + type: 'data:*/*' + integration-version: 1.0.0 + key: simcore/services/comp/osparc-python-runner + name: oSparc Python Runner + outputs: + output_1: + description: All data produced by the script is zipped as output_data.zip + displayOrder: 1 + fileToKeyMap: + output_data.zip: output_1 + label: Output data + type: 'data:*/*' + type: computational + version: 1.7.0 properties: - name: - title: Name - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url to the thumbnail - format: uri - description: - title: Description - type: string - description: human readable description of the purpose of the node - key: - title: Key - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - type: string - description: distinctive name for the node based on the docker registry path - version: - title: Version - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - type: string - description: service version number - integration-version: - title: Integration-Version - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - type: string - description: integration version number - type: - allOf: - - title: ServiceType - enum: - - computational - - dynamic - - frontend - - backend - type: string - description: An enumeration. - description: service type - badges: - title: Badges - type: array + authors: items: - title: Badge - required: - - name - - image - - url - type: object + additionalProperties: false properties: + affiliation: + description: Affiliation of the author + example: Sense8 + title: Affiliation + type: string + email: + description: Email address + example: sun@sense.eight + format: email + title: Email + type: string name: + description: Name of the author + example: Jim Knopf title: Name type: string - description: Name of the subject + required: + - name + - email + title: Author + type: object + minItems: 1 + title: Authors + type: array + badges: + items: + additionalProperties: false + properties: image: - title: Image - maxLength: 2083 - minLength: 1 - type: string description: Url to the badge + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' format: uri - url: - title: Url maxLength: 2083 minLength: 1 + title: Image + type: string + name: + description: Name of the subject + example: travis-ci + title: Name type: string + url: description: Link to the status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' format: uri - additionalProperties: false - authors: - title: Authors - minItems: 1 - type: array - items: - title: Author + maxLength: 2083 + minLength: 1 + title: Url + type: string required: - name - - email + - image + - url + title: Badge type: object - properties: - name: - title: Name - type: string - description: Name of the author - example: Jim Knopf - email: - title: Email - type: string - description: Email address - format: email - affiliation: - title: Affiliation - type: string - description: Affiliation of the author - additionalProperties: false + title: Badges + type: array + boot-options: + additionalProperties: true + description: Service defined boot options. These get injected in the service as env variables. + title: Boot-Options + type: object + x-patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object contact: - title: Contact - type: string description: email to correspond to the authors about the node + example: lab@net.flix format: email + title: Contact + type: string + description: + description: human readable description of the purpose of the node + example: Our best node type + title: Description + type: string inputs: + additionalProperties: true + description: definition of the inputs of this node title: Inputs type: object - description: definition of the inputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + additionalProperties: false + description: Metadata on a service input port + example: + - description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: 'data:*/*' + - defaultValue: 0 + description: Time to wait before completion + displayOrder: 2 + label: Sleep Time - v2 + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - defaultValue: 0 + description: Time to wait before completion + label: Sleep Time - latest + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - contentSchema: + items: + type: number + title: 'list[number]' + type: array + description: Some array of numbers + label: array_numbers + type: ref_contentSchema + - contentSchema: + properties: + b: + title: Bool + type: boolean + i: + default: 3 + title: Int + type: integer + s: + title: Str + type: string + required: + - b + - s + title: an object named A + type: object + description: Some object + label: my_object + type: ref_contentSchema + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: + - Dog + - true + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object + integration-version: + description: integration version number + example: 1.0.0 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Integration-Version + type: string + key: + description: distinctive name for the node based on the docker registry path + example: simcore/services/comp/itis/sleeper + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Key + type: string + name: + description: 'short, human readable name for the node' + example: Fast Counter + title: Name + type: string outputs: - title: Outputs - type: object + additionalProperties: true description: definition of the outputs of this node - boot-options: - title: Boot-Options + title: Outputs type: object - description: Service defined boot options. These get injected in the service as env variables. - additionalProperties: false - description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + additionalProperties: false + description: Base class for service input/outputs + example: + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept - units + type: number + unit: second + - description: Time the service waited before completion + label: Time Slept - w/o displayorder + type: number + unit: second + - description: Output file uploaded from the outputs folder + displayOrder: 4 + label: Output file 1 + type: 'data:*/*' + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object + thumbnail: + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + type: + allOf: + - description: An enumeration. + enum: + - computational + - dynamic + - frontend + - backend + title: ServiceType + type: string + description: service type + example: computational + version: + description: service version number + example: 1.0.0 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Version + type: string + required: + - name + - description + - key + - version + - type + - authors + - contact + - inputs + - outputs + title: ServiceDockerData + type: object error: nullable: true default: null @@ -388,139 +836,587 @@ paths: data: type: array items: - title: ServiceDockerData - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - type: object + additionalProperties: false + description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json + example: + authors: + - affiliation: Company + email: smith@company.com + name: John Smith + - affiliation: University + email: brown@uni.edu + name: Richard Brown + contact: smith@company.com + description: oSparc Python Runner + inputs: + input_1: + description: 'Any code, requirements or data file' + displayOrder: 1 + label: Input data + type: 'data:*/*' + integration-version: 1.0.0 + key: simcore/services/comp/osparc-python-runner + name: oSparc Python Runner + outputs: + output_1: + description: All data produced by the script is zipped as output_data.zip + displayOrder: 1 + fileToKeyMap: + output_data.zip: output_1 + label: Output data + type: 'data:*/*' + type: computational + version: 1.7.0 properties: - name: - title: Name - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url to the thumbnail - format: uri - description: - title: Description - type: string - description: human readable description of the purpose of the node - key: - title: Key - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - type: string - description: distinctive name for the node based on the docker registry path - version: - title: Version - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - type: string - description: service version number - integration-version: - title: Integration-Version - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - type: string - description: integration version number - type: - allOf: - - title: ServiceType - enum: - - computational - - dynamic - - frontend - - backend - type: string - description: An enumeration. - description: service type - badges: - title: Badges - type: array + authors: items: - title: Badge - required: - - name - - image - - url - type: object + additionalProperties: false properties: + affiliation: + description: Affiliation of the author + example: Sense8 + title: Affiliation + type: string + email: + description: Email address + example: sun@sense.eight + format: email + title: Email + type: string name: + description: Name of the author + example: Jim Knopf title: Name type: string - description: Name of the subject + required: + - name + - email + title: Author + type: object + minItems: 1 + title: Authors + type: array + badges: + items: + additionalProperties: false + properties: image: - title: Image - maxLength: 2083 - minLength: 1 - type: string description: Url to the badge + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' format: uri - url: - title: Url maxLength: 2083 minLength: 1 + title: Image + type: string + name: + description: Name of the subject + example: travis-ci + title: Name type: string + url: description: Link to the status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' format: uri - additionalProperties: false - authors: - title: Authors - minItems: 1 - type: array - items: - title: Author + maxLength: 2083 + minLength: 1 + title: Url + type: string required: - name - - email + - image + - url + title: Badge type: object - properties: - name: - title: Name - type: string - description: Name of the author - example: Jim Knopf - email: - title: Email - type: string - description: Email address - format: email - affiliation: - title: Affiliation - type: string - description: Affiliation of the author - additionalProperties: false + title: Badges + type: array + boot-options: + additionalProperties: true + description: Service defined boot options. These get injected in the service as env variables. + title: Boot-Options + type: object + x-patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object contact: - title: Contact - type: string description: email to correspond to the authors about the node + example: lab@net.flix format: email + title: Contact + type: string + description: + description: human readable description of the purpose of the node + example: Our best node type + title: Description + type: string inputs: + additionalProperties: true + description: definition of the inputs of this node title: Inputs type: object - description: definition of the inputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + additionalProperties: false + description: Metadata on a service input port + example: + - description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: 'data:*/*' + - defaultValue: 0 + description: Time to wait before completion + displayOrder: 2 + label: Sleep Time - v2 + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - defaultValue: 0 + description: Time to wait before completion + label: Sleep Time - latest + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - contentSchema: + items: + type: number + title: 'list[number]' + type: array + description: Some array of numbers + label: array_numbers + type: ref_contentSchema + - contentSchema: + properties: + b: + title: Bool + type: boolean + i: + default: 3 + title: Int + type: integer + s: + title: Str + type: string + required: + - b + - s + title: an object named A + type: object + description: Some object + label: my_object + type: ref_contentSchema + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: + - Dog + - true + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object + integration-version: + description: integration version number + example: 1.0.0 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Integration-Version + type: string + key: + description: distinctive name for the node based on the docker registry path + example: simcore/services/comp/itis/sleeper + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Key + type: string + name: + description: 'short, human readable name for the node' + example: Fast Counter + title: Name + type: string outputs: - title: Outputs - type: object + additionalProperties: true description: definition of the outputs of this node - boot-options: - title: Boot-Options + title: Outputs type: object - description: Service defined boot options. These get injected in the service as env variables. - additionalProperties: false - description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + additionalProperties: false + description: Base class for service input/outputs + example: + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept - units + type: number + unit: second + - description: Time the service waited before completion + label: Time Slept - w/o displayorder + type: number + unit: second + - description: Output file uploaded from the outputs folder + displayOrder: 4 + label: Output file 1 + type: 'data:*/*' + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object + thumbnail: + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + type: + allOf: + - description: An enumeration. + enum: + - computational + - dynamic + - frontend + - backend + title: ServiceType + type: string + description: service type + example: computational + version: + description: service version number + example: 1.0.0 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Version + type: string + required: + - name + - description + - key + - version + - type + - authors + - contact + - inputs + - outputs + title: ServiceDockerData + type: object error: nullable: true default: null @@ -2049,139 +2945,587 @@ components: data: type: array items: - title: ServiceDockerData - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - type: object + additionalProperties: false + description: |- + Static metadata for a service injected in the image labels + + This is one to one with node-meta-v0.0.1.json + example: + authors: + - affiliation: Company + email: smith@company.com + name: John Smith + - affiliation: University + email: brown@uni.edu + name: Richard Brown + contact: smith@company.com + description: oSparc Python Runner + inputs: + input_1: + description: 'Any code, requirements or data file' + displayOrder: 1 + label: Input data + type: 'data:*/*' + integration-version: 1.0.0 + key: simcore/services/comp/osparc-python-runner + name: oSparc Python Runner + outputs: + output_1: + description: All data produced by the script is zipped as output_data.zip + displayOrder: 1 + fileToKeyMap: + output_data.zip: output_1 + label: Output data + type: 'data:*/*' + type: computational + version: 1.7.0 properties: - name: - title: Name - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url to the thumbnail - format: uri - description: - title: Description - type: string - description: human readable description of the purpose of the node - key: - title: Key - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - type: string - description: distinctive name for the node based on the docker registry path - version: - title: Version - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - type: string - description: service version number - integration-version: - title: Integration-Version - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - type: string - description: integration version number - type: - allOf: - - title: ServiceType - enum: - - computational - - dynamic - - frontend - - backend - type: string - description: An enumeration. - description: service type - badges: - title: Badges - type: array + authors: items: - title: Badge - required: - - name - - image - - url - type: object + additionalProperties: false properties: + affiliation: + description: Affiliation of the author + example: Sense8 + title: Affiliation + type: string + email: + description: Email address + example: sun@sense.eight + format: email + title: Email + type: string name: + description: Name of the author + example: Jim Knopf title: Name type: string - description: Name of the subject + required: + - name + - email + title: Author + type: object + minItems: 1 + title: Authors + type: array + badges: + items: + additionalProperties: false + properties: image: - title: Image - maxLength: 2083 - minLength: 1 - type: string description: Url to the badge + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' format: uri - url: - title: Url maxLength: 2083 minLength: 1 + title: Image type: string + name: + description: Name of the subject + example: travis-ci + title: Name + type: string + url: description: Link to the status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' format: uri - additionalProperties: false - authors: - title: Authors - minItems: 1 - type: array - items: - title: Author + maxLength: 2083 + minLength: 1 + title: Url + type: string required: - name - - email + - image + - url + title: Badge type: object - properties: - name: - title: Name - type: string - description: Name of the author - example: Jim Knopf - email: - title: Email - type: string - description: Email address - format: email - affiliation: - title: Affiliation - type: string - description: Affiliation of the author - additionalProperties: false + title: Badges + type: array + boot-options: + additionalProperties: true + description: Service defined boot options. These get injected in the service as env variables. + title: Boot-Options + type: object + x-patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + - default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + - default: b + description: Select a theme for the application + items: + a: + description: Using white background + label: Clear + b: + description: Using black and gray tones + label: Dark + label: Application theme + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object contact: - title: Contact - type: string description: email to correspond to the authors about the node + example: lab@net.flix format: email + title: Contact + type: string + description: + description: human readable description of the purpose of the node + example: Our best node type + title: Description + type: string inputs: + additionalProperties: true + description: definition of the inputs of this node title: Inputs type: object - description: definition of the inputs of this node + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + additionalProperties: false + description: Metadata on a service input port + example: + - description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: 'data:*/*' + - defaultValue: 0 + description: Time to wait before completion + displayOrder: 2 + label: Sleep Time - v2 + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - defaultValue: 0 + description: Time to wait before completion + label: Sleep Time - latest + type: number + unit: second + widget: + details: + minHeight: 3 + type: TextArea + - contentSchema: + items: + type: number + title: 'list[number]' + type: array + description: Some array of numbers + label: array_numbers + type: ref_contentSchema + - contentSchema: + properties: + b: + title: Bool + type: boolean + i: + default: 3 + title: Int + type: integer + s: + title: Str + type: string + required: + - b + - s + title: an object named A + type: object + description: Some object + label: my_object + type: ref_contentSchema + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: + - Dog + - true + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object + integration-version: + description: integration version number + example: 1.0.0 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Integration-Version + type: string + key: + description: distinctive name for the node based on the docker registry path + example: simcore/services/comp/itis/sleeper + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Key + type: string + name: + description: 'short, human readable name for the node' + example: Fast Counter + title: Name + type: string outputs: - title: Outputs - type: object + additionalProperties: true description: definition of the outputs of this node - boot-options: - title: Boot-Options + title: Outputs type: object - description: Service defined boot options. These get injected in the service as env variables. - additionalProperties: false - description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json + x-patternProperties: + '^[-_a-zA-Z0-9]+$': + additionalProperties: false + description: Base class for service input/outputs + example: + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + - description: Time the service waited before completion + displayOrder: 2 + label: Time Slept - units + type: number + unit: second + - description: Time the service waited before completion + label: Time Slept - w/o displayorder + type: number + unit: second + - description: Output file uploaded from the outputs folder + displayOrder: 4 + label: Output file 1 + type: 'data:*/*' + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + title: Filetokeymap + type: object + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: + - number + - boolean + - 'data:*/*' + - 'data:text/*' + - 'data:[image/jpeg,image/png]' + - 'data:application/json' + - 'data:application/json;schema=https://my-schema/not/really/schema.json' + - 'data:application/vnd.ms-excel' + - 'data:text/plain' + - 'data:application/hdf5' + - 'data:application/edu.ucdavis@ceclancy.xyz' + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + exclusiveMinimum: 0 + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object + thumbnail: + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + type: + allOf: + - description: An enumeration. + enum: + - computational + - dynamic + - frontend + - backend + title: ServiceType + type: string + description: service type + example: computational + version: + description: service version number + example: 1.0.0 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Version + type: string + required: + - name + - description + - key + - version + - type + - authors + - contact + - inputs + - outputs + title: ServiceDockerData + type: object error: nullable: true default: null diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json new file mode 100644 index 00000000000..6a5c0c7e6c7 --- /dev/null +++ b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -0,0 +1,1823 @@ +{ + "title": "ServiceDockerData", + "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "short, human readable name for the node", + "example": "Fast Counter", + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "description": { + "title": "Description", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ], + "type": "string" + }, + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "integration-version": { + "title": "Integration-Version", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ], + "type": "string" + }, + "type": { + "description": "service type", + "examples": [ + "computational" + ], + "allOf": [ + { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + } + ] + }, + "badges": { + "title": "Badges", + "type": "array", + "items": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + } + }, + "authors": { + "title": "Authors", + "minItems": 1, + "type": "array", + "items": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + } + }, + "contact": { + "title": "Contact", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ], + "type": "string", + "format": "email" + }, + "inputs": { + "title": "Inputs", + "description": "definition of the inputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + } + } + }, + "outputs": { + "title": "Outputs", + "description": "definition of the outputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + } + } + }, + "boot-options": { + "title": "Boot-Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + } + }, + "required": [ + "name", + "description", + "key", + "version", + "type", + "authors", + "contact", + "inputs", + "outputs" + ], + "additionalProperties": false, + "examples": [ + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "displayOrder": 1, + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "displayOrder": 1, + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + } + }, + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + }, + "boot-options": { + "example_service_defined_boot_mode": { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + "example_service_defined_theme_selection": { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + } + } + ], + "definitions": { + "ServiceType": { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + }, + "Badge": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + }, + "Author": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + }, + "WidgetType": { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + }, + "TextArea": { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + "Structure": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + }, + "SelectBox": { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + }, + "Widget": { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + }, + "ServiceInput": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + }, + "ServiceOutput": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + }, + "BootChoice": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + }, + "BootOption": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json new file mode 100644 index 00000000000..d931c133f7f --- /dev/null +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -0,0 +1,2721 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "ui": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index 9bf88dfc184..d8afe953cc0 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1158,123 +1158,120 @@ components: endpoint: type: string Project: - title: osparc-simcore project - required: - - uuid - - name - - description - - thumbnail - - creationDate - - lastChangeDate - - workbench - - prjOwner - - accessRights - type: object + additionalProperties: false properties: - uuid: - title: Uuid - type: string - description: project unique identifier - format: uuid - name: - title: Name + accessRights: + additionalProperties: true + description: object containing the GroupID as key and read/write/execution permissions as value + title: Accessrights + type: object + x-patternProperties: + ^\S+$: + additionalProperties: false + properties: + delete: + description: gives deletion rights + title: Delete + type: boolean + read: + description: gives read access + title: Read + type: boolean + write: + description: gives write access + title: Write + type: boolean + required: + - read + - write + - delete + title: AccessRights + type: object + classifiers: + description: Contains the reference to the project classifiers + example: 'some:id:to:a:classifier' + items: + type: string + title: Classifiers + type: array + creationDate: + description: project creation date + example: '2018-07-01T11:13:43Z' + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + title: Creationdate type: string - description: project name description: - title: Description - type: string description: longer one-line description about the project - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url of the project thumbnail - format: uri - creationDate: - title: Creationdate - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + example: Dabbling in temporal transitions ... + title: Description type: string - description: project creation date + dev: + description: object used for development purposes only + title: Dev + type: object lastChangeDate: - title: Lastchangedate + description: last save date + example: '2018-07-01T11:13:43Z' pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + title: Lastchangedate type: string - description: last save date - workbench: - title: Workbench - type: object - description: Project's pipeline - prjOwner: - title: Prjowner + name: + description: project name + example: Temporal Distortion Simulator + title: Name type: string + prjOwner: description: user email format: email - accessRights: - title: Accessrights + title: Prjowner + type: string + quality: + default: {} + description: stores the study quality assessment + title: Quality type: object - description: object containing the GroupID as key and read/write/execution permissions as value - tags: - title: Tags - type: array - items: - type: integer - default: [] - classifiers: - title: Classifiers - type: array - items: - type: string - description: Contains the reference to the project classifiers state: - title: ProjectState - required: - - locked - - state - type: object + additionalProperties: false properties: locked: - title: Locked allOf: - - title: ProjectLocked - required: - - value - - status - type: object + - additionalProperties: false + example: + status: CLOSED + value: false properties: - value: - title: Value - type: boolean - description: True if the project is locked owner: - title: Owner allOf: - - title: Owner - required: - - user_id - - first_name - - last_name - type: object + - additionalProperties: false properties: - user_id: - title: User Id - exclusiveMinimum: true - type: integer - description: Owner's identifier when registered in the user's database table - minimum: 0 first_name: + description: Owner first name + example: John title: First Name type: string - description: Owner first name last_name: + description: Owner last name + example: Smith title: Last Name type: string - description: Owner last name - additionalProperties: false + user_id: + description: Owner's identifier when registered in the user's database table + example: 2 + exclusiveMinimum: true + minimum: 0 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object description: 'If locked, the user that owns the lock' + title: Owner status: allOf: - - title: ProjectStatus + - description: An enumeration. enum: - CLOSED - CLOSING @@ -1282,22 +1279,30 @@ components: - EXPORTING - OPENING - OPENED + title: ProjectStatus type: string - description: An enumeration. description: The status of the project - additionalProperties: false - description: The project lock state - state: - title: State - allOf: - - title: ProjectRunningState + value: + description: True if the project is locked + title: Value + type: boolean required: - value + - status + title: ProjectLocked type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false properties: value: allOf: - - title: RunningState + - description: |- + State of execution of a project's computational workflow + + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1308,42 +1313,615 @@ components: - SUCCESS - FAILED - ABORTED + title: RunningState type: string - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state description: The running state of the project - additionalProperties: false + example: STARTED + required: + - value + title: ProjectRunningState + type: object description: The project running state - additionalProperties: false - ui: - title: StudyUI + title: State + required: + - locked + - state + title: ProjectState type: object + tags: + default: [] + items: + type: integer + title: Tags + type: array + thumbnail: + description: url of the project thumbnail + example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + ui: properties: - workbench: - title: Workbench - type: object - slideshow: - title: Slideshow + annotations: + additionalProperties: true + title: Annotations type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + additionalProperties: false + example: + - attributes: + height: 26 + width: 117 + x: 415 + 'y': 100 + color: '#FF0000' + type: rect + - attributes: + text: Hey! + x: 415 + 'y': 100 + color: '#0000FF' + type: text + properties: + attributes: + description: svg attributes + title: Attributes + type: object + color: + format: color + title: Color + type: string + type: + enum: + - rect + - text + title: Type + type: string + required: + - type + - color + - attributes + title: Annotation + type: object currentNodeId: + format: uuid title: Currentnodeid type: string - format: uuid - annotations: - title: Annotations + slideshow: + additionalProperties: true + title: Slideshow type: object - quality: - title: Quality + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + properties: + instructions: + title: Instructions + type: string + position: + title: Position + type: integer + required: + - position + title: Slideshow + type: object + workbench: + additionalProperties: true + title: Workbench + type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + additionalProperties: false + properties: + marker: + additionalProperties: false + properties: + color: + format: color + title: Color + type: string + required: + - color + title: Marker + type: object + position: + allOf: + - additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + title: X + type: integer + 'y': + description: The y position + example: + - '15' + title: 'Y' + type: integer + required: + - x + - 'y' + title: Position + type: object + description: The node position in the workbench + title: Position + required: + - position + title: WorkbenchUI + type: object + title: StudyUI type: object - description: stores the study quality assessment - default: {} - dev: - title: Dev + uuid: + description: project unique identifier + example: 07640335-a91f-468c-ab69-a374fa82078d + format: uuid + title: Uuid + type: string + workbench: + additionalProperties: true + description: Project's pipeline + title: Workbench type: object - description: object used for development purposes only - additionalProperties: false + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + additionalProperties: false + properties: + bootOptions: + description: 'Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services''s defaults.' + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + title: Bootoptions + type: object + inputAccess: + description: map with key - access level pairs + patternProperties: + '^[-_a-zA-Z0-9]+$': + description: An enumeration. + enum: + - ReadAndWrite + - Invisible + - ReadOnly + title: AccessEnum + type: string + type: object + inputNodes: + description: node IDs of where the node is connected to + items: + format: uuid + type: string + title: Inputnodes + type: array + inputs: + description: values of input properties + patternProperties: + '^[-_a-zA-Z0-9]+$': + anyOf: + - type: boolean + - type: integer + - type: number + - format: json-string + type: string + - type: string + - additionalProperties: false + description: I/O port type to reference to an output port of another node in the same project + example: + - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b + output: out_2 + properties: + nodeUuid: + description: The node to get the port output from + format: uuid + title: Nodeuuid + type: string + output: + description: The port key in the node given by nodeUuid + pattern: '^[-_a-zA-Z0-9]+$' + title: Output + type: string + required: + - nodeUuid + - output + title: PortLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 storage + example: + - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - eTag: f7e4c7076761a42a871e978c8691c676 + path: 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + store: '0' + - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + store: 0 + properties: + dataset: + deprecated: true + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + title: SimCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + properties: + dataset: + description: Unique identifier to access the dataset on datcore (REQUIRED for datcore) + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + - label + - dataset + title: DatCoreFileLink + type: object + - additionalProperties: false + description: 'I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)' + example: + - downloadLink: 'https://fakeimg.pl/250x100/' + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + title: Downloadlink + type: string + label: + title: Label + type: string + required: + - downloadLink + title: DownloadLink + type: object + - items: {} + type: array + - type: object + title: Inputs + type: object + inputsUnits: + description: Overrides default unit (if any) defined in the service for each port + patternProperties: + '^[-_a-zA-Z0-9]+$': + type: string + title: Inputsunits + type: object + key: + description: distinctive name for the node based on the docker registry path + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Key + type: string + label: + description: The short name of the node + example: + - JupyterLab + title: Label + type: string + outputNode: + deprecated: true + title: Outputnode + type: boolean + outputNodes: + description: Used in group-nodes. Node IDs of those connected to the output + items: + format: uuid + type: string + title: Outputnodes + type: array + outputs: + description: values of output properties + patternProperties: + '^[-_a-zA-Z0-9]+$': + anyOf: + - type: boolean + - type: integer + - type: number + - format: json-string + type: string + - type: string + - additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 storage + example: + - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - eTag: f7e4c7076761a42a871e978c8691c676 + path: 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + store: '0' + - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + store: 0 + properties: + dataset: + deprecated: true + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + title: SimCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + properties: + dataset: + description: Unique identifier to access the dataset on datcore (REQUIRED for datcore) + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + - label + - dataset + title: DatCoreFileLink + type: object + - additionalProperties: false + description: 'I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)' + example: + - downloadLink: 'https://fakeimg.pl/250x100/' + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + title: Downloadlink + type: string + label: + title: Label + type: string + required: + - downloadLink + title: DownloadLink + type: object + - items: {} + type: array + - type: object + title: Outputs + type: object + parent: + anyOf: + - type: 'null' + - description: Parent's (group-nodes') node ID s. Used to group + format: uuid + title: Parent + type: string + position: + allOf: + - additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + title: X + type: integer + 'y': + description: The y position + example: + - '15' + title: 'Y' + type: integer + required: + - x + - 'y' + title: Position + type: object + deprecated: true + description: Use projects_ui.WorkbenchUI.position instead + title: Position + progress: + description: the node progress value + maximum: 100 + minimum: 0 + title: Progress + type: number + runHash: + anyOf: + - type: 'null' + - description: the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated + title: Runhash + type: string + state: + allOf: + - additionalProperties: false + example: + - currentStatus: NOT_STARTED + dependencies: [] + modified: true + - currentStatus: ABORTED + dependencies: + - 42838344-03de-4ce2-8d93-589a5dcdfd05 + modified: true + - currentStatus: SUCCESS + dependencies: [] + modified: false + properties: + currentStatus: + allOf: + - description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + default: NOT_STARTED + description: the node's current state + dependencies: + description: contains the node inputs dependencies if they need to be computed first + items: + format: uuid + type: string + title: Dependencies + type: array + uniqueItems: true + modified: + default: true + description: true if the node's outputs need to be re-computed + title: Modified + type: boolean + title: NodeState + type: object + description: The node's state object + title: State + thumbnail: + description: url of the latest screenshot of the node + example: + - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + version: + description: semantic version number of the node + example: + - 1.0.0 + - 0.0.1 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Version + type: string + required: + - key + - version + - label + title: Node + type: object + required: + - uuid + - name + - description + - thumbnail + - creationDate + - lastChangeDate + - workbench + - prjOwner + - accessRights + title: osparc-simcore project + type: object responses: DefaultErrorResponse: description: Unexpected error diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json new file mode 100644 index 00000000000..6a5c0c7e6c7 --- /dev/null +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -0,0 +1,1823 @@ +{ + "title": "ServiceDockerData", + "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "short, human readable name for the node", + "example": "Fast Counter", + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "description": { + "title": "Description", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ], + "type": "string" + }, + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "integration-version": { + "title": "Integration-Version", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ], + "type": "string" + }, + "type": { + "description": "service type", + "examples": [ + "computational" + ], + "allOf": [ + { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + } + ] + }, + "badges": { + "title": "Badges", + "type": "array", + "items": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + } + }, + "authors": { + "title": "Authors", + "minItems": 1, + "type": "array", + "items": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + } + }, + "contact": { + "title": "Contact", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ], + "type": "string", + "format": "email" + }, + "inputs": { + "title": "Inputs", + "description": "definition of the inputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + } + } + }, + "outputs": { + "title": "Outputs", + "description": "definition of the outputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + } + } + }, + "boot-options": { + "title": "Boot-Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + } + }, + "required": [ + "name", + "description", + "key", + "version", + "type", + "authors", + "contact", + "inputs", + "outputs" + ], + "additionalProperties": false, + "examples": [ + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "displayOrder": 1, + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "displayOrder": 1, + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + } + }, + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + }, + "boot-options": { + "example_service_defined_boot_mode": { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + "example_service_defined_theme_selection": { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + } + } + ], + "definitions": { + "ServiceType": { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + }, + "Badge": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + }, + "Author": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + }, + "WidgetType": { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + }, + "TextArea": { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + "Structure": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + }, + "SelectBox": { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + }, + "Widget": { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + }, + "ServiceInput": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + }, + "ServiceOutput": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + }, + "BootChoice": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + }, + "BootOption": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json new file mode 100644 index 00000000000..d931c133f7f --- /dev/null +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -0,0 +1,2721 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "ui": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + } + } +} \ No newline at end of file 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 36be7132e9a..ca9846ecee2 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 @@ -2309,123 +2309,120 @@ paths: content: application/json: schema: - title: osparc-simcore project - required: - - uuid - - name - - description - - thumbnail - - creationDate - - lastChangeDate - - workbench - - prjOwner - - accessRights - type: object + additionalProperties: false properties: - uuid: - title: Uuid - type: string - description: project unique identifier - format: uuid - name: - title: Name + accessRights: + additionalProperties: true + description: object containing the GroupID as key and read/write/execution permissions as value + title: Accessrights + type: object + x-patternProperties: + ^\S+$: + additionalProperties: false + properties: + delete: + description: gives deletion rights + title: Delete + type: boolean + read: + description: gives read access + title: Read + type: boolean + write: + description: gives write access + title: Write + type: boolean + required: + - read + - write + - delete + title: AccessRights + type: object + classifiers: + description: Contains the reference to the project classifiers + example: 'some:id:to:a:classifier' + items: + type: string + title: Classifiers + type: array + creationDate: + description: project creation date + example: '2018-07-01T11:13:43Z' + pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + title: Creationdate type: string - description: project name description: - title: Description - type: string description: longer one-line description about the project - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url of the project thumbnail - format: uri - creationDate: - title: Creationdate - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + example: Dabbling in temporal transitions ... + title: Description type: string - description: project creation date + dev: + description: object used for development purposes only + title: Dev + type: object lastChangeDate: - title: Lastchangedate + description: last save date + example: '2018-07-01T11:13:43Z' pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' + title: Lastchangedate type: string - description: last save date - workbench: - title: Workbench - type: object - description: Project's pipeline - prjOwner: - title: Prjowner + name: + description: project name + example: Temporal Distortion Simulator + title: Name type: string + prjOwner: description: user email format: email - accessRights: - title: Accessrights + title: Prjowner + type: string + quality: + default: {} + description: stores the study quality assessment + title: Quality type: object - description: object containing the GroupID as key and read/write/execution permissions as value - tags: - title: Tags - type: array - items: - type: integer - default: [] - classifiers: - title: Classifiers - type: array - items: - type: string - description: Contains the reference to the project classifiers state: - title: ProjectState - required: - - locked - - state - type: object + additionalProperties: false properties: locked: - title: Locked allOf: - - title: ProjectLocked - required: - - value - - status - type: object + - additionalProperties: false + example: + status: CLOSED + value: false properties: - value: - title: Value - type: boolean - description: True if the project is locked owner: - title: Owner allOf: - - title: Owner - required: - - user_id - - first_name - - last_name - type: object + - additionalProperties: false properties: - user_id: - title: User Id - exclusiveMinimum: true - type: integer - description: Owner's identifier when registered in the user's database table - minimum: 0 first_name: + description: Owner first name + example: John title: First Name type: string - description: Owner first name last_name: + description: Owner last name + example: Smith title: Last Name type: string - description: Owner last name - additionalProperties: false + user_id: + description: Owner's identifier when registered in the user's database table + example: 2 + exclusiveMinimum: true + minimum: 0 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object description: 'If locked, the user that owns the lock' + title: Owner status: allOf: - - title: ProjectStatus + - description: An enumeration. enum: - CLOSED - CLOSING @@ -2433,22 +2430,30 @@ paths: - EXPORTING - OPENING - OPENED + title: ProjectStatus type: string - description: An enumeration. description: The status of the project - additionalProperties: false - description: The project lock state - state: - title: State - allOf: - - title: ProjectRunningState + value: + description: True if the project is locked + title: Value + type: boolean required: - value + - status + title: ProjectLocked type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false properties: value: allOf: - - title: RunningState + - description: |- + State of execution of a project's computational workflow + + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -2459,42 +2464,615 @@ paths: - SUCCESS - FAILED - ABORTED + title: RunningState type: string - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state description: The running state of the project - additionalProperties: false + example: STARTED + required: + - value + title: ProjectRunningState + type: object description: The project running state - additionalProperties: false - ui: - title: StudyUI + title: State + required: + - locked + - state + title: ProjectState type: object + tags: + default: [] + items: + type: integer + title: Tags + type: array + thumbnail: + description: url of the project thumbnail + example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + ui: properties: - workbench: - title: Workbench - type: object - slideshow: - title: Slideshow + annotations: + additionalProperties: true + title: Annotations type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + additionalProperties: false + example: + - attributes: + height: 26 + width: 117 + x: 415 + 'y': 100 + color: '#FF0000' + type: rect + - attributes: + text: Hey! + x: 415 + 'y': 100 + color: '#0000FF' + type: text + properties: + attributes: + description: svg attributes + title: Attributes + type: object + color: + format: color + title: Color + type: string + type: + enum: + - rect + - text + title: Type + type: string + required: + - type + - color + - attributes + title: Annotation + type: object currentNodeId: + format: uuid title: Currentnodeid type: string - format: uuid - annotations: - title: Annotations + slideshow: + additionalProperties: true + title: Slideshow type: object - quality: - title: Quality + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + properties: + instructions: + title: Instructions + type: string + position: + title: Position + type: integer + required: + - position + title: Slideshow + type: object + workbench: + additionalProperties: true + title: Workbench + type: object + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + additionalProperties: false + properties: + marker: + additionalProperties: false + properties: + color: + format: color + title: Color + type: string + required: + - color + title: Marker + type: object + position: + allOf: + - additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + title: X + type: integer + 'y': + description: The y position + example: + - '15' + title: 'Y' + type: integer + required: + - x + - 'y' + title: Position + type: object + description: The node position in the workbench + title: Position + required: + - position + title: WorkbenchUI + type: object + title: StudyUI type: object - description: stores the study quality assessment - default: {} - dev: - title: Dev + uuid: + description: project unique identifier + example: 07640335-a91f-468c-ab69-a374fa82078d + format: uuid + title: Uuid + type: string + workbench: + additionalProperties: true + description: Project's pipeline + title: Workbench type: object - description: object used for development purposes only - additionalProperties: false + x-patternProperties: + '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$': + additionalProperties: false + properties: + bootOptions: + description: 'Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services''s defaults.' + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + title: Bootoptions + type: object + inputAccess: + description: map with key - access level pairs + patternProperties: + '^[-_a-zA-Z0-9]+$': + description: An enumeration. + enum: + - ReadAndWrite + - Invisible + - ReadOnly + title: AccessEnum + type: string + type: object + inputNodes: + description: node IDs of where the node is connected to + items: + format: uuid + type: string + title: Inputnodes + type: array + inputs: + description: values of input properties + patternProperties: + '^[-_a-zA-Z0-9]+$': + anyOf: + - type: boolean + - type: integer + - type: number + - format: json-string + type: string + - type: string + - additionalProperties: false + description: I/O port type to reference to an output port of another node in the same project + example: + - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b + output: out_2 + properties: + nodeUuid: + description: The node to get the port output from + format: uuid + title: Nodeuuid + type: string + output: + description: The port key in the node given by nodeUuid + pattern: '^[-_a-zA-Z0-9]+$' + title: Output + type: string + required: + - nodeUuid + - output + title: PortLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 storage + example: + - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - eTag: f7e4c7076761a42a871e978c8691c676 + path: 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + store: '0' + - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + store: 0 + properties: + dataset: + deprecated: true + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + title: SimCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + properties: + dataset: + description: Unique identifier to access the dataset on datcore (REQUIRED for datcore) + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + - label + - dataset + title: DatCoreFileLink + type: object + - additionalProperties: false + description: 'I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)' + example: + - downloadLink: 'https://fakeimg.pl/250x100/' + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + title: Downloadlink + type: string + label: + title: Label + type: string + required: + - downloadLink + title: DownloadLink + type: object + - items: {} + type: array + - type: object + title: Inputs + type: object + inputsUnits: + description: Overrides default unit (if any) defined in the service for each port + patternProperties: + '^[-_a-zA-Z0-9]+$': + type: string + title: Inputsunits + type: object + key: + description: distinctive name for the node based on the docker registry path + example: + - simcore/services/comp/itis/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + title: Key + type: string + label: + description: The short name of the node + example: + - JupyterLab + title: Label + type: string + outputNode: + deprecated: true + title: Outputnode + type: boolean + outputNodes: + description: Used in group-nodes. Node IDs of those connected to the output + items: + format: uuid + type: string + title: Outputnodes + type: array + outputs: + description: values of output properties + patternProperties: + '^[-_a-zA-Z0-9]+$': + anyOf: + - type: boolean + - type: integer + - type: number + - format: json-string + type: string + - type: string + - additionalProperties: false + description: I/O port type to hold a link to a file in simcore S3 storage + example: + - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 + label: input.txt + path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - eTag: f7e4c7076761a42a871e978c8691c676 + path: 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 + store: '0' + - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt + store: 0 + - path: 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt + store: 0 + properties: + dataset: + deprecated: true + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + title: SimCoreFileLink + type: object + - additionalProperties: false + description: I/O port type to hold a link to a file in DATCORE storage + example: + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + - dataset: 'N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4' + label: initial_WTstates + path: 'N:package:32df09ba-e8d6-46da-bd54-f696157de6ce' + store: 1 + properties: + dataset: + description: Unique identifier to access the dataset on datcore (REQUIRED for datcore) + title: Dataset + type: string + eTag: + description: Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box). + title: Etag + type: string + label: + description: The real file name + title: Label + type: string + path: + anyOf: + - pattern: '^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$' + type: string + - pattern: '^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$' + type: string + description: The path to the file in the storage provider domain + title: Path + store: + description: 'The store identifier: 0 for simcore S3, 1 for datcore' + title: Store + type: integer + required: + - store + - path + - label + - dataset + title: DatCoreFileLink + type: object + - additionalProperties: false + description: 'I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)' + example: + - downloadLink: 'https://fakeimg.pl/250x100/' + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + title: Downloadlink + type: string + label: + title: Label + type: string + required: + - downloadLink + title: DownloadLink + type: object + - items: {} + type: array + - type: object + title: Outputs + type: object + parent: + anyOf: + - type: 'null' + - description: Parent's (group-nodes') node ID s. Used to group + format: uuid + title: Parent + type: string + position: + allOf: + - additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + title: X + type: integer + 'y': + description: The y position + example: + - '15' + title: 'Y' + type: integer + required: + - x + - 'y' + title: Position + type: object + deprecated: true + description: Use projects_ui.WorkbenchUI.position instead + title: Position + progress: + description: the node progress value + maximum: 100 + minimum: 0 + title: Progress + type: number + runHash: + anyOf: + - type: 'null' + - description: the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated + title: Runhash + type: string + state: + allOf: + - additionalProperties: false + example: + - currentStatus: NOT_STARTED + dependencies: [] + modified: true + - currentStatus: ABORTED + dependencies: + - 42838344-03de-4ce2-8d93-589a5dcdfd05 + modified: true + - currentStatus: SUCCESS + dependencies: [] + modified: false + properties: + currentStatus: + allOf: + - description: |- + State of execution of a project's computational workflow + + SEE StateType for task state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + default: NOT_STARTED + description: the node's current state + dependencies: + description: contains the node inputs dependencies if they need to be computed first + items: + format: uuid + type: string + title: Dependencies + type: array + uniqueItems: true + modified: + default: true + description: true if the node's outputs need to be re-computed + title: Modified + type: boolean + title: NodeState + type: object + description: The node's state object + title: State + thumbnail: + description: url of the latest screenshot of the node + example: + - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' + format: uri + maxLength: 2083 + minLength: 1 + title: Thumbnail + type: string + version: + description: semantic version number of the node + example: + - 1.0.0 + - 0.0.1 + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + title: Version + type: string + required: + - key + - version + - label + title: Node + type: object + required: + - uuid + - name + - description + - thumbnail + - creationDate + - lastChangeDate + - workbench + - prjOwner + - accessRights + title: osparc-simcore project + type: object responses: '202': description: project created diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json deleted file mode 100644 index 9f1662ccdf3..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-node-meta-generated.json +++ /dev/null @@ -1,859 +0,0 @@ -{ - "title": "ServiceDockerData", - "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "short, human readable name for the node", - "example": "Fast Counter", - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "description": { - "title": "Description", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ], - "type": "string" - }, - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "integration-version": { - "title": "Integration-Version", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ], - "type": "string" - }, - "type": { - "description": "service type", - "examples": [ - "computational" - ], - "allOf": [ - { - "$ref": "#/definitions/ServiceType" - } - ] - }, - "badges": { - "title": "Badges", - "type": "array", - "items": { - "$ref": "#/definitions/Badge" - } - }, - "authors": { - "title": "Authors", - "minItems": 1, - "type": "array", - "items": { - "$ref": "#/definitions/Author" - } - }, - "contact": { - "title": "Contact", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ], - "type": "string", - "format": "email" - }, - "inputs": { - "title": "Inputs", - "description": "definition of the inputs of this node", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/ServiceInput" - } - } - }, - "outputs": { - "title": "Outputs", - "description": "definition of the outputs of this node", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/ServiceOutput" - } - } - }, - "boot-options": { - "title": "Boot-Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "$ref": "#/definitions/BootOption" - } - } - } - }, - "required": [ - "name", - "description", - "key", - "version", - "type", - "authors", - "contact", - "inputs", - "outputs" - ], - "additionalProperties": false, - "examples": [ - { - "name": "oSparc Python Runner", - "key": "simcore/services/comp/osparc-python-runner", - "type": "computational", - "integration-version": "1.0.0", - "version": "1.7.0", - "description": "oSparc Python Runner", - "contact": "smith@company.com", - "authors": [ - { - "name": "John Smith", - "email": "smith@company.com", - "affiliation": "Company" - }, - { - "name": "Richard Brown", - "email": "brown@uni.edu", - "affiliation": "University" - } - ], - "inputs": { - "input_1": { - "displayOrder": 1, - "label": "Input data", - "description": "Any code, requirements or data file", - "type": "data:*/*" - } - }, - "outputs": { - "output_1": { - "displayOrder": 1, - "label": "Output data", - "description": "All data produced by the script is zipped as output_data.zip", - "type": "data:*/*", - "fileToKeyMap": { - "output_data.zip": "output_1" - } - } - } - }, - { - "name": "oSparc Python Runner", - "key": "simcore/services/comp/osparc-python-runner", - "type": "computational", - "integration-version": "1.0.0", - "version": "1.7.0", - "description": "oSparc Python Runner", - "contact": "smith@company.com", - "authors": [ - { - "name": "John Smith", - "email": "smith@company.com", - "affiliation": "Company" - }, - { - "name": "Richard Brown", - "email": "brown@uni.edu", - "affiliation": "University" - } - ], - "inputs": { - "input_1": { - "label": "Input data", - "description": "Any code, requirements or data file", - "type": "data:*/*" - } - }, - "outputs": { - "output_1": { - "label": "Output data", - "description": "All data produced by the script is zipped as output_data.zip", - "type": "data:*/*", - "fileToKeyMap": { - "output_data.zip": "output_1" - } - } - }, - "boot-options": { - "example_service_defined_boot_mode": { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - "example_service_defined_theme_selection": { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - } - } - ], - "definitions": { - "ServiceType": { - "title": "ServiceType", - "description": "An enumeration.", - "enum": [ - "computational", - "dynamic", - "frontend", - "backend" - ], - "type": "string" - }, - "Badge": { - "title": "Badge", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ], - "type": "string" - }, - "image": { - "title": "Image", - "description": "Url to the badge", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "url": { - "title": "Url", - "description": "Link to the status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - } - }, - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false - }, - "Author": { - "title": "Author", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the author", - "example": "Jim Knopf", - "type": "string" - }, - "email": { - "title": "Email", - "description": "Email address", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ], - "type": "string", - "format": "email" - }, - "affiliation": { - "title": "Affiliation", - "description": "Affiliation of the author", - "examples": [ - "Sense8", - "Babylon 5" - ], - "type": "string" - } - }, - "required": [ - "name", - "email" - ], - "additionalProperties": false - }, - "WidgetType": { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - }, - "TextArea": { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - "Structure": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - }, - "SelectBox": { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "$ref": "#/definitions/Structure" - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - }, - "Widget": { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "$ref": "#/definitions/WidgetType" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "$ref": "#/definitions/TextArea" - }, - { - "$ref": "#/definitions/SelectBox" - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - }, - "ServiceInput": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "$ref": "#/definitions/Widget" - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] - }, - "ServiceOutput": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "$ref": "#/definitions/Widget" - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] - }, - "BootChoice": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - }, - "BootOption": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/BootChoice" - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } -} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json deleted file mode 100644 index 36270b43f4b..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/json-schema-project-generated.json +++ /dev/null @@ -1,989 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ], - "type": "string", - "format": "uuid" - }, - "name": { - "title": "Name", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ], - "type": "string" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ], - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Node" - } - } - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "patternProperties": { - "^\\S+$": { - "$ref": "#/definitions/AccessRights" - } - } - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "type": "array", - "items": { - "type": "string" - } - }, - "state": { - "$ref": "#/definitions/ProjectState" - }, - "ui": { - "$ref": "#/definitions/StudyUI" - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "example": { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - "examples": [ - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "example": { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/PortLink" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "$ref": "#/definitions/AccessEnum" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "$ref": "#/definitions/SimCoreFileLink" - }, - { - "$ref": "#/definitions/DatCoreFileLink" - }, - { - "$ref": "#/definitions/DownloadLink" - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "$ref": "#/definitions/NodeState" - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "$ref": "#/definitions/Owner" - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "$ref": "#/definitions/ProjectStatus" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "$ref": "#/definitions/RunningState" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "$ref": "#/definitions/ProjectLocked" - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "$ref": "#/definitions/ProjectRunningState" - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "$ref": "#/definitions/Position" - } - ] - }, - "marker": { - "$ref": "#/definitions/Marker" - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/WorkbenchUI" - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Slideshow" - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "$ref": "#/definitions/Annotation" - } - } - } - } - } - } -} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json new file mode 100644 index 00000000000..6a5c0c7e6c7 --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -0,0 +1,1823 @@ +{ + "title": "ServiceDockerData", + "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "short, human readable name for the node", + "example": "Fast Counter", + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "description": { + "title": "Description", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ], + "type": "string" + }, + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "integration-version": { + "title": "Integration-Version", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ], + "type": "string" + }, + "type": { + "description": "service type", + "examples": [ + "computational" + ], + "allOf": [ + { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + } + ] + }, + "badges": { + "title": "Badges", + "type": "array", + "items": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + } + }, + "authors": { + "title": "Authors", + "minItems": 1, + "type": "array", + "items": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + } + }, + "contact": { + "title": "Contact", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ], + "type": "string", + "format": "email" + }, + "inputs": { + "title": "Inputs", + "description": "definition of the inputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + } + } + }, + "outputs": { + "title": "Outputs", + "description": "definition of the outputs of this node", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + } + } + }, + "boot-options": { + "title": "Boot-Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + } + }, + "required": [ + "name", + "description", + "key", + "version", + "type", + "authors", + "contact", + "inputs", + "outputs" + ], + "additionalProperties": false, + "examples": [ + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "displayOrder": 1, + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "displayOrder": 1, + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + } + }, + { + "name": "oSparc Python Runner", + "key": "simcore/services/comp/osparc-python-runner", + "type": "computational", + "integration-version": "1.0.0", + "version": "1.7.0", + "description": "oSparc Python Runner", + "contact": "smith@company.com", + "authors": [ + { + "name": "John Smith", + "email": "smith@company.com", + "affiliation": "Company" + }, + { + "name": "Richard Brown", + "email": "brown@uni.edu", + "affiliation": "University" + } + ], + "inputs": { + "input_1": { + "label": "Input data", + "description": "Any code, requirements or data file", + "type": "data:*/*" + } + }, + "outputs": { + "output_1": { + "label": "Output data", + "description": "All data produced by the script is zipped as output_data.zip", + "type": "data:*/*", + "fileToKeyMap": { + "output_data.zip": "output_1" + } + } + }, + "boot-options": { + "example_service_defined_boot_mode": { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + "example_service_defined_theme_selection": { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + } + } + ], + "definitions": { + "ServiceType": { + "title": "ServiceType", + "description": "An enumeration.", + "enum": [ + "computational", + "dynamic", + "frontend", + "backend" + ], + "type": "string" + }, + "Badge": { + "title": "Badge", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ], + "type": "string" + }, + "image": { + "title": "Image", + "description": "Url to the badge", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "url": { + "title": "Url", + "description": "Link to the status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + } + }, + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false + }, + "Author": { + "title": "Author", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the author", + "example": "Jim Knopf", + "type": "string" + }, + "email": { + "title": "Email", + "description": "Email address", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ], + "type": "string", + "format": "email" + }, + "affiliation": { + "title": "Affiliation", + "description": "Affiliation of the author", + "examples": [ + "Sense8", + "Babylon 5" + ], + "type": "string" + } + }, + "required": [ + "name", + "email" + ], + "additionalProperties": false + }, + "WidgetType": { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + }, + "TextArea": { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + "Structure": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + }, + "SelectBox": { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + }, + "Widget": { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + }, + "ServiceInput": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] + }, + "ServiceOutput": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] + }, + "BootChoice": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + }, + "BootOption": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } +} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json new file mode 100644 index 00000000000..a47f6c2ad3b --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json @@ -0,0 +1,477 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "simcore node", + "description": "Description of a simcore node 'class' with input and output", + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "type", + "name", + "description", + "authors", + "contact", + "inputs", + "outputs" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ] + }, + "integration-version": { + "type": "string", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ] + }, + "version": { + "type": "string", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "type": { + "type": "string", + "description": "service type", + "enum": [ + "frontend", + "computational", + "dynamic" + ], + "examples": [ + "computational" + ] + }, + "name": { + "type": "string", + "description": "short, human readable name for the node", + "examples": [ + "Fast Counter" + ] + }, + "thumbnail": { + "type": "string", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ] + }, + "badges": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ] + }, + "image": { + "type": "string", + "description": "Url to the shield", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ] + }, + "url": { + "type": "string", + "description": "Link to status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ] + } + } + } + }, + "description": { + "type": "string", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ] + }, + "authors": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "name", + "email" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the author", + "examples": [ + "Sun Bak", + "Delenn" + ] + }, + "email": { + "description": "Email address", + "type": "string", + "format": "email", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ] + }, + "affiliation": { + "description": "Affiliation of the author", + "type": "string", + "examples": [ + "Sense8", + "Babylon 5" + ] + } + } + } + }, + "contact": { + "type": "string", + "format": "email", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ] + }, + "inputs": { + "type": "object", + "description": "definition of the inputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the input configurable for this service", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "description": "data type expected on this input glob matching for data type is allowed", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data associated with the named keys in files", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "defaultValue": { + "description": "initial value for this input", + "type": [ + "string", + "number", + "integer", + "boolean" + ], + "examples": [ + "Dog", + true + ] + }, + "unit": { + "title": "Unit", + "description": "Units of this input value, if a physical quantity", + "type": "string" + }, + "widget": { + "description": "custom widget to use instead of the default one determined from the data-type", + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "TextArea" + ] + }, + "minHeight": { + "description": "minimum Height of the textarea", + "type": "integer", + "minimum": 1 + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "structure" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "SelectBox" + ] + }, + "structure": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "label" + ], + "properties": { + "key": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "label": { + "type": "string" + } + }, + "examples": [ + [ + { + "key": "rat", + "label": "The Rat" + }, + { + "key": "dog", + "label": "Bello the Dog" + } + ] + ] + } + } + } + } + ] + } + } + } + } + }, + "outputs": { + "type": "object", + "description": "definition of the outputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the output produced by this node", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "type": "number", + "description": "use this to numerically sort the properties for display", + "examples": [ + 1, + -0.2 + ] + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", + "description": "data type expected on this output", + "examples": [ + "number", + "integer", + "boolean", + "string", + "data:application/json", + "data:application/vnd.ms-excel ", + "data:text/plain", + "data:application/hdf5" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "unit": { + "title": "Unit", + "description": "Units of the output value, if a physical quantity", + "type": "string" + } + } + } + } + }, + "boot-options": { + "title": "Boot Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z0-9]+$": { + "title": "BootOptionMode", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootOptionItem", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ] + } + } + } + } +} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json new file mode 100644 index 00000000000..d931c133f7f --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -0,0 +1,2721 @@ +{ + "title": "osparc-simcore project", + "type": "object", + "properties": { + "uuid": { + "title": "Uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ], + "type": "string", + "format": "uuid" + }, + "name": { + "title": "Name", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ], + "type": "string" + }, + "description": { + "title": "Description", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ], + "type": "string" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the project thumbnail", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "creationDate": { + "title": "Creationdate", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "lastChangeDate": { + "title": "Lastchangedate", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ], + "type": "string" + }, + "workbench": { + "title": "Workbench", + "description": "Project's pipeline", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + } + } + }, + "prjOwner": { + "title": "Prjowner", + "description": "user email", + "type": "string", + "format": "email" + }, + "accessRights": { + "title": "Accessrights", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "type": "object", + "patternProperties": { + "^\\S+$": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + } + } + }, + "tags": { + "title": "Tags", + "default": [], + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "title": "Classifiers", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "type": "array", + "items": { + "type": "string" + } + }, + "state": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "ui": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + }, + "quality": { + "title": "Quality", + "description": "stores the study quality assessment", + "default": {}, + "type": "object" + }, + "dev": { + "title": "Dev", + "description": "object used for development purposes only", + "type": "object" + } + }, + "required": [ + "uuid", + "name", + "description", + "thumbnail", + "creationDate", + "lastChangeDate", + "workbench", + "prjOwner", + "accessRights" + ], + "additionalProperties": false, + "definitions": { + "PortLink": { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + "SimCoreFileLink": { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + "DatCoreFileLink": { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + "DownloadLink": { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + "AccessEnum": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + }, + "Position": { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + }, + "RunningState": { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + }, + "NodeState": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + }, + "Node": { + "title": "Node", + "type": "object", + "properties": { + "key": { + "title": "Key", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ], + "type": "string" + }, + "version": { + "title": "Version", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ], + "type": "string" + }, + "label": { + "title": "Label", + "description": "The short name of the node", + "examples": [ + "JupyterLab" + ], + "type": "string" + }, + "progress": { + "title": "Progress", + "description": "the node progress value", + "minimum": 0, + "maximum": 100, + "type": "number" + }, + "thumbnail": { + "title": "Thumbnail", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ], + "minLength": 1, + "maxLength": 2083, + "format": "uri", + "type": "string" + }, + "runHash": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Runhash", + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": "string" + } + ] + }, + "inputs": { + "title": "Inputs", + "description": "values of input properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "PortLink", + "description": "I/O port type to reference to an output port of another node in the same project", + "type": "object", + "properties": { + "nodeUuid": { + "title": "Nodeuuid", + "description": "The node to get the port output from", + "type": "string", + "format": "uuid" + }, + "output": { + "title": "Output", + "description": "The port key in the node given by nodeUuid", + "pattern": "^[-_a-zA-Z0-9]+$", + "type": "string" + } + }, + "required": [ + "nodeUuid", + "output" + ], + "additionalProperties": false, + "examples": [ + { + "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", + "output": "out_2" + } + ] + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "inputsUnits": { + "title": "Inputsunits", + "description": "Overrides default unit (if any) defined in the service for each port", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string" + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "title": "AccessEnum", + "description": "An enumeration.", + "enum": [ + "ReadAndWrite", + "Invisible", + "ReadOnly" + ], + "type": "string" + } + } + }, + "inputNodes": { + "title": "Inputnodes", + "description": "node IDs of where the node is connected to", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "outputs": { + "title": "Outputs", + "description": "values of output properties", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string", + "format": "json-string" + }, + { + "type": "string" + }, + { + "title": "SimCoreFileLink", + "description": "I/O port type to hold a link to a file in simcore S3 storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "deprecated": true, + "type": "string" + } + }, + "required": [ + "store", + "path" + ], + "additionalProperties": false, + "examples": [ + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", + "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", + "label": "input.txt" + }, + { + "store": "0", + "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", + "eTag": "f7e4c7076761a42a871e978c8691c676" + }, + { + "store": 0, + "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" + }, + { + "store": 0, + "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" + } + ] + }, + { + "title": "DatCoreFileLink", + "description": "I/O port type to hold a link to a file in DATCORE storage", + "type": "object", + "properties": { + "store": { + "title": "Store", + "description": "The store identifier: 0 for simcore S3, 1 for datcore", + "type": "integer" + }, + "path": { + "title": "Path", + "description": "The path to the file in the storage provider domain", + "anyOf": [ + { + "type": "string", + "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" + }, + { + "type": "string", + "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + } + ] + }, + "label": { + "title": "Label", + "description": "The real file name", + "type": "string" + }, + "eTag": { + "title": "Etag", + "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", + "type": "string" + }, + "dataset": { + "title": "Dataset", + "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", + "type": "string" + } + }, + "required": [ + "store", + "path", + "label", + "dataset" + ], + "additionalProperties": false, + "examples": [ + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + }, + { + "store": 1, + "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", + "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", + "label": "initial_WTstates" + } + ] + }, + { + "title": "DownloadLink", + "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", + "type": "object", + "properties": { + "downloadLink": { + "title": "Downloadlink", + "minLength": 1, + "maxLength": 65536, + "format": "uri", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "downloadLink" + ], + "additionalProperties": false, + "examples": [ + { + "downloadLink": "https://fakeimg.pl/250x100/" + } + ] + }, + { + "type": "array", + "items": {} + }, + { + "type": "object" + } + ] + } + } + }, + "outputNode": { + "title": "Outputnode", + "deprecated": true, + "type": "boolean" + }, + "outputNodes": { + "title": "Outputnodes", + "description": "Used in group-nodes. Node IDs of those connected to the output", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + } + }, + "parent": { + "anyOf": [ + { + "type": "null" + }, + { + "title": "Parent", + "description": "Parent's (group-nodes') node ID s. Used to group", + "type": "string", + "format": "uuid" + } + ] + }, + "position": { + "title": "Position", + "description": "Use projects_ui.WorkbenchUI.position instead", + "deprecated": true, + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "state": { + "title": "State", + "description": "The node's state object", + "allOf": [ + { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "uniqueItems": true + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "additionalProperties": false, + "examples": [ + { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + { + "modified": true, + "dependencies": [ + "42838344-03de-4ce2-8d93-589a5dcdfd05" + ], + "currentStatus": "ABORTED" + }, + { + "modified": false, + "dependencies": [], + "currentStatus": "SUCCESS" + } + ] + } + ] + }, + "bootOptions": { + "title": "Bootoptions", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + }, + "required": [ + "key", + "version", + "label" + ], + "additionalProperties": false + }, + "AccessRights": { + "title": "AccessRights", + "type": "object", + "properties": { + "read": { + "title": "Read", + "description": "gives read access", + "type": "boolean" + }, + "write": { + "title": "Write", + "description": "gives write access", + "type": "boolean" + }, + "delete": { + "title": "Delete", + "description": "gives deletion rights", + "type": "boolean" + } + }, + "required": [ + "read", + "write", + "delete" + ], + "additionalProperties": false + }, + "Owner": { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + }, + "ProjectStatus": { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + }, + "ProjectLocked": { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + }, + "ProjectRunningState": { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + "ProjectState": { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ], + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ + { + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } + } + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" + ], + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false + }, + "Marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + }, + "WorkbenchUI": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + }, + "Slideshow": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + }, + "Annotation": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + }, + "StudyUI": { + "title": "StudyUI", + "type": "object", + "properties": { + "workbench": { + "title": "Workbench", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "WorkbenchUI", + "type": "object", + "properties": { + "position": { + "title": "Position", + "description": "The node position in the workbench", + "allOf": [ + { + "title": "Position", + "type": "object", + "properties": { + "x": { + "title": "X", + "description": "The x position", + "example": [ + "12" + ], + "type": "integer" + }, + "y": { + "title": "Y", + "description": "The y position", + "example": [ + "15" + ], + "type": "integer" + } + }, + "required": [ + "x", + "y" + ], + "additionalProperties": false + } + ] + }, + "marker": { + "title": "Marker", + "type": "object", + "properties": { + "color": { + "title": "Color", + "type": "string", + "format": "color" + } + }, + "required": [ + "color" + ], + "additionalProperties": false + } + }, + "required": [ + "position" + ], + "additionalProperties": false + } + } + }, + "slideshow": { + "title": "Slideshow", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Slideshow", + "type": "object", + "properties": { + "position": { + "title": "Position", + "type": "integer" + }, + "instructions": { + "title": "Instructions", + "type": "string" + } + }, + "required": [ + "position" + ] + } + } + }, + "currentNodeId": { + "title": "Currentnodeid", + "type": "string", + "format": "uuid" + }, + "annotations": { + "title": "Annotations", + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { + "title": "Annotation", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "rect", + "text" + ], + "type": "string" + }, + "color": { + "title": "Color", + "type": "string", + "format": "color" + }, + "attributes": { + "title": "Attributes", + "description": "svg attributes", + "type": "object" + } + }, + "required": [ + "type", + "color", + "attributes" + ], + "additionalProperties": false, + "examples": [ + { + "type": "rect", + "color": "#FF0000", + "attributes": { + "x": 415, + "y": 100, + "width": 117, + "height": 26 + } + }, + { + "type": "text", + "color": "#0000FF", + "attributes": { + "x": 415, + "y": 100, + "text": "Hey!" + } + } + ] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json new file mode 100644 index 00000000000..8c178845ccb --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} From 70e321707bbef625707f28b960abeb3687b099bf Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 13 Mar 2023 13:52:03 +0100 Subject: [PATCH 04/34] testing 2. approach --- .../schemas/openapi-project-generated.yaml | 10 +- ...oject-v0.0.1-pydantic-converted-clean.yaml | 201 ++++++------- .../project-v0.0.1-pydantic-converted.yaml | 215 ++++++------- .../schemas/project-v0.0.1-pydantic.json | 283 +++++++++--------- api/specs/common/schemas/project.yaml | 2 - api/specs/common/schemas/services.yaml | 2 - .../src/models_library/projects.py | 20 +- .../tests/test__models_fit_schemas.py | 2 +- .../models-library/tests/test_services.py | 22 +- .../src/pytest_simcore/schemas.py | 2 +- .../core/settings.py | 2 +- services/director/Dockerfile | 6 +- .../v0/schemas/project-v0.0.1-pydantic.json | 283 +++++++++--------- .../src/simcore_service_director/config.py | 6 +- services/director/tests/conftest.py | 2 +- .../api/v0/openapi.yaml | 196 ++++++------ .../v0/schemas/project-v0.0.1-pydantic.json | 283 +++++++++--------- .../api/v0/openapi.yaml | 196 ++++++------ .../v0/schemas/project-v0.0.1-pydantic.json | 283 +++++++++--------- services/web/server/tests/unit/conftest.py | 2 +- .../tests/unit/isolated/test_director_api.py | 16 +- .../test_projects__project_models_rest.py | 5 +- 22 files changed, 1038 insertions(+), 1001 deletions(-) diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index e0c7d6fdffe..d42b7c7f406 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -405,7 +405,9 @@ components: type: string description: Contains the reference to the project classifiers state: - $ref: '#/components/schemas/ProjectState' + anyOf: + - type: 'null' + - $ref: '#/components/schemas/ProjectState' ui: $ref: '#/components/schemas/StudyUI' quality: @@ -492,10 +494,8 @@ components: - FAILED - ABORTED type: string - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + description: "State of execution of a project's computational workflow\n\n \ + \ SEE StateType for task state\n " SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index 8af0d70e816..d79fc3cd660 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -72,104 +72,104 @@ properties: title: Quality type: object state: - additionalProperties: false - properties: - locked: - allOf: - - additionalProperties: false - example: - status: CLOSED - value: false - properties: - owner: - allOf: - - additionalProperties: false - properties: - first_name: - description: Owner first name - example: John - title: First Name - type: string - last_name: - description: Owner last name - example: Smith - title: Last Name - type: string - user_id: - description: Owner's identifier when registered in the user's - database table - example: 2 - exclusiveMinimum: true - minimum: 0 - title: User Id - type: integer - required: - - user_id - - first_name - - last_name + anyOf: + - nullable: true + - additionalProperties: false + properties: + locked: + allOf: + - additionalProperties: false + example: + status: CLOSED + value: false + properties: + owner: + allOf: + - additionalProperties: false + properties: + first_name: + description: Owner first name + example: John + title: First Name + type: string + last_name: + description: Owner last name + example: Smith + title: Last Name + type: string + user_id: + description: Owner's identifier when registered in the user's + database table + example: 2 + exclusiveMinimum: true + minimum: 0 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object + description: If locked, the user that owns the lock title: Owner - type: object - description: If locked, the user that owns the lock - title: Owner - status: - allOf: - - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - title: ProjectStatus - type: string - description: The status of the project - value: - description: True if the project is locked - title: Value - type: boolean - required: - - value - - status - title: ProjectLocked - type: object - description: The project lock state - title: Locked - state: - allOf: - - additionalProperties: false - properties: - value: - allOf: - - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - title: RunningState - type: string - description: The running state of the project - example: STARTED - required: - - value - title: ProjectRunningState - type: object - description: The project running state - title: State - required: - - locked - - state - title: ProjectState - type: object + status: + allOf: + - description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + title: ProjectStatus + type: string + description: The status of the project + value: + description: True if the project is locked + title: Value + type: boolean + required: + - value + - status + title: ProjectLocked + type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false + properties: + value: + allOf: + - description: "State of execution of a project's computational workflow\n\ + \n SEE StateType for task state\n " + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + description: The running state of the project + example: STARTED + required: + - value + title: ProjectRunningState + type: object + description: The project running state + title: State + required: + - locked + - state + title: ProjectState + type: object tags: default: [] items: @@ -714,11 +714,8 @@ properties: properties: currentStatus: allOf: - - description: 'State of execution of a project''s computational - workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational\ + \ workflow\n\n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index d87c312a8b6..b90211cfa6d 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -588,105 +588,109 @@ properties: type: string example: some:id:to:a:classifier state: - title: ProjectState - type: object - properties: - locked: - title: Locked - description: The project lock state - allOf: - - title: ProjectLocked - type: object - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: If locked, the user that owns the lock - allOf: - - title: Owner - type: object - properties: - user_id: - title: User Id - description: >- - Owner's identifier when registered in the user's - database table - exclusiveMinimum: true - type: integer - minimum: 0 - example: 2 - first_name: - title: First Name - description: Owner first name - type: string - example: John - last_name: - title: Last Name - description: Owner last name + anyOf: + - nullable: true + - title: ProjectState + type: object + properties: + locked: + title: Locked + description: The project lock state + allOf: + - title: ProjectLocked + type: object + properties: + value: + title: Value + description: True if the project is locked + type: boolean + owner: + title: Owner + description: If locked, the user that owns the lock + allOf: + - title: Owner + type: object + properties: + user_id: + title: User Id + description: >- + Owner's identifier when registered in the user's + database table + exclusiveMinimum: true + type: integer + minimum: 0 + example: 2 + first_name: + title: First Name + description: Owner first name + type: string + example: John + last_name: + title: Last Name + description: Owner last name + type: string + example: Smith + required: + - user_id + - first_name + - last_name + additionalProperties: false + status: + description: The status of the project + allOf: + - title: ProjectStatus + description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED type: string - example: Smith - required: - - user_id - - first_name - - last_name - additionalProperties: false - status: - description: The status of the project - allOf: - - title: ProjectStatus - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - required: - - value - - status - additionalProperties: false - example: - value: false - status: CLOSED - state: - title: State - description: The project running state - allOf: - - title: ProjectRunningState - type: object - properties: - value: - description: The running state of the project - allOf: - - title: RunningState - description: |- - State of execution of a project's computational workflow + required: + - value + - status + additionalProperties: false + example: + value: false + status: CLOSED + state: + title: State + description: The project running state + allOf: + - title: ProjectRunningState + type: object + properties: + value: + description: The running state of the project + allOf: + - title: RunningState + description: >- + State of execution of a project's computational + workflow - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - example: STARTED - required: - - value - additionalProperties: false - required: - - locked - - state - additionalProperties: false + SEE StateType for task state + + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + type: string + example: STARTED + required: + - value + additionalProperties: false + required: + - locked + - state + additionalProperties: false ui: title: StudyUI type: object @@ -1001,7 +1005,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1040,7 +1045,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1508,7 +1514,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1687,7 +1694,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1792,7 +1800,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index d931c133f7f..67a4c04e712 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -781,153 +781,160 @@ } }, "state": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" ], "type": "string" } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false + ] } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } } ] } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" ], - "type": "string" + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] } - ] + }, + "required": [ + "value" + ], + "additionalProperties": false } - }, - "required": [ - "value" - ], - "additionalProperties": false + ] } - ] + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false + ] }, "ui": { "title": "StudyUI", @@ -1334,7 +1341,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1374,7 +1381,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2011,7 +2018,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2250,7 +2257,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2390,7 +2397,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2718,4 +2725,4 @@ } } } -} \ No newline at end of file +} diff --git a/api/specs/common/schemas/project.yaml b/api/specs/common/schemas/project.yaml index c68dad1a76f..3e29050d776 100644 --- a/api/specs/common/schemas/project.yaml +++ b/api/specs/common/schemas/project.yaml @@ -1,12 +1,10 @@ components: schemas: ProjectIn: - # $ref: "./matus-without-ref-converted.yaml" $ref: "./project-v0.0.1-pydantic-converted-clean.yaml" ProjectOut: allOf: - # - $ref: "./matus-without-ref-converted.yaml" - $ref: "./project-v0.0.1-pydantic-converted-clean.yaml" - type: object properties: diff --git a/api/specs/common/schemas/services.yaml b/api/specs/common/schemas/services.yaml index c29280b4036..089f208a027 100644 --- a/api/specs/common/schemas/services.yaml +++ b/api/specs/common/schemas/services.yaml @@ -9,8 +9,6 @@ components: type: array items: $ref: "./node-meta-v0.0.1-pydantic-converted-clean.yaml" - # $ref: "./openapi-node-meta-generated.yaml#/components/schemas/ServiceDockerData" - # $ref: "./depreciated/node-meta-v0.0.1-converted.yaml" error: nullable: true default: null diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 6dd39b8c656..581f6e30a41 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -155,13 +155,13 @@ class Config: title = "osparc-simcore project" extra = Extra.forbid - # @staticmethod - # def schema_extra(schema: dict, _model: "Project"): - # # pylint: disable=unsubscriptable-object - - # # Patch to allow jsonschema nullable - # # SEE https://github.com/samuelcolvin/pydantic/issues/990#issuecomment-645961530 - # state_pydantic_schema = deepcopy(schema["properties"]["state"]) - # schema["properties"]["state"] = { - # "anyOf": [{"type": "null"}, state_pydantic_schema] - # } + @staticmethod + def schema_extra(schema: dict, _model: "Project"): + # pylint: disable=unsubscriptable-object + + # Patch to allow jsonschema nullable + # SEE https://github.com/samuelcolvin/pydantic/issues/990#issuecomment-645961530 + state_pydantic_schema = deepcopy(schema["properties"]["state"]) + schema["properties"]["state"] = { + "anyOf": [{"type": "null"}, state_pydantic_schema] + } diff --git a/packages/models-library/tests/test__models_fit_schemas.py b/packages/models-library/tests/test__models_fit_schemas.py index 9c22785ce6e..bbf9f0adfe7 100644 --- a/packages/models-library/tests/test__models_fit_schemas.py +++ b/packages/models-library/tests/test__models_fit_schemas.py @@ -13,7 +13,7 @@ @pytest.mark.parametrize( "pydantic_model, original_json_schema", - [(ServiceDockerData, "json-schema-node-meta-generated.json"), (Project, "json-schema-project-generated.json")], + [(ServiceDockerData, "node-meta-v0.0.1-pydantic.json"), (Project, "project-v0.0.1-pydantic.json")], ) def test_generated_schema_same_as_original( pydantic_model: BaseModel, diff --git a/packages/models-library/tests/test_services.py b/packages/models-library/tests/test_services.py index e231749db58..1143ad343cf 100644 --- a/packages/models-library/tests/test_services.py +++ b/packages/models-library/tests/test_services.py @@ -5,7 +5,7 @@ import re from copy import deepcopy from pprint import pformat -from typing import Any, Callable, Dict, List +from typing import Any, Callable import pytest from models_library.basic_regex import VERSION_RE @@ -24,7 +24,7 @@ @pytest.fixture() -def minimal_service_common_data() -> Dict[str, Any]: +def minimal_service_common_data() -> dict[str, Any]: return dict( name="this is a nice sample service", description="this is the description of the service", @@ -32,7 +32,7 @@ def minimal_service_common_data() -> Dict[str, Any]: def test_create_minimal_service_common_data( - minimal_service_common_data: Dict[str, Any] + minimal_service_common_data: dict[str, Any] ): service = _BaseServiceCommonDataModel(**minimal_service_common_data) @@ -41,7 +41,7 @@ def test_create_minimal_service_common_data( assert service.thumbnail == None -def test_node_with_empty_thumbnail(minimal_service_common_data: Dict[str, Any]): +def test_node_with_empty_thumbnail(minimal_service_common_data: dict[str, Any]): service_data = minimal_service_common_data service_data.update({"thumbnail": ""}) @@ -52,7 +52,7 @@ def test_node_with_empty_thumbnail(minimal_service_common_data: Dict[str, Any]): assert service.thumbnail == None -def test_node_with_thumbnail(minimal_service_common_data: Dict[str, Any]): +def test_node_with_thumbnail(minimal_service_common_data: dict[str, Any]): service_data = minimal_service_common_data service_data.update( { @@ -182,22 +182,22 @@ def test_services_model_examples(model_cls, model_cls_examples): @pytest.mark.parametrize( "python_regex_pattern, json_schema_file_name, json_schema_entry_paths", [ - (SERVICE_KEY_RE, "json-schema-project-generated.json", ["key"]), - (VERSION_RE, "json-schema-project-generated.json", ["version"]), - (VERSION_RE, "json-schema-node-meta-generated.json", ["version"]), - (SERVICE_KEY_RE, "json-schema-node-meta-generated.json", ["key"]), + (SERVICE_KEY_RE, "project-v0.0.1-pydantic.json", ["key"]), + (VERSION_RE, "project-v0.0.1-pydantic.json", ["version"]), + (VERSION_RE, "node-meta-v0.0.1-pydantic.json", ["version"]), + (SERVICE_KEY_RE, "node-meta-v0.0.1-pydantic.json", ["key"]), ], ) def test_same_regex_patterns_in_jsonschema_and_python( python_regex_pattern: str, json_schema_file_name: str, - json_schema_entry_paths: List[str], + json_schema_entry_paths: list[str], json_schema_dict: Callable, ): # read file in json_schema_config = json_schema_dict(json_schema_file_name) # go to keys - def _find_pattern_entry(obj: Dict[str, Any], key: str) -> Any: + def _find_pattern_entry(obj: dict[str, Any], key: str) -> Any: if key in obj: return obj[key]["pattern"] for v in obj.values(): diff --git a/packages/pytest-simcore/src/pytest_simcore/schemas.py b/packages/pytest-simcore/src/pytest_simcore/schemas.py index d26b46244ef..f09a7235f0d 100644 --- a/packages/pytest-simcore/src/pytest_simcore/schemas.py +++ b/packages/pytest-simcore/src/pytest_simcore/schemas.py @@ -20,7 +20,7 @@ def common_schemas_specs_dir(osparc_simcore_root_dir: Path) -> Path: @pytest.fixture(scope="session") def node_meta_schema_file(common_schemas_specs_dir: Path) -> Path: - node_meta_file = common_schemas_specs_dir / "json-schema-node-meta-generated.json" + node_meta_file = common_schemas_specs_dir / "node-meta-v0.0.1-pydantic.json" assert node_meta_file.exists() return node_meta_file diff --git a/services/director-v2/src/simcore_service_director_v2/core/settings.py b/services/director-v2/src/simcore_service_director_v2/core/settings.py index ed6f0d4b5f9..dc0d5036d79 100644 --- a/services/director-v2/src/simcore_service_director_v2/core/settings.py +++ b/services/director-v2/src/simcore_service_director_v2/core/settings.py @@ -517,7 +517,7 @@ class AppSettings(BaseCustomSettings, MixinLoggingSettings): SWARM_STACK_NAME: str = Field("undefined-please-check", env="SWARM_STACK_NAME") NODE_SCHEMA_LOCATION: str = Field( - f"{API_ROOT}/{API_VTAG}/schemas/json-schema-node-meta-generated.json", + f"{API_ROOT}/{API_VTAG}/schemas/node-meta-v0.0.1-pydantic.json", description="used when in devel mode vs release mode", ) diff --git a/services/director/Dockerfile b/services/director/Dockerfile index 5feebf8a7e5..e7d1bfc4e10 100644 --- a/services/director/Dockerfile +++ b/services/director/Dockerfile @@ -90,8 +90,8 @@ RUN pip --no-cache-dir install -r /build/services/director/requirements/_base.tx # FIXME: # necessary to prevent duplicated files. # Will be removed when director is refactored using cookiecutter as this will not be necessary anymore -COPY --chown=scu:scu api/specs/common/schemas/json-schema-node-meta-generated.json \ - /build/services/director/src/simcore_service_director/api/v0/oas-parts/schemas/json-schema-node-meta-generated.json +COPY --chown=scu:scu api/specs/common/schemas/node-meta-v0.0.1-pydantic.json \ + /build/services/director/src/simcore_service_director/api/v0/oas-parts/schemas/node-meta-v0.0.1-pydantic.json # --------------------------Prod-depends-only stage ------------------- # This stage is for production only dependencies that get partially wiped out afterwards (final docker image concerns) @@ -147,7 +147,7 @@ CMD ["services/director/docker/boot.sh"] FROM build as development ENV SC_BUILD_TARGET=development -ENV NODE_SCHEMA_LOCATION=../../../api/specs/common/schemas/json-schema-node-meta-generated.json +ENV NODE_SCHEMA_LOCATION=../../../api/specs/common/schemas/node-meta-v0.0.1-pydantic.json WORKDIR /devel RUN chown -R scu:scu "${VIRTUAL_ENV}" ENTRYPOINT [ "/bin/sh", "services/director/docker/entrypoint.sh" ] diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index d931c133f7f..67a4c04e712 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -781,153 +781,160 @@ } }, "state": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" ], "type": "string" } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false + ] } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } } ] } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" ], - "type": "string" + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] } - ] + }, + "required": [ + "value" + ], + "additionalProperties": false } - }, - "required": [ - "value" - ], - "additionalProperties": false + ] } - ] + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false + ] }, "ui": { "title": "StudyUI", @@ -1334,7 +1341,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1374,7 +1381,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2011,7 +2018,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2250,7 +2257,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2390,7 +2397,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2718,4 +2725,4 @@ } } } -} \ No newline at end of file +} diff --git a/services/director/src/simcore_service_director/config.py b/services/director/src/simcore_service_director/config.py index 6c498f700bd..ea428387175 100644 --- a/services/director/src/simcore_service_director/config.py +++ b/services/director/src/simcore_service_director/config.py @@ -4,7 +4,7 @@ import logging import os from distutils.util import strtobool -from typing import Dict, Optional +from typing import Optional from servicelib.client_session import ( # pylint: disable=no-name-in-module APP_CLIENT_SESSION_KEY, @@ -99,7 +99,7 @@ def _from_env_with_default(env: str, python_type, default): EXTRA_HOSTS_SUFFIX: str = os.environ.get("EXTRA_HOSTS_SUFFIX", "undefined") # these are the envs passed to the dynamic services by default -SERVICES_DEFAULT_ENVS: Dict[str, str] = { +SERVICES_DEFAULT_ENVS: dict[str, str] = { "POSTGRES_ENDPOINT": os.environ.get( "POSTGRES_ENDPOINT", "undefined postgres endpoint" ), @@ -121,7 +121,7 @@ def _from_env_with_default(env: str, python_type, default): # used when in devel mode vs release mode NODE_SCHEMA_LOCATION: str = os.environ.get( - "NODE_SCHEMA_LOCATION", f"{API_ROOT}/{API_VERSION}/schemas/json-schema-node-meta-generated.json" + "NODE_SCHEMA_LOCATION", f"{API_ROOT}/{API_VERSION}/schemas/node-meta-v0.0.1-pydantic.json" ) # used to find the right network name SIMCORE_SERVICES_NETWORK_NAME: Optional[str] = os.environ.get( diff --git a/services/director/tests/conftest.py b/services/director/tests/conftest.py index e03744bb647..7efd511702f 100644 --- a/services/director/tests/conftest.py +++ b/services/director/tests/conftest.py @@ -45,7 +45,7 @@ def package_dir(): @pytest.fixture def configure_schemas_location(package_dir, common_schemas_specs_dir): config.NODE_SCHEMA_LOCATION = str( - common_schemas_specs_dir / "json-schema-node-meta-generated.json" + common_schemas_specs_dir / "node-meta-v0.0.1-pydantic.json" ) resources.RESOURCE_NODE_SCHEMA = os.path.relpath( config.NODE_SCHEMA_LOCATION, package_dir diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index d8afe953cc0..b33c250dbcf 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1231,103 +1231,106 @@ components: title: Quality type: object state: - additionalProperties: false - properties: - locked: - allOf: - - additionalProperties: false - example: - status: CLOSED - value: false - properties: - owner: - allOf: - - additionalProperties: false - properties: - first_name: - description: Owner first name - example: John - title: First Name - type: string - last_name: - description: Owner last name - example: Smith - title: Last Name - type: string - user_id: - description: Owner's identifier when registered in the user's database table - example: 2 - exclusiveMinimum: true - minimum: 0 - title: User Id - type: integer - required: - - user_id - - first_name - - last_name + anyOf: + - nullable: true + - additionalProperties: false + properties: + locked: + allOf: + - additionalProperties: false + example: + status: CLOSED + value: false + properties: + owner: + allOf: + - additionalProperties: false + properties: + first_name: + description: Owner first name + example: John + title: First Name + type: string + last_name: + description: Owner last name + example: Smith + title: Last Name + type: string + user_id: + description: Owner's identifier when registered in the user's database table + example: 2 + exclusiveMinimum: true + minimum: 0 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object + description: 'If locked, the user that owns the lock' title: Owner - type: object - description: 'If locked, the user that owns the lock' - title: Owner - status: - allOf: - - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - title: ProjectStatus - type: string - description: The status of the project - value: - description: True if the project is locked - title: Value - type: boolean - required: - - value - - status - title: ProjectLocked - type: object - description: The project lock state - title: Locked - state: - allOf: - - additionalProperties: false - properties: - value: - allOf: - - description: |- - State of execution of a project's computational workflow + status: + allOf: + - description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + title: ProjectStatus + type: string + description: The status of the project + value: + description: True if the project is locked + title: Value + type: boolean + required: + - value + - status + title: ProjectLocked + type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false + properties: + value: + allOf: + - description: |- + State of execution of a project's computational workflow - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - title: RunningState - type: string - description: The running state of the project - example: STARTED - required: - - value - title: ProjectRunningState - type: object - description: The project running state - title: State - required: - - locked - - state - title: ProjectState - type: object + SEE StateType for task state + + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + description: The running state of the project + example: STARTED + required: + - value + title: ProjectRunningState + type: object + description: The project running state + title: State + required: + - locked + - state + title: ProjectState + type: object tags: default: [] items: @@ -1855,7 +1858,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index d931c133f7f..67a4c04e712 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -781,153 +781,160 @@ } }, "state": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" ], "type": "string" } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false + ] } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } } ] } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" ], - "type": "string" + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] } - ] + }, + "required": [ + "value" + ], + "additionalProperties": false } - }, - "required": [ - "value" - ], - "additionalProperties": false + ] } - ] + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false + ] }, "ui": { "title": "StudyUI", @@ -1334,7 +1341,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1374,7 +1381,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2011,7 +2018,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2250,7 +2257,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2390,7 +2397,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2718,4 +2725,4 @@ } } } -} \ No newline at end of file +} 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 ca9846ecee2..b7c9bda2ee2 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 @@ -2382,103 +2382,106 @@ paths: title: Quality type: object state: - additionalProperties: false - properties: - locked: - allOf: - - additionalProperties: false - example: - status: CLOSED - value: false - properties: - owner: - allOf: - - additionalProperties: false - properties: - first_name: - description: Owner first name - example: John - title: First Name - type: string - last_name: - description: Owner last name - example: Smith - title: Last Name - type: string - user_id: - description: Owner's identifier when registered in the user's database table - example: 2 - exclusiveMinimum: true - minimum: 0 - title: User Id - type: integer - required: - - user_id - - first_name - - last_name + anyOf: + - nullable: true + - additionalProperties: false + properties: + locked: + allOf: + - additionalProperties: false + example: + status: CLOSED + value: false + properties: + owner: + allOf: + - additionalProperties: false + properties: + first_name: + description: Owner first name + example: John + title: First Name + type: string + last_name: + description: Owner last name + example: Smith + title: Last Name + type: string + user_id: + description: Owner's identifier when registered in the user's database table + example: 2 + exclusiveMinimum: true + minimum: 0 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object + description: 'If locked, the user that owns the lock' title: Owner - type: object - description: 'If locked, the user that owns the lock' - title: Owner - status: - allOf: - - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - title: ProjectStatus - type: string - description: The status of the project - value: - description: True if the project is locked - title: Value - type: boolean - required: - - value - - status - title: ProjectLocked - type: object - description: The project lock state - title: Locked - state: - allOf: - - additionalProperties: false - properties: - value: - allOf: - - description: |- - State of execution of a project's computational workflow + status: + allOf: + - description: An enumeration. + enum: + - CLOSED + - CLOSING + - CLONING + - EXPORTING + - OPENING + - OPENED + title: ProjectStatus + type: string + description: The status of the project + value: + description: True if the project is locked + title: Value + type: boolean + required: + - value + - status + title: ProjectLocked + type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false + properties: + value: + allOf: + - description: |- + State of execution of a project's computational workflow - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - title: RunningState - type: string - description: The running state of the project - example: STARTED - required: - - value - title: ProjectRunningState - type: object - description: The project running state - title: State - required: - - locked - - state - title: ProjectState - type: object + SEE StateType for task state + + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + description: The running state of the project + example: STARTED + required: + - value + title: ProjectRunningState + type: object + description: The project running state + title: State + required: + - locked + - state + title: ProjectState + type: object tags: default: [] items: @@ -3006,7 +3009,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index d931c133f7f..67a4c04e712 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -781,153 +781,160 @@ } }, "state": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "exclusiveMinimum": 0, - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "properties": { + "user_id": { + "title": "User Id", + "description": "Owner's identifier when registered in the user's database table", + "examples": [ + 2 + ], + "exclusiveMinimum": 0, + "type": "integer" + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "examples": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "examples": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" + "additionalProperties": false + } + ] + }, + "status": { + "description": "The status of the project", + "allOf": [ + { + "title": "ProjectStatus", + "description": "An enumeration.", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "EXPORTING", + "OPENING", + "OPENED" ], "type": "string" } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false + ] } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ + }, + "required": [ + "value", + "status" + ], + "additionalProperties": false, + "examples": [ { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" + "value": false, + "status": "CLOSED" + }, + { + "value": true, + "status": "OPENED", + "owner": { + "user_id": 123, + "first_name": "Johnny", + "last_name": "Cash" + } } ] } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "properties": { + "value": { + "description": "The running state of the project", + "examples": [ + "STARTED" ], - "type": "string" + "allOf": [ + { + "title": "RunningState", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + ] } - ] + }, + "required": [ + "value" + ], + "additionalProperties": false } - }, - "required": [ - "value" - ], - "additionalProperties": false + ] } - ] + }, + "required": [ + "locked", + "state" + ], + "additionalProperties": false } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false + ] }, "ui": { "title": "StudyUI", @@ -1334,7 +1341,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1374,7 +1381,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2011,7 +2018,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2250,7 +2257,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2390,7 +2397,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2718,4 +2725,4 @@ } } } -} \ No newline at end of file +} diff --git a/services/web/server/tests/unit/conftest.py b/services/web/server/tests/unit/conftest.py index 4c14dd8f8fa..8ea09377a2b 100644 --- a/services/web/server/tests/unit/conftest.py +++ b/services/web/server/tests/unit/conftest.py @@ -69,7 +69,7 @@ def factory(): @pytest.fixture def project_schema_file(api_version_prefix) -> Path: prj_schema_path = resources.get_path( - f"api/{api_version_prefix}/schemas/json-schema-project-generated.json" + f"api/{api_version_prefix}/schemas/project-v0.0.1-pydantic.json" ) assert prj_schema_path.exists() return prj_schema_path diff --git a/services/web/server/tests/unit/isolated/test_director_api.py b/services/web/server/tests/unit/isolated/test_director_api.py index 9b07215f475..5755af7314d 100644 --- a/services/web/server/tests/unit/isolated/test_director_api.py +++ b/services/web/server/tests/unit/isolated/test_director_api.py @@ -11,7 +11,7 @@ import json import re from pathlib import Path -from typing import Any, Callable, Dict, List, Tuple +from typing import Any, Callable import pytest import yaml @@ -36,14 +36,14 @@ def director_openapi_dir(osparc_simcore_root_dir: Path) -> Path: @pytest.fixture(scope="session") -def director_openapi_specs(director_openapi_dir: Path) -> Dict[str, Any]: +def director_openapi_specs(director_openapi_dir: Path) -> dict[str, Any]: openapi_path = director_openapi_dir / "openapi.yaml" openapi_specs = yaml.safe_load(openapi_path.read_text()) return openapi_specs @pytest.fixture(scope="session") -def running_service_model_schema(osparc_simcore_root_dir: Path) -> Dict: +def running_service_model_schema(osparc_simcore_root_dir: Path) -> dict: # SEE: https://github.com/ITISFoundation/osparc-simcore/tree/master/api/specs/common/schemas/running_service.yaml#L30 content = yaml.safe_load( ( @@ -60,12 +60,12 @@ def running_service_model_schema(osparc_simcore_root_dir: Path) -> Dict: @pytest.fixture(scope="session") -def registry_service_model_schema(osparc_simcore_root_dir: Path) -> Dict: +def registry_service_model_schema(osparc_simcore_root_dir: Path) -> dict: # SEE: https://github.com/ITISFoundation/osparc-simcore/tree/master/api/specs/common/schemas/services.yaml#L11 # https://github.com/ITISFoundation/osparc-simcore/tree/master/api/specs/common/schemas/node-meta-v0.0.1.json schema = json.loads( ( - osparc_simcore_root_dir / "api/specs/common/schemas/json-schema-node-meta-generated.json" + osparc_simcore_root_dir / "api/specs/common/schemas/node-meta-v0.0.1.json" ).read_text() ) @@ -81,7 +81,7 @@ def model_fake_factory(random_json_from_schema: Callable) -> Callable: Adapter to create fake data instances of a mo """ - def _create(schema: Dict, **override_attrs): + def _create(schema: dict, **override_attrs): model_instance = random_json_from_schema(json.dumps(schema)) model_instance.update(override_attrs) @@ -128,7 +128,7 @@ def mock_director_service( registry_service_model_schema, user_id: int, project_id: str, - project_nodes: List[Tuple[str, ...]], + project_nodes: list[tuple[str, ...]], ): # helpers @@ -332,7 +332,7 @@ async def test_director_workflow( app_mock, user_id: int, project_id: str, - project_nodes: List[Tuple[str, ...]], + project_nodes: list[tuple[str, ...]], ): app = app_mock diff --git a/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py b/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py index 430a471ddb9..3996125fc0f 100644 --- a/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py +++ b/services/web/server/tests/unit/isolated/test_projects__project_models_rest.py @@ -23,7 +23,7 @@ @pytest.fixture def project_jsonschema(): - with resources.stream(f"api/{API_VTAG}/schemas/json-schema-project-generated.json") as fh: + with resources.stream(f"api/{API_VTAG}/schemas/project-v0.0.1-pydantic.json") as fh: return json.load(fh) @@ -116,8 +116,7 @@ def default_thumbnail(cls, v): assert project_resp_body.dict() == NEW_PROJECT.response_body -# @pytest.mark.skip(reason="DEV") -@pytest.mark.testit +@pytest.mark.skip(reason="DEV") def test_generated_model_in_sync_with_json_schema_specs( diff_json_schemas: Callable, project_jsonschema: dict[str, Any] ): From ab23c454c116a5d2d345653cb1b6cb797443c985 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 13 Mar 2023 13:53:14 +0100 Subject: [PATCH 05/34] minor cleaning --- api/specs/common/schemas/Makefile | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/specs/common/schemas/Makefile b/api/specs/common/schemas/Makefile index aae1ea273ad..3df6bf28cab 100644 --- a/api/specs/common/schemas/Makefile +++ b/api/specs/common/schemas/Makefile @@ -20,8 +20,6 @@ all: check $(outputs) %-converted-clean.yaml:%-converted.yaml # remove the "definition" key from %-converted.yaml python scripts/remove_definitions.py $^ $@ - # # remove the temporary created %-converted.yaml - # rm $^ # target: check – Checks whether tool is installed check: From 6ce1c94441561d83386e392d4893e525bf35149f Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 13 Mar 2023 13:58:49 +0100 Subject: [PATCH 06/34] putting back typing in directory --- services/director/src/simcore_service_director/config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/director/src/simcore_service_director/config.py b/services/director/src/simcore_service_director/config.py index ea428387175..81cb895e604 100644 --- a/services/director/src/simcore_service_director/config.py +++ b/services/director/src/simcore_service_director/config.py @@ -4,7 +4,7 @@ import logging import os from distutils.util import strtobool -from typing import Optional +from typing import Dict, Optional from servicelib.client_session import ( # pylint: disable=no-name-in-module APP_CLIENT_SESSION_KEY, @@ -99,7 +99,7 @@ def _from_env_with_default(env: str, python_type, default): EXTRA_HOSTS_SUFFIX: str = os.environ.get("EXTRA_HOSTS_SUFFIX", "undefined") # these are the envs passed to the dynamic services by default -SERVICES_DEFAULT_ENVS: dict[str, str] = { +SERVICES_DEFAULT_ENVS: Dict[str, str] = { "POSTGRES_ENDPOINT": os.environ.get( "POSTGRES_ENDPOINT", "undefined postgres endpoint" ), From 850354ac65513902c634f70587c762a97381bce8 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 13 Mar 2023 18:48:39 +0100 Subject: [PATCH 07/34] make modification to Pydantic Project model to be backcompatible --- .../schemas/openapi-project-generated.yaml | 4 +--- .../project-v0.0.1-pydantic-converted-clean.yaml | 4 +--- .../project-v0.0.1-pydantic-converted.yaml | 7 +------ .../common/schemas/project-v0.0.1-pydantic.json | 6 +----- api/tests/test_repo_data.py | 3 ++- .../src/models_library/projects.py | 16 +++++++++++++++- .../src/models_library/projects_access.py | 10 +++++++++- .../api/v0/schemas/project-v0.0.1-pydantic.json | 6 +----- .../simcore_service_storage/api/v0/openapi.yaml | 4 +--- .../api/v0/schemas/project-v0.0.1-pydantic.json | 6 +----- .../api/v0/openapi.yaml | 8 +++----- .../api/v0/schemas/project-v0.0.1-pydantic.json | 6 +----- .../tests/unit/isolated/test_director_api.py | 3 ++- 13 files changed, 39 insertions(+), 44 deletions(-) diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index d42b7c7f406..7091cfb4640 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -281,10 +281,8 @@ components: properties: user_id: title: User Id - exclusiveMinimum: true type: integer description: Owner's identifier when registered in the user's database table - minimum: 0 first_name: title: First Name type: string @@ -364,7 +362,7 @@ components: thumbnail: title: Thumbnail maxLength: 2083 - minLength: 1 + minLength: 0 type: string description: url of the project thumbnail format: uri diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index d79fc3cd660..eb56e3411ee 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -101,8 +101,6 @@ properties: description: Owner's identifier when registered in the user's database table example: 2 - exclusiveMinimum: true - minimum: 0 title: User Id type: integer required: @@ -181,7 +179,7 @@ properties: example: https://placeimg.com/171/96/tech/grayscale/?0.jpg format: uri maxLength: 2083 - minLength: 1 + minLength: 0 title: Thumbnail type: string ui: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index b90211cfa6d..e0b090c1b0f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -20,7 +20,7 @@ properties: thumbnail: title: Thumbnail description: url of the project thumbnail - minLength: 1 + minLength: 0 maxLength: 2083 format: uri type: string @@ -616,9 +616,7 @@ properties: description: >- Owner's identifier when registered in the user's database table - exclusiveMinimum: true type: integer - minimum: 0 example: 2 first_name: title: First Name @@ -1584,7 +1582,6 @@ definitions: description: Owner's identifier when registered in the user's database table example: - 2 - exclusiveMinimum: 0 type: integer first_name: title: First Name @@ -1636,7 +1633,6 @@ definitions: table example: - 2 - exclusiveMinimum: 0 type: integer first_name: title: First Name @@ -1739,7 +1735,6 @@ definitions: database table example: - 2 - exclusiveMinimum: 0 type: integer first_name: title: First Name diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 67a4c04e712..522902b732f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -34,7 +34,7 @@ "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, + "minLength": 0, "maxLength": 2083, "format": "uri", "type": "string" @@ -816,7 +816,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2113,7 +2112,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2176,7 +2174,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2310,7 +2307,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { diff --git a/api/tests/test_repo_data.py b/api/tests/test_repo_data.py index 3ce4e911fe3..0dca9f71a83 100644 --- a/api/tests/test_repo_data.py +++ b/api/tests/test_repo_data.py @@ -15,7 +15,7 @@ SYNCED_VERSIONS_SUFFIX = [ ".json", # json-schema specs file - "-converted.yaml", # equivalent openapi specs file (see scripts/json-schema-to-openapi-schema) + "-converted-clean.yaml", # equivalent openapi specs file (see scripts/json-schema-to-openapi-schema) ] # Add here paths to files containing project's data that can be validated with projects schema @@ -54,6 +54,7 @@ def project_schema(request, api_specs_dir): return _load_data(schema_path) +@pytest.mark.testit @pytest.mark.parametrize("data_path", PROJECTS_PATHS) def test_project_against_schema(data_path, project_schema, this_repo_root_dir): """ diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 581f6e30a41..a0244008d9d 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -36,6 +36,14 @@ class ProjectType(str, Enum): STANDARD = "STANDARD" +class HttpUrlWithCustomLength(HttpUrl): + # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to update this. + # We override the default min_length=1 from parent class to min_length=0 + @classmethod + def __modify_schema__(cls, field_schema): + field_schema.update(minLength=0, maxLength=2083, format="uri") + + class BaseProjectModel(BaseModel): # Description of the project uuid: ProjectID = Field( @@ -54,7 +62,7 @@ class BaseProjectModel(BaseModel): description="longer one-line description about the project", examples=["Dabbling in temporal transitions ..."], ) - thumbnail: Optional[HttpUrl] = Field( + thumbnail: Optional[HttpUrlWithCustomLength] = Field( ..., description="url of the project thumbnail", examples=["https://placeimg.com/171/96/tech/grayscale/?0.jpg"], @@ -66,6 +74,12 @@ class BaseProjectModel(BaseModel): # Pipeline of nodes (SEE projects_nodes.py) workbench: Workbench = Field(..., description="Project's pipeline") + @validator("thumbnail", always=True, pre=True) + @classmethod + def validate_length(cls, value): + if len(value) < 1: + return value + @validator("thumbnail", always=True, pre=True) @classmethod def convert_empty_str_to_none(cls, v): diff --git a/packages/models-library/src/models_library/projects_access.py b/packages/models-library/src/models_library/projects_access.py index b7fe3593f60..ad17cd523fe 100644 --- a/packages/models-library/src/models_library/projects_access.py +++ b/packages/models-library/src/models_library/projects_access.py @@ -25,8 +25,16 @@ class Config: extra = Extra.forbid +class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): + # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this + # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 + @classmethod + def __modify_schema__(cls, field_schema): + field_schema.pop("exclusiveMinimum", None) + + class Owner(BaseModel): - user_id: PositiveInt = Field( + user_id: PositiveIntWithExclusiveMinimumRemoved = Field( ..., description="Owner's identifier when registered in the user's database table", examples=[2], diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index 67a4c04e712..522902b732f 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -34,7 +34,7 @@ "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, + "minLength": 0, "maxLength": 2083, "format": "uri", "type": "string" @@ -816,7 +816,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2113,7 +2112,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2176,7 +2174,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2310,7 +2307,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index b33c250dbcf..e687f912630 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1259,8 +1259,6 @@ components: user_id: description: Owner's identifier when registered in the user's database table example: 2 - exclusiveMinimum: true - minimum: 0 title: User Id type: integer required: @@ -1342,7 +1340,7 @@ components: example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' format: uri maxLength: 2083 - minLength: 1 + minLength: 0 title: Thumbnail type: string ui: diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 67a4c04e712..522902b732f 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -34,7 +34,7 @@ "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, + "minLength": 0, "maxLength": 2083, "format": "uri", "type": "string" @@ -816,7 +816,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2113,7 +2112,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2176,7 +2174,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2310,7 +2307,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { 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 c48e96664f2..1fcb6d82311 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 @@ -2529,8 +2529,6 @@ paths: user_id: description: Owner's identifier when registered in the user's database table example: 2 - exclusiveMinimum: true - minimum: 0 title: User Id type: integer required: @@ -2612,7 +2610,7 @@ paths: example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' format: uri maxLength: 2083 - minLength: 1 + minLength: 0 title: Thumbnail type: string ui: @@ -3226,12 +3224,12 @@ paths: CreationStatus: operationId: get_task_status parameters: - task_id: '$response.body#/data/task_id' + task_id: $response.body#/data/task_id CreationResult: operationId: get_task_result description: Returns 201 if creation succeeded parameters: - task_id: '$response.body#/data/task_id' + task_id: $response.body#/data/task_id default: $ref: '#/components/responses/DefaultErrorResponse' /projects/active: diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 67a4c04e712..522902b732f 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -34,7 +34,7 @@ "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, + "minLength": 0, "maxLength": 2083, "format": "uri", "type": "string" @@ -816,7 +816,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2113,7 +2112,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2176,7 +2174,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { @@ -2310,7 +2307,6 @@ "examples": [ 2 ], - "exclusiveMinimum": 0, "type": "integer" }, "first_name": { diff --git a/services/web/server/tests/unit/isolated/test_director_api.py b/services/web/server/tests/unit/isolated/test_director_api.py index 5755af7314d..6949fc41a8e 100644 --- a/services/web/server/tests/unit/isolated/test_director_api.py +++ b/services/web/server/tests/unit/isolated/test_director_api.py @@ -65,7 +65,8 @@ def registry_service_model_schema(osparc_simcore_root_dir: Path) -> dict: # https://github.com/ITISFoundation/osparc-simcore/tree/master/api/specs/common/schemas/node-meta-v0.0.1.json schema = json.loads( ( - osparc_simcore_root_dir / "api/specs/common/schemas/node-meta-v0.0.1.json" + osparc_simcore_root_dir + / "api/specs/common/schemas/node-meta-v0.0.1-pydantic.json" ).read_text() ) From 2cd350d9b08d094b72088238293a9d8214258903 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 08:59:59 +0100 Subject: [PATCH 08/34] fix python-linting test fails --- .../schemas/openapi-project-generated.yaml | 6 ++++-- ...oject-v0.0.1-pydantic-converted-clean.yaml | 13 +++++++++---- .../project-v0.0.1-pydantic-converted.yaml | 19 +++++++------------ .../schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../src/models_library/projects.py | 6 ------ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../api/v0/openapi.yaml | 6 ++---- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../api/v0/openapi.yaml | 6 ++---- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- 10 files changed, 52 insertions(+), 60 deletions(-) diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index 7091cfb4640..7eb0a17b956 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -492,8 +492,10 @@ components: - FAILED - ABORTED type: string - description: "State of execution of a project's computational workflow\n\n \ - \ SEE StateType for task state\n " + description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index eb56e3411ee..48528406b18 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,8 +141,10 @@ properties: properties: value: allOf: - - description: "State of execution of a project's computational workflow\n\ - \n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED @@ -712,8 +714,11 @@ properties: properties: currentStatus: allOf: - - description: "State of execution of a project's computational\ - \ workflow\n\n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational + workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index e0b090c1b0f..0286294827c 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,8 +1003,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1043,8 +1042,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1512,8 +1510,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1690,8 +1687,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1795,8 +1791,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index a0244008d9d..6675a08d065 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -74,12 +74,6 @@ class BaseProjectModel(BaseModel): # Pipeline of nodes (SEE projects_nodes.py) workbench: Workbench = Field(..., description="Project's pipeline") - @validator("thumbnail", always=True, pre=True) - @classmethod - def validate_length(cls, value): - if len(value) < 1: - return value - @validator("thumbnail", always=True, pre=True) @classmethod def convert_empty_str_to_none(cls, v): diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index e687f912630..ec4665f1f6e 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,8 +1302,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1856,8 +1855,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", 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 1fcb6d82311..ff10cf5e982 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 @@ -2572,8 +2572,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -3126,8 +3125,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", From 8412c146ffc03a17e8505619329a3ad5152d4ed9 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 09:27:19 +0100 Subject: [PATCH 09/34] testing exclusiveMinimum removed on TextArea --- ...-meta-v0.0.1-pydantic-converted-clean.yaml | 318 +++++- .../node-meta-v0.0.1-pydantic-converted.yaml | 340 ++++++- .../schemas/node-meta-v0.0.1-pydantic.json | 610 +++++++++++- .../schemas/openapi-node-meta-generated.yaml | 14 +- .../src/models_library/services_ui.py | 14 +- .../api/v0/openapi.yaml | 936 +++++++++++++++++- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 610 +++++++++++- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 610 +++++++++++- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 610 +++++++++++- 9 files changed, 4000 insertions(+), 62 deletions(-) diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index d5d53587ca6..ae649df0d53 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -96,7 +96,62 @@ properties: title: Badges type: array boot-options: - additionalProperties: true + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options @@ -190,7 +245,135 @@ properties: title: Description type: string inputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Metadata on a service input port + example: + description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: data:*/* + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: Dog + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. + This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type + is allowed + example: number + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + title: Type + type: string + unit: + description: Units, when it refers to a physical quantity + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined + from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object description: definition of the inputs of this node title: Inputs type: object @@ -277,6 +460,9 @@ properties: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: ^[-_a-zA-Z0-9]+$ + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -324,7 +510,6 @@ properties: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -400,7 +585,128 @@ properties: title: Name type: string outputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Base class for service input/outputs + example: + description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. + This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type + is allowed + example: number + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + title: Type + type: string + unit: + description: Units, when it refers to a physical quantity + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined + from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object description: definition of the outputs of this node title: Outputs type: object @@ -443,6 +749,9 @@ properties: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: ^[-_a-zA-Z0-9]+$ + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -490,7 +799,6 @@ properties: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index f6ddc5cc80e..07edd2443b2 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -130,6 +130,141 @@ properties: title: Inputs description: definition of the inputs of this node type: object + additionalProperties: + title: ServiceInput + description: Metadata on a service input port + type: object + properties: + displayOrder: + title: Displayorder + description: >- + DEPRECATED: new display order is taken from the item position. This + will be removed. + deprecated: true + type: number + label: + title: Label + description: short name for the property + example: Age + type: string + description: + title: Description + description: description of the property + example: Age in seconds since 1970 + type: string + type: + title: Type + description: >- + data type expected on this input glob matching for data type is + allowed + pattern: >- + ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + type: string + example: number + contentSchema: + title: Contentschema + description: >- + jsonschema of this input/output. Required when + type='ref_contentSchema' + type: object + fileToKeyMap: + title: Filetokeymap + description: Place the data associated with the named keys in files + type: object + additionalProperties: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + x-patternProperties: + .+: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + unit: + title: Unit + description: Units, when it refers to a physical quantity + type: string + defaultValue: + title: Defaultvalue + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: Dog + widget: + title: Widget + description: >- + custom widget to use instead of the default one determined from the + data-type + allOf: + - title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + required: + - label + - description + - type + additionalProperties: false + example: + displayOrder: 1 + label: Input files - file-wo-widget + description: Files downloaded from service connected at the input + type: data:*/* x-patternProperties: ^[-_a-zA-Z0-9]+$: title: ServiceInput @@ -191,6 +326,9 @@ properties: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ + additionalProperties: + type: string + pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -232,7 +370,6 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -325,11 +462,138 @@ properties: required: - b - s - additionalProperties: true outputs: title: Outputs description: definition of the outputs of this node type: object + additionalProperties: + title: ServiceOutput + description: Base class for service input/outputs + type: object + properties: + displayOrder: + title: Displayorder + description: >- + DEPRECATED: new display order is taken from the item position. This + will be removed. + deprecated: true + type: number + label: + title: Label + description: short name for the property + example: Age + type: string + description: + title: Description + description: description of the property + example: Age in seconds since 1970 + type: string + type: + title: Type + description: >- + data type expected on this input glob matching for data type is + allowed + pattern: >- + ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + type: string + example: number + contentSchema: + title: Contentschema + description: >- + jsonschema of this input/output. Required when + type='ref_contentSchema' + type: object + fileToKeyMap: + title: Filetokeymap + description: Place the data associated with the named keys in files + type: object + additionalProperties: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + x-patternProperties: + .+: + type: string + pattern: ^[-_a-zA-Z0-9]+$ + unit: + title: Unit + description: Units, when it refers to a physical quantity + type: string + widget: + title: Widget + description: >- + custom widget to use instead of the default one determined from the + data-type + deprecated: true + allOf: + - title: Widget + type: object + properties: + type: + description: type of the property + allOf: + - title: WidgetType + description: An enumeration. + enum: + - TextArea + - SelectBox + type: string + details: + title: Details + anyOf: + - title: TextArea + type: object + properties: + minHeight: + title: Minheight + description: minimum Height of the textarea + type: integer + required: + - minHeight + additionalProperties: false + - title: SelectBox + type: object + properties: + structure: + title: Structure + minItems: 1 + type: array + items: + title: Structure + type: object + properties: + key: + title: Key + anyOf: + - type: string + - type: boolean + - type: number + label: + title: Label + type: string + required: + - key + - label + additionalProperties: false + required: + - structure + additionalProperties: false + required: + - type + - details + additionalProperties: false + required: + - label + - description + - type + additionalProperties: false + example: + displayOrder: 2 + label: Time Slept + description: Time the service waited before completion + type: number x-patternProperties: ^[-_a-zA-Z0-9]+$: title: ServiceOutput @@ -391,6 +655,9 @@ properties: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ + additionalProperties: + type: string + pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -423,7 +690,6 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -482,13 +748,68 @@ properties: displayOrder: 4 description: Output file uploaded from the outputs folder type: data:*/* - additionalProperties: true boot-options: title: Boot-Options description: >- Service defined boot options. These get injected in the service as env variables. type: object + additionalProperties: + title: BootOption + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootChoice + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + example: + label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode + required: + - label + - description + - default + - items + example: + label: Boot mode + description: Start it in web page mode + default: '0' + items: + '0': + label: Non Voila + description: Tooltip for non Voila boot mode + '1': + label: Voila + description: Tooltip for Voila boot mode x-patternProperties: '[a-zA-Z][a-azA-Z0-9_]*': title: BootOption @@ -566,7 +887,6 @@ properties: b: label: Dark description: Using black and gray tones - additionalProperties: true required: - name - description @@ -676,7 +996,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -748,7 +1067,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -844,6 +1162,9 @@ definitions: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ + additionalProperties: + type: string + pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -885,7 +1206,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -1038,6 +1358,9 @@ definitions: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ + additionalProperties: + type: string + pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -1070,7 +1393,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 6a5c0c7e6c7..4738d246f53 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -246,6 +246,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -306,7 +310,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -453,6 +456,278 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] } }, "outputs": { @@ -522,6 +797,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -562,7 +841,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -661,6 +939,210 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] } }, "boot-options": { @@ -778,6 +1260,116 @@ } ] } + }, + "additionalProperties": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] } } }, @@ -1017,7 +1609,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1718,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1251,6 +1841,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1311,7 +1905,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1520,6 +2113,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1560,7 +2157,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1820,4 +2416,4 @@ ] } } -} \ No newline at end of file +} diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index 46fde614c4b..ab3e5367a79 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -194,14 +194,20 @@ components: inputs: title: Inputs type: object + additionalProperties: + $ref: '#/components/schemas/ServiceInput' description: definition of the inputs of this node outputs: title: Outputs type: object + additionalProperties: + $ref: '#/components/schemas/ServiceOutput' description: definition of the outputs of this node boot-options: title: Boot-Options type: object + additionalProperties: + $ref: '#/components/schemas/BootOption' description: Service defined boot options. These get injected in the service as env variables. additionalProperties: false @@ -246,6 +252,9 @@ components: fileToKeyMap: title: Filetokeymap type: object + additionalProperties: + pattern: ^[-_a-zA-Z0-9]+$ + type: string description: Place the data associated with the named keys in files unit: title: Unit @@ -303,6 +312,9 @@ components: fileToKeyMap: title: Filetokeymap type: object + additionalProperties: + pattern: ^[-_a-zA-Z0-9]+$ + type: string description: Place the data associated with the named keys in files unit: title: Unit @@ -351,10 +363,8 @@ components: properties: minHeight: title: Minheight - exclusiveMinimum: true type: integer description: minimum Height of the textarea - minimum: 0 additionalProperties: false ValidationError: title: ValidationError diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index 18dbd0b7469..c95fb48d1f0 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import List, Union +from typing import Union from pydantic import BaseModel, Extra, Field from pydantic.types import PositiveInt @@ -10,8 +10,16 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" +class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): + # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this + # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 + @classmethod + def __modify_schema__(cls, field_schema): + field_schema.pop("exclusiveMinimum", None) + + class TextArea(BaseModel): - min_height: PositiveInt = Field( + min_height: PositiveIntWithExclusiveMinimumRemoved = Field( ..., alias="minHeight", description="minimum Height of the textarea" ) @@ -28,7 +36,7 @@ class Config: class SelectBox(BaseModel): - structure: List[Structure] = Field(..., min_items=1) + structure: list[Structure] = Field(..., min_items=1) class Config: extra = Extra.forbid diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index da6d4fb1a53..26daaf19f8c 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -238,7 +238,62 @@ paths: title: Badges type: array boot-options: - additionalProperties: true + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options type: object @@ -331,7 +386,132 @@ paths: title: Description type: string inputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Metadata on a service input port + example: + description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: 'data:*/*' + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: Dog + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: number + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object description: definition of the inputs of this node title: Inputs type: object @@ -417,6 +597,9 @@ paths: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -463,7 +646,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -538,7 +720,125 @@ paths: title: Name type: string outputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Base class for service input/outputs + example: + description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: number + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object description: definition of the outputs of this node title: Outputs type: object @@ -580,6 +880,9 @@ paths: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -626,7 +929,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -933,7 +1235,62 @@ paths: title: Badges type: array boot-options: - additionalProperties: true + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options type: object @@ -1026,7 +1383,132 @@ paths: title: Description type: string inputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Metadata on a service input port + example: + description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: 'data:*/*' + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: Dog + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: number + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object description: definition of the inputs of this node title: Inputs type: object @@ -1112,6 +1594,9 @@ paths: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -1158,7 +1643,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -1233,7 +1717,125 @@ paths: title: Name type: string outputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Base class for service input/outputs + example: + description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: number + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object description: definition of the outputs of this node title: Outputs type: object @@ -1275,6 +1877,9 @@ paths: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -1321,7 +1926,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -3042,7 +3646,62 @@ components: title: Badges type: array boot-options: - additionalProperties: true + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + example: + default: '0' + description: Start it in web page mode + items: + '0': + description: Tooltip for non Voila boot mode + label: Non Voila + '1': + description: Tooltip for Voila boot mode + label: Voila + label: Boot mode + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootChoice + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOption + type: object description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options type: object @@ -3135,7 +3794,132 @@ components: title: Description type: string inputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Metadata on a service input port + example: + description: Files downloaded from service connected at the input + displayOrder: 1 + label: Input files - file-wo-widget + type: 'data:*/*' + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + defaultValue: + anyOf: + - type: boolean + - type: integer + - type: number + - type: string + example: Dog + title: Defaultvalue + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: number + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceInput + type: object description: definition of the inputs of this node title: Inputs type: object @@ -3221,6 +4005,9 @@ components: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -3267,7 +4054,6 @@ components: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -3342,7 +4128,125 @@ components: title: Name type: string outputs: - additionalProperties: true + additionalProperties: + additionalProperties: false + description: Base class for service input/outputs + example: + description: Time the service waited before completion + displayOrder: 2 + label: Time Slept + type: number + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Contentschema + type: object + description: + description: description of the property + example: Age in seconds since 1970 + title: Description + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' + title: Displayorder + type: number + fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + description: Place the data associated with the named keys in files + example: + dir/input1.txt: key_1 + dir33/input2.txt: key2 + title: Filetokeymap + type: object + x-patternProperties: + .+: + pattern: '^[-_a-zA-Z0-9]+$' + type: string + label: + description: short name for the property + example: Age + title: Label + type: string + type: + description: data type expected on this input glob matching for data type is allowed + example: number + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' + title: Type + type: string + unit: + description: 'Units, when it refers to a physical quantity' + title: Unit + type: string + widget: + allOf: + - additionalProperties: false + properties: + details: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + title: Minheight + type: integer + required: + - minHeight + title: TextArea + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + properties: + key: + anyOf: + - type: string + - type: boolean + - type: number + title: Key + label: + title: Label + type: string + required: + - key + - label + title: Structure + type: object + minItems: 1 + title: Structure + type: array + required: + - structure + title: SelectBox + type: object + title: Details + type: + allOf: + - description: An enumeration. + enum: + - TextArea + - SelectBox + title: WidgetType + type: string + description: type of the property + required: + - type + - details + title: Widget + type: object + deprecated: true + description: custom widget to use instead of the default one determined from the data-type + title: Widget + required: + - label + - description + - type + title: ServiceOutput + type: object description: definition of the outputs of this node title: Outputs type: object @@ -3384,6 +4288,9 @@ components: title: Displayorder type: number fileToKeyMap: + additionalProperties: + pattern: '^[-_a-zA-Z0-9]+$' + type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -3430,7 +4337,6 @@ components: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 6a5c0c7e6c7..4738d246f53 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -246,6 +246,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -306,7 +310,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -453,6 +456,278 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] } }, "outputs": { @@ -522,6 +797,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -562,7 +841,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -661,6 +939,210 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] } }, "boot-options": { @@ -778,6 +1260,116 @@ } ] } + }, + "additionalProperties": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] } } }, @@ -1017,7 +1609,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1718,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1251,6 +1841,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1311,7 +1905,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1520,6 +2113,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1560,7 +2157,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1820,4 +2416,4 @@ ] } } -} \ No newline at end of file +} diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 6a5c0c7e6c7..4738d246f53 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -246,6 +246,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -306,7 +310,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -453,6 +456,278 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] } }, "outputs": { @@ -522,6 +797,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -562,7 +841,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -661,6 +939,210 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] } }, "boot-options": { @@ -778,6 +1260,116 @@ } ] } + }, + "additionalProperties": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] } } }, @@ -1017,7 +1609,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1718,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1251,6 +1841,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1311,7 +1905,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1520,6 +2113,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1560,7 +2157,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1820,4 +2416,4 @@ ] } } -} \ No newline at end of file +} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 6a5c0c7e6c7..4738d246f53 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -246,6 +246,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -306,7 +310,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -453,6 +456,278 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceInput", + "description": "Metadata on a service input port", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "defaultValue": { + "title": "Defaultvalue", + "examples": [ + "Dog", + true + ], + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 1, + "label": "Input files - file-wo-widget", + "description": "Files downloaded from service connected at the input", + "type": "data:*/*" + }, + { + "displayOrder": 2, + "label": "Sleep Time - v2", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "Sleep Time - latest", + "description": "Time to wait before completion", + "type": "number", + "defaultValue": 0, + "unit": "second", + "widget": { + "type": "TextArea", + "details": { + "minHeight": 3 + } + } + }, + { + "label": "array_numbers", + "description": "Some array of numbers", + "type": "ref_contentSchema", + "contentSchema": { + "title": "list[number]", + "type": "array", + "items": { + "type": "number" + } + } + }, + { + "label": "my_object", + "description": "Some object", + "type": "ref_contentSchema", + "contentSchema": { + "title": "an object named A", + "type": "object", + "properties": { + "i": { + "title": "Int", + "type": "integer", + "default": 3 + }, + "b": { + "title": "Bool", + "type": "boolean" + }, + "s": { + "title": "Str", + "type": "string" + } + }, + "required": [ + "b", + "s" + ] + } + } + ] } }, "outputs": { @@ -522,6 +797,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -562,7 +841,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -661,6 +939,210 @@ } ] } + }, + "additionalProperties": { + "title": "ServiceOutput", + "description": "Base class for service input/outputs", + "type": "object", + "properties": { + "displayOrder": { + "title": "Displayorder", + "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "title": "Label", + "description": "short name for the property", + "example": "Age", + "type": "string" + }, + "description": { + "title": "Description", + "description": "description of the property", + "example": "Age in seconds since 1970", + "type": "string" + }, + "type": { + "title": "Type", + "description": "data type expected on this input glob matching for data type is allowed", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ], + "type": "string" + }, + "contentSchema": { + "title": "Contentschema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "title": "Filetokeymap", + "description": "Place the data associated with the named keys in files", + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ], + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "unit": { + "title": "Unit", + "description": "Units, when it refers to a physical quantity", + "type": "string" + }, + "widget": { + "title": "Widget", + "description": "custom widget to use instead of the default one determined from the data-type", + "deprecated": true, + "allOf": [ + { + "title": "Widget", + "type": "object", + "properties": { + "type": { + "description": "type of the property", + "allOf": [ + { + "title": "WidgetType", + "description": "An enumeration.", + "enum": [ + "TextArea", + "SelectBox" + ], + "type": "string" + } + ] + }, + "details": { + "title": "Details", + "anyOf": [ + { + "title": "TextArea", + "type": "object", + "properties": { + "minHeight": { + "title": "Minheight", + "description": "minimum Height of the textarea", + "type": "integer" + } + }, + "required": [ + "minHeight" + ], + "additionalProperties": false + }, + { + "title": "SelectBox", + "type": "object", + "properties": { + "structure": { + "title": "Structure", + "minItems": 1, + "type": "array", + "items": { + "title": "Structure", + "type": "object", + "properties": { + "key": { + "title": "Key", + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "number" + } + ] + }, + "label": { + "title": "Label", + "type": "string" + } + }, + "required": [ + "key", + "label" + ], + "additionalProperties": false + } + } + }, + "required": [ + "structure" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "type", + "details" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "label", + "description", + "type" + ], + "additionalProperties": false, + "examples": [ + { + "displayOrder": 2, + "label": "Time Slept", + "description": "Time the service waited before completion", + "type": "number" + }, + { + "displayOrder": 2, + "label": "Time Slept - units", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Time Slept - w/o displayorder", + "description": "Time the service waited before completion", + "type": "number", + "unit": "second" + }, + { + "label": "Output file 1", + "displayOrder": 4.0, + "description": "Output file uploaded from the outputs folder", + "type": "data:*/*" + } + ] } }, "boot-options": { @@ -778,6 +1260,116 @@ } ] } + }, + "additionalProperties": { + "title": "BootOption", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootChoice", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ], + "examples": [ + { + "label": "Boot mode", + "description": "Start it in web page mode", + "default": "0", + "items": { + "0": { + "label": "Non Voila", + "description": "Tooltip for non Voila boot mode" + }, + "1": { + "label": "Voila", + "description": "Tooltip for Voila boot mode" + } + } + }, + { + "label": "Application theme", + "description": "Select a theme for the application", + "default": "b", + "items": { + "a": { + "label": "Clear", + "description": "Using white background" + }, + "b": { + "label": "Dark", + "description": "Using black and gray tones" + } + } + } + ] } } }, @@ -1017,7 +1609,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1718,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1251,6 +1841,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1311,7 +1905,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1520,6 +2113,10 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } + }, + "additionalProperties": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -1560,7 +2157,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1820,4 +2416,4 @@ ] } } -} \ No newline at end of file +} From b4bfee8d48826db6365587150d7de6cd8ccf4317 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 10:29:43 +0100 Subject: [PATCH 10/34] fix - generating schema with version of Pydantic 10.0.2 --- ...-meta-v0.0.1-pydantic-converted-clean.yaml | 316 +----- .../node-meta-v0.0.1-pydantic-converted.yaml | 334 +------ .../schemas/node-meta-v0.0.1-pydantic.json | 602 ------------ .../schemas/openapi-node-meta-generated.yaml | 12 - .../schemas/openapi-project-generated.yaml | 6 +- ...oject-v0.0.1-pydantic-converted-clean.yaml | 13 +- .../project-v0.0.1-pydantic-converted.yaml | 19 +- .../schemas/project-v0.0.1-pydantic.json | 14 +- .../api/v0/openapi.yaml | 930 +----------------- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 602 ------------ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +- .../api/v0/openapi.yaml | 6 +- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 602 ------------ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +- .../api/v0/openapi.yaml | 6 +- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 602 ------------ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +- 17 files changed, 69 insertions(+), 4037 deletions(-) diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index ae649df0d53..1479593ad2f 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -96,62 +96,7 @@ properties: title: Badges type: array boot-options: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + additionalProperties: true description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options @@ -245,135 +190,7 @@ properties: title: Description type: string inputs: - additionalProperties: - additionalProperties: false - description: Metadata on a service input port - example: - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: data:*/* - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: Dog - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. - This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type - is allowed - example: number - pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - title: Type - type: string - unit: - description: Units, when it refers to a physical quantity - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined - from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object + additionalProperties: true description: definition of the inputs of this node title: Inputs type: object @@ -460,9 +277,6 @@ properties: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: ^[-_a-zA-Z0-9]+$ - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -585,128 +399,7 @@ properties: title: Name type: string outputs: - additionalProperties: - additionalProperties: false - description: Base class for service input/outputs - example: - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. - This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type - is allowed - example: number - pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - title: Type - type: string - unit: - description: Units, when it refers to a physical quantity - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined - from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceOutput - type: object + additionalProperties: true description: definition of the outputs of this node title: Outputs type: object @@ -749,9 +442,6 @@ properties: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: ^[-_a-zA-Z0-9]+$ - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index 07edd2443b2..26f1abdf176 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -130,141 +130,6 @@ properties: title: Inputs description: definition of the inputs of this node type: object - additionalProperties: - title: ServiceInput - description: Metadata on a service input port - type: object - properties: - displayOrder: - title: Displayorder - description: >- - DEPRECATED: new display order is taken from the item position. This - will be removed. - deprecated: true - type: number - label: - title: Label - description: short name for the property - example: Age - type: string - description: - title: Description - description: description of the property - example: Age in seconds since 1970 - type: string - type: - title: Type - description: >- - data type expected on this input glob matching for data type is - allowed - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - type: string - example: number - contentSchema: - title: Contentschema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - title: Filetokeymap - description: Place the data associated with the named keys in files - type: object - additionalProperties: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - x-patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - unit: - title: Unit - description: Units, when it refers to a physical quantity - type: string - defaultValue: - title: Defaultvalue - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: Dog - widget: - title: Widget - description: >- - custom widget to use instead of the default one determined from the - data-type - allOf: - - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - required: - - label - - description - - type - additionalProperties: false - example: - displayOrder: 1 - label: Input files - file-wo-widget - description: Files downloaded from service connected at the input - type: data:*/* x-patternProperties: ^[-_a-zA-Z0-9]+$: title: ServiceInput @@ -326,9 +191,6 @@ properties: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ - additionalProperties: - type: string - pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -462,138 +324,11 @@ properties: required: - b - s + additionalProperties: true outputs: title: Outputs description: definition of the outputs of this node type: object - additionalProperties: - title: ServiceOutput - description: Base class for service input/outputs - type: object - properties: - displayOrder: - title: Displayorder - description: >- - DEPRECATED: new display order is taken from the item position. This - will be removed. - deprecated: true - type: number - label: - title: Label - description: short name for the property - example: Age - type: string - description: - title: Description - description: description of the property - example: Age in seconds since 1970 - type: string - type: - title: Type - description: >- - data type expected on this input glob matching for data type is - allowed - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - type: string - example: number - contentSchema: - title: Contentschema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - title: Filetokeymap - description: Place the data associated with the named keys in files - type: object - additionalProperties: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - x-patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - unit: - title: Unit - description: Units, when it refers to a physical quantity - type: string - widget: - title: Widget - description: >- - custom widget to use instead of the default one determined from the - data-type - deprecated: true - allOf: - - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - required: - - label - - description - - type - additionalProperties: false - example: - displayOrder: 2 - label: Time Slept - description: Time the service waited before completion - type: number x-patternProperties: ^[-_a-zA-Z0-9]+$: title: ServiceOutput @@ -655,9 +390,6 @@ properties: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ - additionalProperties: - type: string - pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -748,68 +480,13 @@ properties: displayOrder: 4 description: Output file uploaded from the outputs folder type: data:*/* + additionalProperties: true boot-options: title: Boot-Options description: >- Service defined boot options. These get injected in the service as env variables. type: object - additionalProperties: - title: BootOption - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootChoice - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - example: - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode - required: - - label - - description - - default - - items - example: - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode x-patternProperties: '[a-zA-Z][a-azA-Z0-9_]*': title: BootOption @@ -887,6 +564,7 @@ properties: b: label: Dark description: Using black and gray tones + additionalProperties: true required: - name - description @@ -1162,9 +840,6 @@ definitions: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ - additionalProperties: - type: string - pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity @@ -1358,9 +1033,6 @@ definitions: .+: type: string pattern: ^[-_a-zA-Z0-9]+$ - additionalProperties: - type: string - pattern: ^[-_a-zA-Z0-9]+$ unit: title: Unit description: Units, when it refers to a physical quantity diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 4738d246f53..35382a6950e 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -246,10 +246,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -456,278 +452,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] } }, "outputs": { @@ -797,10 +521,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -939,210 +659,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] } }, "boot-options": { @@ -1260,116 +776,6 @@ } ] } - }, - "additionalProperties": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] } } }, @@ -1841,10 +1247,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -2113,10 +1515,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index ab3e5367a79..ed219a58b63 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -194,20 +194,14 @@ components: inputs: title: Inputs type: object - additionalProperties: - $ref: '#/components/schemas/ServiceInput' description: definition of the inputs of this node outputs: title: Outputs type: object - additionalProperties: - $ref: '#/components/schemas/ServiceOutput' description: definition of the outputs of this node boot-options: title: Boot-Options type: object - additionalProperties: - $ref: '#/components/schemas/BootOption' description: Service defined boot options. These get injected in the service as env variables. additionalProperties: false @@ -252,9 +246,6 @@ components: fileToKeyMap: title: Filetokeymap type: object - additionalProperties: - pattern: ^[-_a-zA-Z0-9]+$ - type: string description: Place the data associated with the named keys in files unit: title: Unit @@ -312,9 +303,6 @@ components: fileToKeyMap: title: Filetokeymap type: object - additionalProperties: - pattern: ^[-_a-zA-Z0-9]+$ - type: string description: Place the data associated with the named keys in files unit: title: Unit diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index 7eb0a17b956..7091cfb4640 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -492,10 +492,8 @@ components: - FAILED - ABORTED type: string - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + description: "State of execution of a project's computational workflow\n\n \ + \ SEE StateType for task state\n " SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index 48528406b18..eb56e3411ee 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,10 +141,8 @@ properties: properties: value: allOf: - - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational workflow\n\ + \n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED @@ -714,11 +712,8 @@ properties: properties: currentStatus: allOf: - - description: 'State of execution of a project''s computational - workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational\ + \ workflow\n\n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index 0286294827c..e0b090c1b0f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,7 +1003,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1042,7 +1043,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1510,7 +1512,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1687,7 +1690,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1791,7 +1795,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index 26daaf19f8c..258cd733e61 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -238,62 +238,7 @@ paths: title: Badges type: array boot-options: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + additionalProperties: true description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options type: object @@ -386,132 +331,7 @@ paths: title: Description type: string inputs: - additionalProperties: - additionalProperties: false - description: Metadata on a service input port - example: - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: 'data:*/*' - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: Dog - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - example: number - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object + additionalProperties: true description: definition of the inputs of this node title: Inputs type: object @@ -597,9 +417,6 @@ paths: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -720,125 +537,7 @@ paths: title: Name type: string outputs: - additionalProperties: - additionalProperties: false - description: Base class for service input/outputs - example: - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - example: number - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceOutput - type: object + additionalProperties: true description: definition of the outputs of this node title: Outputs type: object @@ -880,9 +579,6 @@ paths: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -1235,62 +931,7 @@ paths: title: Badges type: array boot-options: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + additionalProperties: true description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options type: object @@ -1383,132 +1024,7 @@ paths: title: Description type: string inputs: - additionalProperties: - additionalProperties: false - description: Metadata on a service input port - example: - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: 'data:*/*' - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: Dog - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - example: number - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object + additionalProperties: true description: definition of the inputs of this node title: Inputs type: object @@ -1594,9 +1110,6 @@ paths: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -1717,125 +1230,7 @@ paths: title: Name type: string outputs: - additionalProperties: - additionalProperties: false - description: Base class for service input/outputs - example: - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - example: number - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceOutput - type: object + additionalProperties: true description: definition of the outputs of this node title: Outputs type: object @@ -1877,9 +1272,6 @@ paths: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -3646,62 +3038,7 @@ components: title: Badges type: array boot-options: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + additionalProperties: true description: Service defined boot options. These get injected in the service as env variables. title: Boot-Options type: object @@ -3794,132 +3131,7 @@ components: title: Description type: string inputs: - additionalProperties: - additionalProperties: false - description: Metadata on a service input port - example: - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: 'data:*/*' - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: Dog - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - example: number - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object + additionalProperties: true description: definition of the inputs of this node title: Inputs type: object @@ -4005,9 +3217,6 @@ components: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 @@ -4128,125 +3337,7 @@ components: title: Name type: string outputs: - additionalProperties: - additionalProperties: false - description: Base class for service input/outputs - example: - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder - type: number - fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - description: Place the data associated with the named keys in files - example: - dir/input1.txt: key_1 - dir33/input2.txt: key2 - title: Filetokeymap - type: object - x-patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - example: number - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceOutput - type: object + additionalProperties: true description: definition of the outputs of this node title: Outputs type: object @@ -4288,9 +3379,6 @@ components: title: Displayorder type: number fileToKeyMap: - additionalProperties: - pattern: '^[-_a-zA-Z0-9]+$' - type: string description: Place the data associated with the named keys in files example: - dir/input1.txt: key_1 diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 4738d246f53..35382a6950e 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -246,10 +246,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -456,278 +452,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] } }, "outputs": { @@ -797,10 +521,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -939,210 +659,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] } }, "boot-options": { @@ -1260,116 +776,6 @@ } ] } - }, - "additionalProperties": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] } } }, @@ -1841,10 +1247,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -2113,10 +1515,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index ec4665f1f6e..e687f912630 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,7 +1302,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1855,7 +1856,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 4738d246f53..35382a6950e 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -246,10 +246,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -456,278 +452,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] } }, "outputs": { @@ -797,10 +521,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -939,210 +659,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] } }, "boot-options": { @@ -1260,116 +776,6 @@ } ] } - }, - "additionalProperties": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] } } }, @@ -1841,10 +1247,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -2113,10 +1515,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", 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 ff10cf5e982..1fcb6d82311 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 @@ -2572,7 +2572,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -3125,7 +3126,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 4738d246f53..35382a6950e 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -246,10 +246,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -456,278 +452,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] } }, "outputs": { @@ -797,10 +521,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -939,210 +659,6 @@ } ] } - }, - "additionalProperties": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] } }, "boot-options": { @@ -1260,116 +776,6 @@ } ] } - }, - "additionalProperties": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] } } }, @@ -1841,10 +1247,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { @@ -2113,10 +1515,6 @@ "type": "string", "pattern": "^[-_a-zA-Z0-9]+$" } - }, - "additionalProperties": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" } }, "unit": { diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", From d30cf0bb7ab4acbe34178803e879ef57b9dc064b Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 11:22:16 +0100 Subject: [PATCH 11/34] testing - minHeight problem in tests --- .../schemas/openapi-project-generated.yaml | 6 ++++-- ...oject-v0.0.1-pydantic-converted-clean.yaml | 13 +++++++++---- .../project-v0.0.1-pydantic-converted.yaml | 19 +++++++------------ .../schemas/project-v0.0.1-pydantic.json | 14 +++++++------- api/tests/test_repo_data.py | 1 - .../src/models_library/services_ui.py | 14 +++++++------- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../tests/unit/test__oas_spec.py | 1 + .../api/v0/openapi.yaml | 6 ++---- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../api/v0/openapi.yaml | 6 ++---- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- 12 files changed, 60 insertions(+), 62 deletions(-) diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index 7091cfb4640..7eb0a17b956 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -492,8 +492,10 @@ components: - FAILED - ABORTED type: string - description: "State of execution of a project's computational workflow\n\n \ - \ SEE StateType for task state\n " + description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index eb56e3411ee..48528406b18 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,8 +141,10 @@ properties: properties: value: allOf: - - description: "State of execution of a project's computational workflow\n\ - \n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED @@ -712,8 +714,11 @@ properties: properties: currentStatus: allOf: - - description: "State of execution of a project's computational\ - \ workflow\n\n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational + workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index e0b090c1b0f..0286294827c 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,8 +1003,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1043,8 +1042,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1512,8 +1510,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1690,8 +1687,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1795,8 +1791,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/api/tests/test_repo_data.py b/api/tests/test_repo_data.py index 0dca9f71a83..03d9245ec55 100644 --- a/api/tests/test_repo_data.py +++ b/api/tests/test_repo_data.py @@ -54,7 +54,6 @@ def project_schema(request, api_specs_dir): return _load_data(schema_path) -@pytest.mark.testit @pytest.mark.parametrize("data_path", PROJECTS_PATHS) def test_project_against_schema(data_path, project_schema, this_repo_root_dir): """ diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index c95fb48d1f0..774aa6fe7fc 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -10,16 +10,16 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" -class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): - # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this - # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 - @classmethod - def __modify_schema__(cls, field_schema): - field_schema.pop("exclusiveMinimum", None) +# class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): +# # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this +# # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 +# @classmethod +# def __modify_schema__(cls, field_schema): +# field_schema.pop("exclusiveMinimum", None) class TextArea(BaseModel): - min_height: PositiveIntWithExclusiveMinimumRemoved = Field( + min_height: PositiveInt = Field( ..., alias="minHeight", description="minimum Height of the textarea" ) diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/dynamic-sidecar/tests/unit/test__oas_spec.py b/services/dynamic-sidecar/tests/unit/test__oas_spec.py index a25734b30f2..8f4b0cb17f9 100644 --- a/services/dynamic-sidecar/tests/unit/test__oas_spec.py +++ b/services/dynamic-sidecar/tests/unit/test__oas_spec.py @@ -16,6 +16,7 @@ def mock_environment(mock_environment_with_envdevel: EnvVarsDict) -> None: assert mock_environment_with_envdevel +@pytest.mark.testit def test_openapi_spec( mock_environment: None, app: FastAPI, project_slug_dir: Path ) -> None: diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index e687f912630..ec4665f1f6e 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,8 +1302,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1856,8 +1855,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", 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 1fcb6d82311..ff10cf5e982 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 @@ -2572,8 +2572,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -3126,8 +3125,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..31ced27e659 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", From 0135c626dd7e656f9df786e68b27a6294288c9c2 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 15:07:22 +0100 Subject: [PATCH 12/34] correction of unit test (as i have added example on first index) --- .../common/schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../schemas/openapi-node-meta-generated.yaml | 2 ++ .../common/schemas/openapi-project-generated.yaml | 6 ++---- .../common/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../src/models_library/services_ui.py | 8 -------- .../models-library/tests/test__pydantic_models.py | 6 +++--- .../dynamic-sidecar/tests/unit/test__oas_spec.py | 1 - 7 files changed, 20 insertions(+), 23 deletions(-) diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index ed219a58b63..46fde614c4b 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -351,8 +351,10 @@ components: properties: minHeight: title: Minheight + exclusiveMinimum: true type: integer description: minimum Height of the textarea + minimum: 0 additionalProperties: false ValidationError: title: ValidationError diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index 7eb0a17b956..7091cfb4640 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -492,10 +492,8 @@ components: - FAILED - ABORTED type: string - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + description: "State of execution of a project's computational workflow\n\n \ + \ SEE StateType for task state\n " SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index 774aa6fe7fc..2933c09a212 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -10,14 +10,6 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" -# class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): -# # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this -# # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 -# @classmethod -# def __modify_schema__(cls, field_schema): -# field_schema.pop("exclusiveMinimum", None) - - class TextArea(BaseModel): min_height: PositiveInt = Field( ..., alias="minHeight", description="minimum Height of the textarea" diff --git a/packages/models-library/tests/test__pydantic_models.py b/packages/models-library/tests/test__pydantic_models.py index 5399a05fd09..38e47bf3c76 100644 --- a/packages/models-library/tests/test__pydantic_models.py +++ b/packages/models-library/tests/test__pydantic_models.py @@ -6,7 +6,7 @@ """ -from typing import List, Union, get_args, get_origin +from typing import Union, get_args, get_origin import pytest from models_library.projects_nodes import InputTypes, OutputTypes @@ -36,7 +36,7 @@ class ArgumentAnnotation(BaseModel): data_schema: Json # notice that this is a raw string! - jsonschema_of_x = schema_json_of(List[int], title="schema[x]") + jsonschema_of_x = schema_json_of(list[int], title="schema[x]") assert isinstance(jsonschema_of_x, str) x_annotation = ArgumentAnnotation(name="x", data_schema=jsonschema_of_x) @@ -138,7 +138,7 @@ class Func(BaseModel): assert model.output == "some/path/or/string" # (undefined) json string vs SimCoreFileLink.dict() ------------ - MINIMAL = 1 + MINIMAL = 2 # <--- index of the example with the minimum required fields assert SimCoreFileLink in get_args(OutputTypes) example = SimCoreFileLink.parse_obj( SimCoreFileLink.Config.schema_extra["examples"][MINIMAL] diff --git a/services/dynamic-sidecar/tests/unit/test__oas_spec.py b/services/dynamic-sidecar/tests/unit/test__oas_spec.py index 8f4b0cb17f9..a25734b30f2 100644 --- a/services/dynamic-sidecar/tests/unit/test__oas_spec.py +++ b/services/dynamic-sidecar/tests/unit/test__oas_spec.py @@ -16,7 +16,6 @@ def mock_environment(mock_environment_with_envdevel: EnvVarsDict) -> None: assert mock_environment_with_envdevel -@pytest.mark.testit def test_openapi_spec( mock_environment: None, app: FastAPI, project_slug_dir: Path ) -> None: From 327055752f40617b1762bc21bb1828beaaf66493 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 15:33:05 +0100 Subject: [PATCH 13/34] minor - adding comments --- .../webserver/scripts/openapi_node_meta.py | 20 +- .../webserver/scripts/openapi_project.py | 21 +- .../src/pytest_simcore/schemas.py | 5 + .../api/v0/schemas/node-meta-v0.0.1.json | 477 -- .../api/v0/schemas/project-v0.0.1.json | 768 -- .../api/v0/schemas/node-meta-v0.0.1.json | 477 -- .../api/v0/schemas/project-v0.0.1.json | 768 -- .../api/v0/.spectral.yaml | 1 - .../api/v0/openapi_original.yaml | 6322 ----------------- .../api/v0/schemas/node-meta-v0.0.1.json | 477 -- .../api/v0/schemas/project-v0.0.1.json | 768 -- 11 files changed, 31 insertions(+), 10073 deletions(-) delete mode 100644 services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json delete mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json diff --git a/api/specs/webserver/scripts/openapi_node_meta.py b/api/specs/webserver/scripts/openapi_node_meta.py index d375ec3c96d..ae51e0cbaa1 100644 --- a/api/specs/webserver/scripts/openapi_node_meta.py +++ b/api/specs/webserver/scripts/openapi_node_meta.py @@ -9,10 +9,10 @@ # pylint: disable=too-many-arguments -from fastapi import FastAPI import json -import jsonref +import jsonref +from fastapi import FastAPI from models_library.services import ServiceDockerData app = FastAPI(redoc_url=None, openapi_version="3.0.0") @@ -28,11 +28,17 @@ async def get_project_inputs(project: ServiceDockerData): if __name__ == "__main__": from _common import CURRENT_DIR, create_openapi_specs - # Generate OAS for the ServiceDockerData pydantic model via the FastAPI app - create_openapi_specs(app, CURRENT_DIR.parent / "../common/schemas/openapi-node-meta-generated.yaml") - - # Generate json schema from the ServiceDockerData pydantic model - with open(CURRENT_DIR.parent / "../common/schemas/node-meta-v0.0.1-pydantic.json", 'w') as f: + # Generate OAS for the Project pydantic model via the FastAPI app + # NOTE: currently not used, as the generated OAS does not generate x-pattern properties + # it has problem with types ex. ServiceInputsDict = dict[ServicePortKey, ServiceInput], where key is a constrained string + create_openapi_specs( + app, CURRENT_DIR.parent / "../common/schemas/openapi-node-meta-generated.yaml" + ) + + # Generate dereferenced json schema from the ServiceDockerData pydantic model and save it + with open( + CURRENT_DIR.parent / "../common/schemas/node-meta-v0.0.1-pydantic.json", "w" + ) as f: schema = ServiceDockerData.schema_json() schema_without_ref = jsonref.loads(schema) diff --git a/api/specs/webserver/scripts/openapi_project.py b/api/specs/webserver/scripts/openapi_project.py index 10c6d97da44..1b201901791 100644 --- a/api/specs/webserver/scripts/openapi_project.py +++ b/api/specs/webserver/scripts/openapi_project.py @@ -8,10 +8,10 @@ # pylint: disable=unused-variable # pylint: disable=too-many-arguments -from fastapi import FastAPI import json -import jsonref +import jsonref +from fastapi import FastAPI from models_library.projects import Project app = FastAPI(redoc_url=None, openapi_version="3.0.0") @@ -27,12 +27,17 @@ async def get_project_inputs(project: Project): if __name__ == "__main__": from _common import CURRENT_DIR, create_openapi_specs - # Generate OAS for the Project pydantic model via the FastAPI app - # NOTE: currently not used, see: - create_openapi_specs(app, CURRENT_DIR.parent / "../common/schemas/openapi-project-generated.yaml") - - # Generate json schema from the Project pydantic model - with open(CURRENT_DIR.parent / "../common/schemas/project-v0.0.1-pydantic.json", 'w') as f: + # Generate OAS for the Project pydantic model via the FastAPI app + # NOTE: currently not used, as the generated OAS does not generate x-pattern properties + # it has problem with types ex. Workbench = dict[NodeIDstr, Node], where key is a constrained string + create_openapi_specs( + app, CURRENT_DIR.parent / "../common/schemas/openapi-project-generated.yaml" + ) + + # Generate dereferenced json schema from the Project pydantic model and save it + with open( + CURRENT_DIR.parent / "../common/schemas/project-v0.0.1-pydantic.json", "w" + ) as f: schema = Project.schema_json() schema_without_ref = jsonref.loads(schema) diff --git a/packages/pytest-simcore/src/pytest_simcore/schemas.py b/packages/pytest-simcore/src/pytest_simcore/schemas.py index f09a7235f0d..fe0ce787605 100644 --- a/packages/pytest-simcore/src/pytest_simcore/schemas.py +++ b/packages/pytest-simcore/src/pytest_simcore/schemas.py @@ -106,6 +106,11 @@ def _run_diff(schema_lhs: dict, schema_rhs: dict) -> subprocess.CompletedProcess schema_rhs_path = tmpdir / "schema_rhs.json" schema_rhs_path.write_text(json.dumps(schema_rhs, indent=1)) + # NOTE: When debugging the differences, as of now both schemas comes from + # pydantic model, it is easy to visually compare the difference. To do so, + # just dereference the current pydantic schema. Example can be seen here: + # /osparc-simcore/api/specs/webserver/scripts/openapi_project.py + return subprocess.run( [json_diff_script, schema_lhs_path, schema_rhs_path], stdout=subprocess.PIPE, diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml b/services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml deleted file mode 100644 index d47c47d315d..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/.spectral.yaml +++ /dev/null @@ -1 +0,0 @@ -extends: ["spectral:oas"] diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml deleted file mode 100644 index e8a9d8df162..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi_original.yaml +++ /dev/null @@ -1,6322 +0,0 @@ -openapi: 3.0.0 -info: - title: osparc-simcore web API - version: 0.16.0 - description: API designed for the front-end app - contact: - name: IT'IS Foundation - email: support@simcore.io - license: - name: MIT - url: 'https://github.com/ITISFoundation/osparc-simcore/blob/master/LICENSE' -servers: - - description: API server - url: /v0 - - description: Development server - url: 'http://{host}:{port}/{basePath}' - variables: - host: - default: localhost - port: - default: '8001' - basePath: - enum: - - v0 - default: v0 -tags: - - name: admin - - name: authentication - - name: user - - name: project - - name: cluster - - name: catalog - - name: storage - - name: activity - - name: tag - - name: tasks - description: | - Asynchronously running tasks - - name: node - description: | - The simcore frontend provides a bunch of custom ui elements for nodes to interact with users. - The frontend uses these api calls to query the nodes about the gui elemets they want to use, and it - defines the protocol for the frontend to interact with the node. - - name: configuration - - name: maintenance - - name: publication - description: | - oSPARC users can make publications. Starting from submission of new service candidates, but this could - end up accepting other types of publications. - - name: viewer - - name: repository -paths: - '/email:test': - post: - tags: - - admin - summary: Test Email - operationId: test_email - parameters: - - required: false - schema: - title: X-Simcore-Products-Name - type: string - name: x-simcore-products-name - in: header - requestBody: - content: - application/json: - schema: - title: TestEmail - required: - - to - type: object - properties: - from_: - title: 'From ' - type: string - description: Email sender - format: email - to: - title: To - type: string - description: Email receiver - format: email - template_name: - title: Template Name - enum: - - change_email_email.jinja2 - - new_2fa_code.jinja2 - - registration_email.jinja2 - - reset_password_email_failed.jinja2 - - reset_password_email.jinja2 - - service_submission.jinja2 - type: string - default: registration_email.jinja2 - template_context: - title: Template Context - type: object - default: {} - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[Union[TestFailed, TestPassed]]' - type: object - properties: - data: - title: Data - anyOf: - - title: TestFailed - required: - - test_name - - error_type - - error_message - - traceback - type: object - properties: - test_name: - title: Test Name - type: string - error_type: - title: Error Type - type: string - error_message: - title: Error Message - type: string - traceback: - title: Traceback - type: string - - title: TestPassed - required: - - fixtures - - info - type: object - properties: - fixtures: - title: Fixtures - type: object - info: - title: Info - type: object - error: - title: Error - /: - get: - tags: - - maintenance - summary: readiness probe for - operationId: healthcheck_readiness_probe - responses: - '200': - description: Service information - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - name: - type: string - status: - type: string - api_version: - type: string - version: - type: string - example: - name: simcore-director-service - status: SERVICE_RUNNING - api_version: 0.1.0-dev+NJuzzD9S - version: 0.1.0-dev+N127Mfv9H - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - /health: - get: - tags: - - maintenance - summary: liveliness probe - operationId: healthcheck_liveness_probe - responses: - '200': - description: Service information - content: - application/json: - schema: - $ref: '#/paths/~1/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - /status: - get: - tags: - - maintenance - summary: checks status of self and connected services - operationId: get_app_status - responses: - '200': - description: returns app status check - /status/diagnostics: - get: - tags: - - maintenance - operationId: get_app_diagnostics - responses: - '200': - description: returns app diagnostics report - '/status/{service_name}': - get: - tags: - - maintenance - operationId: get_service_status - parameters: - - in: path - required: true - name: service_name - schema: - type: string - responses: - '200': - description: returns status of connected service - /config: - get: - summary: Front end runtime configuration - operationId: get_config - tags: - - configuration - responses: - '200': - description: configuration details - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - invitation_required: - type: boolean - example: - invitation_required: true - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/auth/register/invitations:check': - post: - tags: - - authentication - summary: Check Registration Invitation - description: Check invitation and returns associated email or None - operationId: auth_check_registration_invitation - requestBody: - content: - application/json: - schema: - title: InvitationCheck - required: - - invitation - type: object - properties: - invitation: - title: Invitation - type: string - description: Invitation code - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[InvitationInfo]' - type: object - properties: - data: - title: InvitationInfo - type: object - properties: - email: - title: Email - type: string - description: Email associated to invitation or None - format: email - additionalProperties: false - error: - title: Error - /auth/register: - post: - tags: - - authentication - summary: Register - description: User registration - operationId: auth_register - requestBody: - content: - application/json: - schema: - title: RegisterBody - required: - - email - - password - type: object - properties: - email: - title: Email - type: string - format: email - password: - title: Password - type: string - format: password - writeOnly: true - confirm: - title: Confirm - type: string - description: Password confirmation - format: password - writeOnly: true - invitation: - title: Invitation - type: string - description: Invitation code - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '/auth/two_factor:resend': - post: - tags: - - authentication - summary: Resend 2Fa Code - description: Resends 2FA either via email or sms - operationId: auth_resend_2fa_code - requestBody: - content: - application/json: - schema: - title: Resend2faBody - required: - - email - type: object - properties: - email: - title: Email - type: string - description: User email (identifier) - format: email - via: - title: Via - enum: - - SMS - - Email - type: string - default: SMS - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '401': - description: unauthorized reset due to invalid token code - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - /auth/verify-phone-number: - post: - tags: - - authentication - summary: Register Phone - description: user tries to verify phone number for 2 Factor Authentication when registering - operationId: auth_register_phone - requestBody: - content: - application/json: - schema: - title: RegisterPhoneBody - required: - - email - - phone - type: object - properties: - email: - title: Email - type: string - format: email - phone: - title: Phone - type: string - description: 'Phone number E.164, needed on the deployments with 2FA' - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[RegisterPhoneNextPage]' - type: object - properties: - data: - title: RegisterPhoneNextPage - required: - - name - - message - type: object - properties: - name: - title: Name - type: string - description: Code name to the front-end page - parameters: - title: _PageParams - type: object - properties: - retry_2fa_after: - title: Retry 2Fa After - exclusiveMinimum: true - type: integer - minimum: 0 - logger: - title: Logger - type: string - default: user - deprecated: true - level: - title: Level - enum: - - INFO - - WARNING - - ERROR - type: string - default: INFO - message: - title: Message - type: string - description: |- - This is the body of a 2XX response to pass the front-end - what kind of page shall be display next and some information about it - - An analogous structure is used in the redirects (see create_redirect_response) but - using a path+query in the fragment of the URL - error: - title: Error - /auth/validate-code-register: - post: - tags: - - authentication - summary: Phone Confirmation - description: user enters 2 Factor Authentication code when registering - operationId: auth_phone_confirmation - requestBody: - content: - application/json: - schema: - title: PhoneConfirmationBody - required: - - email - - phone - - code - type: object - properties: - email: - title: Email - type: string - format: email - phone: - title: Phone - type: string - description: 'Phone number E.164, needed on the deployments with 2FA' - code: - title: Code - type: string - format: password - writeOnly: true - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - /auth/login: - post: - tags: - - authentication - summary: Login - description: user logs in - operationId: auth_login - requestBody: - content: - application/json: - schema: - title: LoginBody - required: - - email - - password - type: object - properties: - email: - title: Email - type: string - format: email - password: - title: Password - type: string - format: password - writeOnly: true - additionalProperties: false - required: true - responses: - '201': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[LoginNextPage]' - type: object - properties: - data: - title: LoginNextPage - required: - - name - - code - - reason - type: object - properties: - name: - title: Name - type: string - description: Code name to the front-end page - parameters: - title: CodePageParams - required: - - message - type: object - properties: - message: - title: Message - type: string - retry_2fa_after: - title: Retry 2Fa After - exclusiveMinimum: true - type: integer - minimum: 0 - next_url: - title: Next Url - type: string - code: - title: Code - type: string - deprecated: true - reason: - title: Reason - type: string - deprecated: true - description: |- - This is the body of a 2XX response to pass the front-end - what kind of page shall be display next and some information about it - - An analogous structure is used in the redirects (see create_redirect_response) but - using a path+query in the fragment of the URL - error: - title: Error - '401': - description: unauthorized reset due to invalid token code - content: - application/json: - schema: - title: 'Envelope[Error]' - type: object - properties: - data: - title: Error - type: object - properties: - logs: - title: Logs - type: array - items: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema/properties/data' - description: log messages - errors: - title: Errors - type: array - items: - title: ErrorItem - required: - - code - - message - type: object - properties: - code: - title: Code - type: string - description: Typically the name of the exception that produced it otherwise some known error code - message: - title: Message - type: string - description: Error message specific to this item - resource: - title: Resource - type: string - description: API resource affected by this error - field: - title: Field - type: string - description: Specific field within the resource - description: errors metadata - status: - title: Status - type: integer - description: HTTP error code - error: - title: Error - /auth/validate-code-login: - post: - tags: - - authentication - summary: Login 2Fa - description: user enters 2 Factor Authentication code when login in - operationId: auth_login_2fa - requestBody: - content: - application/json: - schema: - title: LoginTwoFactorAuthBody - required: - - email - - code - type: object - properties: - email: - title: Email - type: string - format: email - code: - title: Code - type: string - format: password - writeOnly: true - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '401': - description: unauthorized reset due to invalid token code - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - /auth/logout: - post: - tags: - - authentication - summary: Logout - description: user logout - operationId: auth_logout - requestBody: - content: - application/json: - schema: - title: LogoutBody - type: object - properties: - client_session_id: - title: Client Session Id - type: string - example: 5ac57685-c40f-448f-8711-70be1936fd63 - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[Log]' - type: object - properties: - data: - title: Log - required: - - message - type: object - properties: - level: - allOf: - - title: LogLevel - enum: - - DEBUG - - INFO - - WARNING - - ERROR - type: string - description: An enumeration. - description: log level - default: INFO - message: - title: Message - type: string - description: 'log message. If logger is USER, then it MUST be human readable' - logger: - title: Logger - type: string - description: name of the logger receiving this message - example: - message: 'Hi there, Mr user' - level: INFO - logger: user-logger - error: - title: Error - /auth/reset-password: - post: - tags: - - authentication - summary: Reset Password - description: a non logged-in user requests a password reset - operationId: auth_reset_password - requestBody: - content: - application/json: - schema: - title: ResetPasswordBody - required: - - email - type: object - properties: - email: - title: Email - type: string - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '503': - description: Service Unavailable - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - '/auth/reset-password/{code}': - post: - tags: - - authentication - summary: Reset Password Allowed - description: changes password using a token code without being logged in - operationId: auth_reset_password_allowed - parameters: - - required: true - schema: - title: Code - type: string - name: code - in: path - requestBody: - content: - application/json: - schema: - title: ResetPasswordConfirmation - required: - - password - - confirm - type: object - properties: - password: - title: Password - type: string - format: password - writeOnly: true - confirm: - title: Confirm - type: string - format: password - writeOnly: true - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '401': - description: unauthorized reset due to invalid token code - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - /auth/change-email: - post: - tags: - - authentication - summary: Change Email - description: logged in user changes email - operationId: auth_change_email - requestBody: - content: - application/json: - schema: - title: ChangeEmailBody - required: - - email - type: object - properties: - email: - title: Email - type: string - format: email - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '401': - description: unauthorized user. Login required - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - '503': - description: unable to send confirmation email - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - /auth/change-password: - post: - tags: - - authentication - summary: Change Password - description: logged in user changes password - operationId: auth_change_password - requestBody: - content: - application/json: - schema: - title: ChangePasswordBody - required: - - current - - new - - confirm - type: object - properties: - current: - title: Current - type: string - format: password - writeOnly: true - new: - title: New - type: string - format: password - writeOnly: true - confirm: - title: Confirm - type: string - format: password - writeOnly: true - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - '401': - description: unauthorized user. Login required - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - '409': - description: mismatch between new and confirmation passwords - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - '422': - description: current password is invalid - content: - application/json: - schema: - $ref: '#/paths/~1auth~1login/post/responses/401/content/application~1json/schema' - '/auth/confirmation/{code}': - get: - tags: - - authentication - summary: Email Confirmation - description: email link sent to user to confirm an action - operationId: auth_confirmation - parameters: - - required: true - schema: - title: Code - type: string - name: code - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1auth~1logout/post/responses/200/content/application~1json/schema' - 3XX: - description: redirection to specific ui application page - /auth/api-keys: - get: - tags: - - authentication - summary: List Api Keys - description: lists display names of API keys by this user - operationId: list_api_keys - parameters: - - required: true - schema: - title: Code - type: string - name: code - in: query - responses: - '200': - description: returns the display names of API keys - content: - application/json: - schema: - title: Response 200 List Api Keys - type: array - items: - type: string - '400': - description: key name requested is invalid - '401': - description: requires login to list keys - '403': - description: not enough permissions to list keys - post: - tags: - - authentication - summary: Create Api Key - description: creates API keys to access public API - operationId: create_api_key - requestBody: - content: - application/json: - schema: - title: ApiKeyCreate - required: - - display_name - type: object - properties: - display_name: - title: Display Name - minLength: 3 - type: string - expiration: - title: Expiration - type: number - description: 'Time delta from creation time to expiration. If None, then it does not expire.' - format: time-delta - required: true - responses: - '200': - description: Authorization granted returning API key - content: - application/json: - schema: - title: ApiKeyGet - required: - - display_name - - api_key - - api_secret - type: object - properties: - display_name: - title: Display Name - minLength: 3 - type: string - api_key: - title: Api Key - type: string - api_secret: - title: Api Secret - type: string - '400': - description: key name requested is invalid - '401': - description: requires login to list keys - '403': - description: not enough permissions to list keys - delete: - tags: - - authentication - summary: Delete Api Key - description: deletes API key by name - operationId: delete_api_key - requestBody: - content: - application/json: - schema: - $ref: '#/paths/~1auth~1api-keys/post/requestBody/content/application~1json/schema' - required: true - responses: - '204': - description: api key successfully deleted - '401': - description: requires login to delete a key - '403': - description: not enough permissions to delete a key - /me: - get: - operationId: get_my_profile - tags: - - user - responses: - '200': - description: current user profile - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - allOf: - - $ref: '#/paths/~1me/put/requestBody/content/application~1json/schema/allOf/0' - - type: object - properties: - id: - type: integer - login: - type: string - format: email - role: - type: string - groups: - $ref: '#/paths/~1groups/get/responses/200/content/application~1json/schema/properties/data' - gravatar_id: - type: string - expirationDate: - type: string - format: date - description: 'If user has a trial account, it sets the expiration date, otherwise None' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - put: - operationId: update_my_profile - tags: - - user - requestBody: - content: - application/json: - schema: - allOf: - - type: object - properties: - first_name: - type: string - last_name: - type: string - example: - first_name: Pedro - last_name: Crespo - responses: - '204': - description: updated profile - default: - $ref: '#/components/responses/DefaultErrorResponse' - /me/tokens: - get: - summary: List tokens - operationId: list_tokens - tags: - - user - responses: - '200': - description: list of tokens - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - $ref: '#/paths/~1me~1tokens/post/requestBody/content/application~1json/schema/properties/data' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - summary: Create tokens - operationId: create_tokens - tags: - - user - requestBody: - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - description: api keys for third party services - type: object - properties: - service: - description: uniquely identifies the service where this token is used - type: string - token_key: - description: basic token key - type: string - format: uuid - token_secret: - type: string - format: uuid - required: - - service - - token_key - error: - nullable: true - default: null - responses: - '201': - description: token created - content: - application/json: - schema: - $ref: '#/paths/~1me~1tokens/post/requestBody/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/me/tokens/{service}': - parameters: - - name: service - in: path - required: true - schema: - type: string - get: - summary: Gets specific token - operationId: get_token - tags: - - user - responses: - '200': - description: got detailed token - content: - application/json: - schema: - $ref: '#/paths/~1me~1tokens/post/requestBody/content/application~1json/schema' - put: - summary: Updates token - operationId: update_token - tags: - - user - responses: - '204': - description: token has been successfully updated - delete: - summary: Delete token - operationId: delete_token - tags: - - user - responses: - '204': - description: token has been successfully deleted - /groups: - get: - summary: List my groups - operationId: list_groups - tags: - - group - responses: - '200': - description: list of the groups I belonged to - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - me: - $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' - organizations: - type: array - items: - $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' - all: - $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' - product: - $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - summary: Create a new group - operationId: create_group - tags: - - group - requestBody: - required: true - description: the group to create - content: - application/json: - schema: - type: object - properties: - gid: - description: the group ID - type: string - label: - description: the group name - type: string - description: - description: the group description - type: string - thumbnail: - description: url to the group thumbnail - type: string - format: uri - accessRights: - $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/patch/requestBody/content/application~1json/schema/properties/accessRights' - required: - - gid - - label - - description - - accessRights - example: - - gid: '27' - label: A user - description: A very special user - thumbnail: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - - gid: '1' - label: ITIS Foundation - description: The Foundation for Research on Information Technologies in Society - thumbnail: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - - gid: '0' - label: All - description: Open to all users - thumbnail: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - responses: - '201': - description: group created - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/groups/{gid}': - parameters: - - name: gid - in: path - required: true - schema: - type: string - get: - tags: - - group - summary: Gets one group details - operationId: get_group - responses: - '200': - description: got group - content: - application/json: - schema: - $ref: '#/paths/~1groups/post/responses/201/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - patch: - summary: Update one group - operationId: update_group - tags: - - group - requestBody: - required: true - description: the group to update - content: - application/json: - schema: - $ref: '#/paths/~1groups/post/requestBody/content/application~1json/schema' - responses: - '200': - description: the modified group - content: - application/json: - schema: - $ref: '#/paths/~1groups/post/responses/201/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - group - summary: Deletes one group - operationId: delete_group - responses: - '204': - description: group has been successfully deleted - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/groups/{gid}/users': - parameters: - - name: gid - in: path - required: true - schema: - type: string - get: - tags: - - group - summary: Gets list of users in group - operationId: get_group_users - responses: - '200': - description: got list of users and their respective rights - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/get/responses/200/content/application~1json/schema/properties/data' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - tags: - - group - summary: Adds a user in the group - operationId: add_group_user - requestBody: - required: true - description: the user to add - content: - application/json: - schema: - anyOf: - - type: object - required: - - uid - properties: - uid: - type: string - description: the user id - - type: object - required: - - email - properties: - email: - type: string - format: email - description: the user email - responses: - '204': - description: user successfully added - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/groups/{gid}/users/{uid}': - parameters: - - name: gid - in: path - required: true - schema: - type: string - - name: uid - in: path - required: true - schema: - type: string - get: - tags: - - group - summary: Gets specific user in group - operationId: get_group_user - responses: - '200': - description: got user - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - allOf: - - type: object - properties: - first_name: - type: string - description: the user first name - last_name: - type: string - description: the user last name - login: - type: string - format: email - description: the user login email - gravatar_id: - type: string - description: the user gravatar id hash - id: - type: string - description: the user id - gid: - type: string - description: the user primary gid - example: - first_name: Mr - last_name: Smith - login: mr.smith@matrix.com - gravatar_id: a1af5c6ecc38e81f29695f01d6ceb540 - id: '1' - gid: '3' - - $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/patch/requestBody/content/application~1json/schema/properties/accessRights' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - patch: - tags: - - group - summary: Modify specific user in group - operationId: update_group_user - requestBody: - required: true - description: the user rights to modify - content: - application/json: - schema: - type: object - properties: - accessRights: - description: defines acesss rights for the user - type: object - properties: - read: - type: boolean - write: - type: boolean - delete: - type: boolean - required: - - read - - write - - delete - example: - - read: true - write: false - delete: false - - read: true - write: true - delete: false - - read: true - write: true - delete: true - required: - - accessRights - responses: - '200': - description: modified user - content: - application/json: - schema: - $ref: '#/paths/~1groups~1%7Bgid%7D~1users~1%7Buid%7D/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - group - summary: Delete specific user in group - operationId: delete_group_user - responses: - '204': - description: successfully removed user - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/groups/{gid}/classifiers': - get: - parameters: - - name: gid - in: path - required: true - schema: - type: string - - name: tree_view - in: query - description: Some classifiers (e.g. sparc's) offer different tree views - schema: - type: string - enum: - - std - - sort - default: std - tags: - - group - summary: Gets classifiers bundle for this group - operationId: get_group_classifiers - responses: - '200': - description: got a bundle with all information about classifiers - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/groups/sparc/classifiers/scicrunch-resources/{rrid}': - parameters: - - name: rrid - in: path - required: true - schema: - type: string - get: - tags: - - group - summary: 'Returns information on a valid RRID (https://www.force11.org/group/resource-identification-initiative)' - operationId: get_scicrunch_resource - responses: - '200': - description: Got information of a valid RRID - '400': - description: Invalid RRID - '503': - description: scircrunch.org service is not reachable - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - tags: - - group - summary: Adds new RRID to classifiers - operationId: add_scicrunch_resource - responses: - '200': - description: Got information of a valid RRID - '400': - description: Invalid RRID - '503': - description: scircrunch.org service is not reachable - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/groups/sparc/classifiers/scicrunch-resources:search': - get: - parameters: - - name: guess_name - in: query - required: true - schema: - type: string - tags: - - group - summary: Returns a list of related resource provided a search name - operationId: search_scicrunch_resources - responses: - '200': - description: Got information of a valid RRID - '503': - description: scircrunch.org service is not reachable - default: - $ref: '#/components/responses/DefaultErrorResponse' - /storage/locations: - get: - summary: Get available storage locations - tags: - - storage - operationId: get_storage_locations - responses: - '200': - description: List of availabe storage locations - content: - application/json: - schema: - type: array - items: - type: object - properties: - name: - type: string - id: - type: number - example: - filename: simcore.s3 - id: 0 - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}:sync': - post: - summary: Manually triggers the synchronisation of the file meta data table in the database - tags: - - storage - operationId: synchronise_meta_data_table - parameters: - - name: location_id - in: path - required: true - schema: - type: string - - name: dry_run - in: query - required: false - schema: - type: boolean - default: true - - name: fire_and_forget - in: query - required: false - schema: - type: boolean - default: false - responses: - '200': - description: 'An object containing added, changed and removed paths' - content: - application/json: - schema: - type: object - required: - - data - - error - properties: - data: - type: object - required: - - removed - properties: - dry_run: - type: boolean - fire_and_forget: - type: boolean - removed: - type: array - items: - type: string - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}/files/metadata': - get: - summary: Get list of file meta data - tags: - - storage - operationId: get_files_metadata - parameters: - - name: location_id - in: path - required: true - schema: - type: string - responses: - '200': - description: list of file meta-datas - content: - application/json: - schema: - type: array - items: - $ref: '#/paths/~1storage~1locations~1%7Blocation_id%7D~1files~1%7Bfile_id%7D~1metadata/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}/files/{file_id}': - get: - summary: Returns download link for requested file - tags: - - storage - operationId: download_file - parameters: - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - responses: - '200': - description: Returns presigned link - content: - application/json: - schema: - type: object - properties: - link: - type: string - example: - link: example_link - put: - summary: Returns upload link - tags: - - storage - operationId: upload_file - parameters: - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - - name: file_size - in: query - required: false - schema: - type: integer - format: int64 - minimum: 0 - responses: - '200': - description: Return upload object - content: - application/json: - schema: - type: object - required: - - data - - error - properties: - data: - type: object - required: - - chunk_size - - urls - - links - properties: - chunk_size: - type: integer - format: int64 - minimum: 0 - urls: - type: array - items: - type: string - links: - type: object - required: - - abort_upload - - complete_upload - properties: - abort_upload: - type: string - complete_upload: - type: string - error: - nullable: true - default: null - links: - CompleteUpload: - operationId: complete_upload_file - parameters: - path.location_id: $request.path.location_id - path.file_id: $request.path.file_id - query.user_id: $request.query.user_id - AbortUpload: - operationId: abort_upload_file - parameters: - path.location_id: $request.path.location_id - path.file_id: $request.path.file_id - query.user_id: $request.query.user_id - delete: - summary: Deletes File - tags: - - storage - operationId: delete_file - parameters: - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - responses: - '204': - description: '' - '/storage/locations/{location_id}/files/{file_id}:complete': - post: - summary: Asks the server to complete the upload - operationId: complete_upload_file - parameters: - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - type: object - required: - - parts - properties: - parts: - type: array - items: - type: object - required: - - number - - e_tag - properties: - number: - type: integer - minimum: 1 - e_tag: - type: string - responses: - '202': - description: Completion of upload is accepted - content: - application/json: - schema: - type: object - required: - - data - - error - properties: - data: - type: object - required: - - links - properties: - links: - type: object - required: - - state - properties: - state: - type: string - error: - nullable: true - default: null - links: - CompleteUploadStatus: - operationId: is_completed_upload_file - parameters: - path.location_id: $request.path.location_id - path.file_id: $request.path.file_id - path.future_id: $response.body.data.links.state - query.user_id: $request.query.user_id - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}/files/{file_id}:abort': - post: - summary: Asks the server to abort the upload and revert to the last valid version if any - operationId: abort_upload_file - parameters: - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - responses: - '204': - description: Abort OK - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}/files/{file_id}:complete/futures/{future_id}': - post: - summary: Check for upload completion - operationId: is_completed_upload_file - parameters: - - name: future_id - in: path - required: true - schema: - type: string - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - responses: - '200': - description: returns state of upload completion - content: - application/json: - schema: - type: object - required: - - data - - error - properties: - data: - type: object - required: - - state - properties: - state: - type: string - enum: - - ok - - nok - e_tag: - type: string - nullable: true - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}/files/{file_id}/metadata': - get: - summary: Get File Metadata - tags: - - storage - operationId: get_file_metadata - parameters: - - name: file_id - in: path - required: true - schema: - type: string - - name: location_id - in: path - required: true - schema: - type: string - responses: - '200': - description: Returns file metadata - content: - application/json: - schema: - type: object - properties: - file_uuid: - type: string - location_id: - type: string - project_name: - type: string - node_name: - type: string - file_name: - type: string - file_id: - type: string - created_at: - type: string - last_modified: - type: string - file_size: - type: integer - entity_tag: - type: string - example: - file_uuid: simcore-testing/105/1000/3 - location_id: '0' - project_name: futurology - node_name: alpha - file_name: example.txt - file_id: 'N:package:e263da07-2d89-45a6-8b0f-61061b913873' - created_at: '2019-06-19T12:29:03.308611Z' - last_modified: '2019-06-19T12:29:03.78852Z' - file_size: 73 - entity_tag: a87ff679a2f3e71d9181a67b7542122c - '/storage/locations/{location_id}/datasets/{dataset_id}/metadata': - get: - summary: Get Files Metadata - tags: - - storage - operationId: get_files_metadata_dataset - parameters: - - name: location_id - in: path - required: true - schema: - type: string - - name: dataset_id - in: path - required: true - schema: - type: string - responses: - '200': - description: list of file meta-datas - content: - application/json: - schema: - $ref: '#/paths/~1storage~1locations~1%7Blocation_id%7D~1files~1metadata/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/storage/locations/{location_id}/datasets': - get: - summary: Get datasets metadata - tags: - - storage - operationId: get_datasets_metadata - parameters: - - name: location_id - in: path - required: true - schema: - type: string - responses: - '200': - description: list of dataset meta-datas - content: - application/json: - schema: - type: array - items: - type: object - properties: - dataset_id: - type: string - display_name: - type: string - example: - dataset_uuid: 'N:id-aaaa' - display_name: simcore-testing - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/computations/{project_id}': - get: - description: Returns the last computation data - tags: - - computations - operationId: get_computation - parameters: - - in: path - name: project_id - required: true - description: the uuid of the project - schema: - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - responses: - '200': - description: Succesffully retrieved computation - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - iteration: - type: integer - minimum: 1 - cluster_id: - type: integer - minimum: 0 - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/computations/{project_id}:start': - post: - description: Starts the pipeline(s) of a given (meta) project - tags: - - computations - operationId: start_computation - parameters: - - $ref: '#/paths/~1computations~1%7Bproject_id%7D/get/parameters/0' - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: - force_restart: - type: boolean - default: false - description: if true will force re-running all dependent nodes - cluster_id: - type: integer - description: 'the computation shall use the cluster described by its id, 0 is the default cluster' - default: 0 - minimum: 0 - subgraph: - description: The node uuids selected for running a partial pipeline - type: array - uniqueItems: true - items: - type: string - format: uuid - responses: - '201': - description: Successfully started the pipeline - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - pipelines_id - properties: - pipeline_id: - type: string - description: ID for created pipeline (=project identifier) - ref_ids: - type: array - items: - type: integer - description: Checkpoints IDs for created pipeline - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/computations/{project_id}:stop': - post: - description: Stops (all) pipeline(s) of a given (meta) project - tags: - - computations - operationId: stop_computation - parameters: - - $ref: '#/paths/~1computations~1%7Bproject_id%7D/get/parameters/0' - responses: - '204': - description: Succesffully stopped the pipeline - default: - $ref: '#/components/responses/DefaultErrorResponse' - /projects: - get: - tags: - - project - summary: List all projects - operationId: list_projects - parameters: - - name: type - in: query - schema: - type: string - default: all - enum: - - template - - user - - all - - name: show_hidden - in: query - schema: - type: boolean - default: false - description: includes projects marked as hidden in the listing - - name: offset - in: query - schema: - type: integer - minimum: 0 - default: 0 - required: false - description: index to the first item to return - - name: limit - in: query - schema: - type: integer - default: 20 - minimum: 1 - maximum: 50 - required: false - description: maximum number of items to return - responses: - '200': - description: list of projects - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema/properties/data' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - tags: - - project - summary: Create new project - operationId: create_projects - parameters: - - name: from_study - in: query - schema: - type: string - description: 'Option to create a project from existing template or study: from_study={study_uuid}' - - name: as_template - in: query - schema: - type: boolean - default: false - description: 'Option to create a template from existing project: as_template=true' - - name: copy_data - in: query - schema: - type: boolean - default: true - description: 'Option to copy data when creating from an existing template or as a template, defaults to True' - - name: hidden - in: query - schema: - type: boolean - default: false - description: Enables/disables hidden flag. Hidden projects are by default unlisted. - requestBody: - content: - application/json: - schema: - title: simcore project - description: Description of a simcore project - type: object - additionalProperties: false - required: - - uuid - - name - - description - - prjOwner - - accessRights - - creationDate - - lastChangeDate - - thumbnail - - workbench - properties: - uuid: - type: string - format: uuid - description: project unique identifier - example: 07640335-a91f-468c-ab69-a374fa82078d - name: - type: string - description: project name - example: Temporal Distortion Simulator - description: - type: string - description: longer one-line description about the project - example: Dabbling in temporal transitions ... - prjOwner: - type: string - format: email - description: user email - accessRights: - type: object - description: object containing the GroupID as key and read/write/execution permissions as value - x-patternProperties: - ^\S+$: - type: object - description: the group id - additionalProperties: false - required: - - read - - write - - delete - properties: - read: - type: boolean - description: gives read access - write: - type: boolean - description: gives write access - delete: - type: boolean - description: gives deletion rights - additionalProperties: true - creationDate: - type: string - description: project creation date - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' - lastChangeDate: - type: string - description: last save date - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' - thumbnail: - type: string - minLength: 0 - maxLength: 2083 - format: uri - description: url of the latest screenshot of the project - example: 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' - workbench: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - key - - version - - label - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: - - simcore/services/comp/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - version: - type: string - description: semantic version number of the node - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - label: - type: string - description: The short name of the node - example: - - JupyterLab - progress: - type: number - maximum: 100 - minimum: 0 - description: the node progress value - thumbnail: - minLength: 0 - maxLength: 2083 - format: uri - type: string - description: url of the latest screenshot of the node - example: - - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' - runHash: - description: the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated - type: - - string - - 'null' - example: - - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 - inputs: - type: object - description: values of input properties - patternProperties: - '^[-_a-zA-Z0-9]+$': - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - nodeUuid - - output - properties: - nodeUuid: - type: string - format: uuid - output: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - inputsUnits: - type: object - description: values of input unit - patternProperties: - '^[-_a-zA-Z0-9]+$': - type: string - example: - - kilo-meter - - milli-second - - micro-gram - - kelvin - inputAccess: - description: map with key - access level pairs - type: object - patternProperties: - '^[-_a-zA-Z0-9]+$': - type: string - enum: - - Invisible - - ReadOnly - - ReadAndWrite - default: ReadAndWrite - example: - - ReadOnly - inputNodes: - type: array - items: - type: string - format: uuid - description: node IDs of where the node is connected to - example: - - nodeUuid1 - - nodeUuid2 - outputs: - default: {} - type: object - patternProperties: - '^[-_a-zA-Z0-9]+$': - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - outputNode: - type: boolean - deprecated: true - outputNodes: - type: array - items: - type: string - format: uuid - description: Used in group-nodes. Node IDs of those connected to the output - example: - - nodeUuid1 - - nodeUuid2 - parent: - type: - - 'null' - - string - format: uuid - description: Parent's (group-nodes') node ID s. - example: - - nodeUuid1 - - nodeUuid2 - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - deprecated: true - state: - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: contains the node inputs dependencies if they need to be computed first - type: array - uniqueItems: true - items: - type: string - format: uuid - currentStatus: - description: the node's current state - default: NOT_STARTED - example: - - RUNNING - - FAILED - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - bootOptions: - title: Boot Options - description: 'Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services''s defaults.' - type: object - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - additionalProperties: true - ui: - type: object - additionalProperties: true - properties: - workbench: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - position - properties: - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - marker: - type: object - additionalProperties: false - required: - - color - properties: - color: - type: string - description: Marker's color - example: - - '#FF0000' - - '#0000FF' - additionalProperties: true - slideshow: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - position - properties: - position: - type: integer - description: Slide's position - example: - - 0 - - 2 - instructions: - type: - - string - - 'null' - description: Instructions about what to do in this step - example: - - This is a **sleeper** - - 'Please, select the config file defined [in this link](asdf)' - additionalProperties: true - currentNodeId: - type: string - format: uuid - annotations: - type: object - x-patternProperties: - '^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$': - type: object - additionalProperties: false - required: - - type - - color - - attributes - properties: - type: - type: string - description: Annotation type - example: - - rect - - text - color: - type: string - description: Annotation's color - example: - - '#FF0000' - - '#0000FF' - attributes: - type: object - description: svg attributes - additionalProperties: true - tags: - type: array - items: - type: integer - classifiers: - type: array - description: Contains the reference to the project classifiers - items: - type: string - example: 'some:id:to:a:classifier' - dev: - type: object - description: object used for development purposes only - state: - title: State - description: Project state - anyOf: - - nullable: true - - title: ProjectState - type: object - additionalProperties: false - properties: - locked: - title: Locked - description: The project lock state - allOf: - - title: ProjectLocked - type: object - additionalProperties: false - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: 'If locked, the user that owns the lock' - allOf: - - title: Owner - type: object - additionalProperties: false - properties: - user_id: - title: User Id - type: integer - description: Owner's identifier when registered in the user's database table - example: - - 2 - first_name: - title: First Name - description: Owner first name - example: - - John - type: string - last_name: - title: Last Name - description: Owner last name - example: - - Smith - type: string - required: - - user_id - - first_name - - last_name - status: - title: Status - description: The status of the project - enum: - - CLOSED - - CLOSING - - CLONING - - OPENING - - EXPORTING - - OPENED - type: string - required: - - value - - status - state: - title: State - description: The project running state - allOf: - - title: ProjectRunningState - type: object - additionalProperties: false - properties: - value: - title: RunningState - description: An enumeration. - enum: - - UNKNOWN - - NOT_STARTED - - PUBLISHED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - required: - - value - required: - - locked - - state - quality: - type: object - title: Quality - description: Object containing Quality Assessment related data - responses: - '202': - description: project created - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - task_id: - type: string - status_href: - type: string - result_href: - type: string - required: - - task_id - - status_href - - result_href - error: - nullable: true - default: null - links: - CreationStatus: - operationId: get_task_status - parameters: - task_id: $response.body#/data/task_id - CreationResult: - operationId: get_task_result - description: Returns 201 if creation succeeded - parameters: - task_id: $response.body#/data/task_id - default: - $ref: '#/components/responses/DefaultErrorResponse' - /projects/active: - get: - tags: - - project - summary: Gets active project - operationId: get_active_project - responses: - '200': - description: returns active project - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - allOf: - - $ref: '#/paths/~1projects/post/requestBody/content/application~1json/schema' - - type: object - properties: - state: - $ref: '#/paths/~1projects~1%7Bproject_id%7D~1state/get/responses/200/content/application~1json/schema/properties/data' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - get: - tags: - - project - summary: Gets given project - operationId: get_project - responses: - '200': - description: got detailed project - content: - application/json: - schema: - $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - put: - tags: - - project - summary: Enclosed entity replaces given project - operationId: replace_project - parameters: - - name: run - in: query - required: false - schema: - type: boolean - requestBody: - content: - application/json: - schema: - $ref: '#/paths/~1projects/post/requestBody/content/application~1json/schema' - responses: - '200': - description: got detailed project - content: - application/json: - schema: - $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - project - summary: Delete given project - operationId: delete_project - responses: - '204': - description: project has been successfully deleted - '/projects/{project_id}:open': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - post: - tags: - - project - summary: Open a given project - operationId: open_project - requestBody: - description: browser tab identifier - required: true - content: - application/json: - schema: - type: string - example: 5ac57685-c40f-448f-8711-70be1936fd63 - responses: - '200': - description: project successfuly opened - content: - application/json: - schema: - $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/state': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - get: - tags: - - project - summary: returns the state of a project - operationId: get_project_state - responses: - '200': - description: returns the project current state - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - locked - properties: - locked: - type: object - description: describes the project lock state - required: - - value - properties: - value: - type: boolean - description: true if the project is locked - owner: - type: object - properties: - first_name: - type: string - last_name: - type: string - required: - - firstName - - lastName - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}:xport': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - post: - tags: - - exporter - summary: creates an archive of the project and downloads it - operationId: export_project - responses: - '200': - description: creates an archive from a project file - content: - application/zip: - schema: - type: string - format: binary - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}:duplicate': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - post: - tags: - - exporter - summary: duplicates an existing project - operationId: duplicate_project - responses: - '200': - description: project was duplicated correctly - content: - application/json: - schema: - type: object - properties: - uuid: - type: string - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects:import': - post: - tags: - - exporter - summary: Create new project from an archive - operationId: import_project - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - fileName: - type: string - format: binary - responses: - '200': - description: creates a new project from an archive - content: - application/json: - schema: - type: object - properties: - uuid: - type: string - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}:close': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - post: - tags: - - project - summary: Closes a given project - operationId: close_project - requestBody: - description: browser tab identifier - required: true - content: - application/json: - schema: - $ref: '#/paths/~1projects~1%7Bproject_id%7D%3Aopen/post/requestBody/content/application~1json/schema' - responses: - '204': - description: project succesfuly closed - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - post: - tags: - - project - summary: Create a new node - operationId: create_node - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - service_id: - type: string - description: the uuid to assign to the service - service_key: - type: string - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - description: The key (url) of the service - service_version: - type: string - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - description: The tag/version of the service - required: - - service_key - - service_version - example: - service_key: simcore/services/dynamic/3d-viewer - service_version: 1.4.0 - responses: - '201': - description: created - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - node_id - properties: - node_id: - type: string - description: The UUID attached to this node - example: 123e4567-e89b-12d3-a456-426655440000 - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes/{node_id}': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - - name: node_id - in: path - required: true - schema: - type: string - get: - tags: - - project - description: Gets node status - operationId: get_node - responses: - '200': - description: OK service exists and runs. Returns node details. - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - published_port - - service_uuid - - service_key - - service_version - - service_host - - service_port - - service_state - - user_id - properties: - published_port: - description: The ports where the service provides its interface - type: integer - format: int32 - minimum: 1 - example: 30000 - entry_point: - description: The entry point where the service provides its interface if specified - type: string - example: /the/entry/point/is/here - service_uuid: - description: The UUID attached to this service - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - service_key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - service_version: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - service_host: - description: service host name within the network - type: string - example: jupyter_E1O2E-LAH - service_port: - description: port to access the service within the network - type: integer - minimum: 1 - example: 8081 - service_basepath: - description: different base path where current service is mounted otherwise defaults to root - type: string - example: /x/E1O2E-LAH - default: '' - service_state: - description: | - the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start - type: string - enum: - - pending - - pulling - - starting - - running - - complete - - failed - service_message: - description: the service message - type: string - example: no suitable node (insufficient resources on 1 node) - user_id: - description: the user that started the service - type: string - example: '123' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - project - description: Stops and removes a node from the project - operationId: delete_node - responses: - '204': - description: node has been successfully deleted from project - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes/{node_id}:retrieve': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - - name: node_id - in: path - required: true - schema: - type: string - post: - tags: - - project - description: Triggers service retrieve - operationId: retrieve_node - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - port_keys: - description: list of por keys to be retrieved - type: array - items: - type: string - responses: - '200': - description: Returns the amount of transferred bytes when pulling data via nodeports - content: - application/json: - schema: - type: object - properties: - data: - type: object - description: response payload - properties: - size_bytes: - type: integer - description: amount of transferred bytes - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes/{node_id}:start': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - - name: node_id - in: path - required: true - schema: - type: string - post: - tags: - - project - description: Starts a project dynamic service - operationId: start_node - responses: - '204': - description: started service (needs to be long running though) - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes/{node_id}:stop': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - - name: node_id - in: path - required: true - schema: - type: string - post: - tags: - - project - description: Stops a project node - operationId: stop_node - responses: - '204': - description: stopped service - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes/{node_id}:restart': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - - name: node_id - in: path - required: true - schema: - type: string - post: - tags: - - project - description: Restarts containers started by the dynamic-sidecar - operationId: restart_node - responses: - '204': - description: Restarts containers started by the dynamic-sidecar - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/nodes/{node_id}/resources': - parameters: - - name: project_id - in: path - required: true - schema: - type: string - - name: node_id - in: path - required: true - schema: - type: string - get: - tags: - - project - description: Returns the node resources - operationId: get_node_resources - responses: - '200': - description: Returns the node resources. - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - $ref: '#/paths/~1projects~1%7Bproject_id%7D~1nodes~1%7Bnode_id%7D~1resources/put/requestBody/content/application~1json/schema' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - put: - tags: - - project - description: Replaces the node resources - operationId: replace_node_resources - requestBody: - required: true - content: - application/json: - schema: - type: object - additionalProperties: - type: object - required: - - limit - - reservation - properties: - limit: - anyOf: - - type: integer - - type: number - - type: string - reservation: - anyOf: - - type: integer - - type: number - - type: string - responses: - '200': - description: Returns the udpated node resources. - content: - application/json: - schema: - $ref: '#/paths/~1projects~1%7Bproject_id%7D~1nodes~1%7Bnode_id%7D~1resources/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_id}/inputs': - get: - tags: - - project - summary: Get Project Inputs - description: New in version *0.10* - operationId: get_project_inputs - parameters: - - required: true - schema: - title: Project Id - type: string - format: uuid - name: project_id - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[dict[uuid.UUID, simcore_service_webserver.projects.projects_ports_handlers.ProjectInputGet]]' - type: object - properties: - data: - title: Data - type: object - additionalProperties: - title: ProjectInputGet - required: - - key - - value - - label - type: object - properties: - key: - title: Key - type: string - description: Project port's unique identifer. Same as the UUID of the associated port node - format: uuid - value: - title: Value - description: Value assigned to this i/o port - label: - title: Label - type: string - error: - title: Error - patch: - tags: - - project - summary: Update Project Inputs - description: New in version *0.10* - operationId: update_project_inputs - parameters: - - required: true - schema: - title: Project Id - type: string - format: uuid - name: project_id - in: path - requestBody: - content: - application/json: - schema: - title: Updates - type: array - items: - title: ProjectInputUpdate - required: - - key - - value - type: object - properties: - key: - title: Key - type: string - description: Project port's unique identifer. Same as the UUID of the associated port node - format: uuid - value: - title: Value - description: Value assigned to this i/o port - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1projects~1%7Bproject_id%7D~1inputs/get/responses/200/content/application~1json/schema' - '/projects/{project_id}/outputs': - get: - tags: - - project - summary: Get Project Outputs - description: New in version *0.10* - operationId: get_project_outputs - parameters: - - required: true - schema: - title: Project Id - type: string - format: uuid - name: project_id - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[dict[uuid.UUID, simcore_service_webserver.projects.projects_ports_handlers.ProjectOutputGet]]' - type: object - properties: - data: - title: Data - type: object - additionalProperties: - title: ProjectOutputGet - required: - - key - - value - - label - type: object - properties: - key: - title: Key - type: string - description: Project port's unique identifer. Same as the UUID of the associated port node - format: uuid - value: - title: Value - description: Value assigned to this i/o port - label: - title: Label - type: string - error: - title: Error - '/projects/{project_id}/metadata/ports': - get: - tags: - - project - summary: List Project Metadata Ports - description: New in version *0.12* - operationId: list_project_metadata_ports - parameters: - - required: true - schema: - title: Project Id - type: string - format: uuid - name: project_id - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[list[simcore_service_webserver.projects.projects_ports_handlers.ProjectMetadataPortGet]]' - type: object - properties: - data: - title: Data - type: array - items: - title: ProjectMetadataPortGet - required: - - key - - kind - type: object - properties: - key: - title: Key - type: string - description: Project port's unique identifer. Same as the UUID of the associated port node - format: uuid - kind: - title: Kind - enum: - - input - - output - type: string - content_schema: - title: Content Schema - type: object - description: 'jsonschema for the port''s value. SEE https://json-schema.org/understanding-json-schema/' - error: - title: Error - '/nodes/{nodeInstanceUUID}/outputUi/{outputKey}': - get: - tags: - - node - description: get a json description of the ui for presenting the output within the mainUi and a list of open api json schema objects describing the possible json payloads and responses for the api calls available at this endpoint - operationId: get_node_output_ui - parameters: - - $ref: '#/paths/~1nodes~1%7BnodeInstanceUUID%7D~1iframe/get/parameters/0' - - in: path - name: outputKey - required: true - schema: - type: string - responses: - '200': - description: Service Information - content: - application/json: - schema: - type: object - properties: - plugin: - type: string - config: - type: object - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '/nodes/{nodeInstanceUUID}/outputUi/{outputKey}/{apiCall}': - post: - tags: - - node - summary: send data back to the output api ... protocol depends on the definition - operationId: send_to_node_output_api - parameters: - - $ref: '#/paths/~1nodes~1%7BnodeInstanceUUID%7D~1iframe/get/parameters/0' - - $ref: '#/paths/~1nodes~1%7BnodeInstanceUUID%7D~1outputUi~1%7BoutputKey%7D/get/parameters/1' - - in: path - name: apiCall - required: true - schema: - type: string - requestBody: - content: - application/json: - schema: - oneOf: - - description: oa3 json schema description of the request structure - type: object - required: - - start - - count - properties: - start: - type: integer - count: - type: integer - filter: - type: string - orderBy: - type: string - - type: object - required: - - key - properties: - key: - type: string - - description: | - oa3 json schema description of the request structure. - If no `rootKey` is specified, the first level of the tree is returned. - The `filter` will return any items matching the filter string as well as any - folder items containing matching items further down the tree. - type: object - properties: - rootKey: - type: string - filter: - type: string - - type: object - required: - - key - properties: - key: - type: string - responses: - default: - description: node type specific api call according to the node type presented - content: - application/json: - schema: - oneOf: - - type: array - items: - type: object - properties: - key: - type: string - label: - type: string - thumbnail: - description: 'data url - https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs' - type: string - - type: object - - type: array - items: - type: object - properties: - key: - type: string - label: - type: string - folder: - type: boolean - - type: object - '/nodes/{nodeInstanceUUID}/iframe': - get: - tags: - - node - summary: entry point for iframe interaction with the node. This relies on the reverse proxy code. - operationId: get_node_output_iframe - parameters: - - in: path - name: nodeInstanceUUID - required: true - schema: - type: string - responses: - default: - description: any response appropriate in the iframe context - '/projects/{study_uuid}/tags/{tag_id}': - parameters: - - name: tag_id - in: path - required: true - schema: - type: integer - - name: study_uuid - in: path - required: true - schema: - type: string - put: - tags: - - project - summary: Links an existing label with an existing study - operationId: add_tag - responses: - '200': - description: The tag has been successfully linked to the study - content: - application/json: - schema: - $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - project - summary: Removes an existing link between a label and a study - operationId: remove_tag - responses: - '200': - description: The tag has been successfully removed from the study - content: - application/json: - schema: - $ref: '#/paths/~1projects~1active/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/projects/{project_uuid}/checkpoint/{ref_id}/iterations': - get: - tags: - - meta-projects - summary: List Project Iterations - description: Lists current project's iterations - operationId: simcore_service_webserver.meta_modeling_handlers._list_meta_project_iterations_handler - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - - required: true - schema: - title: Ref Id - anyOf: - - type: integer - - type: string - name: ref_id - in: path - - description: index to the first item to return (pagination) - required: false - schema: - title: Offset - exclusiveMinimum: false - type: integer - description: index to the first item to return (pagination) - default: 0 - minimum: 0 - name: offset - in: query - - description: maximum number of items to return (pagination) - required: false - schema: - title: Limit - maximum: 50 - minimum: 1 - type: integer - description: maximum number of items to return (pagination) - default: 20 - name: limit - in: query - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Page[IterationItem]' - required: - - _meta - - _links - - data - type: object - properties: - _meta: - title: PageMetaInfoLimitOffset - required: - - total - - count - type: object - properties: - limit: - title: Limit - exclusiveMinimum: true - type: integer - default: 20 - minimum: 0 - total: - title: Total - minimum: 0 - type: integer - offset: - title: Offset - minimum: 0 - type: integer - default: 0 - count: - title: Count - minimum: 0 - type: integer - _links: - title: PageLinks - required: - - self - - first - - last - type: object - properties: - self: - title: Self - maxLength: 65536 - minLength: 1 - type: string - format: uri - first: - title: First - maxLength: 65536 - minLength: 1 - type: string - format: uri - prev: - title: Prev - maxLength: 65536 - minLength: 1 - type: string - format: uri - next: - title: Next - maxLength: 65536 - minLength: 1 - type: string - format: uri - last: - title: Last - maxLength: 65536 - minLength: 1 - type: string - format: uri - additionalProperties: false - data: - title: Data - type: array - items: - title: IterationItem - required: - - name - - parent - - workcopy_project_id - - workcopy_project_url - - url - type: object - properties: - name: - title: Name - type: string - description: 'Iteration''s resource name [AIP-122](https://google.aip.dev/122)' - parent: - title: Parent - allOf: - - title: ParentMetaProjectRef - required: - - project_id - - ref_id - type: object - properties: - project_id: - title: Project Id - type: string - format: uuid - ref_id: - title: Ref Id - type: integer - description: Reference to the the meta-project that defines this iteration - workcopy_project_id: - title: Workcopy's Project Id - type: string - description: ID to this iteration's working copy.A working copy is a real project where this iteration is run - format: uuid - workcopy_project_url: - title: Workcopy's Project Url - maxLength: 2083 - minLength: 1 - type: string - format: uri - url: - title: Url - maxLength: 2083 - minLength: 1 - type: string - format: uri - '404': - description: This project has no iterations.Only meta-project have iterations and they must be explicitly created. - '422': - description: Validation Error - content: - application/json: - schema: - title: HTTPValidationError - type: object - properties: - detail: - title: Detail - type: array - items: - title: ValidationError - required: - - loc - - msg - - type - type: object - properties: - loc: - title: Location - type: array - items: - type: string - msg: - title: Message - type: string - type: - title: Error Type - type: string - '/projects/{project_uuid}/checkpoint/{ref_id}/iterations/{iter_id}': - get: - tags: - - meta-projects - summary: Get Project Iterations - description: Get current project's iterations - operationId: simcore_service_webserver.meta_modeling_handlers._get_meta_project_iterations_handler - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - - required: true - schema: - title: Ref Id - anyOf: - - type: integer - - type: string - name: ref_id - in: path - - required: true - name: iter_id - schema: - type: integer - in: path - responses: - '200': - description: Successful Response - '/projects/{project_uuid}/checkpoint/{ref_id}/iterations/-/results': - get: - tags: - - meta-projects - summary: List Project Iterations Results - description: Lists current project's iterations results table - operationId: simcore_service_webserver.meta_modeling_handlers._list_meta_project_iterations_results_handler - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - - required: true - schema: - title: Ref Id - anyOf: - - type: integer - - type: string - name: ref_id - in: path - - description: index to the first item to return (pagination) - required: false - schema: - title: Offset - exclusiveMinimum: false - type: integer - description: index to the first item to return (pagination) - default: 0 - minimum: 0 - name: offset - in: query - - description: maximum number of items to return (pagination) - required: false - schema: - title: Limit - maximum: 50 - minimum: 1 - type: integer - description: maximum number of items to return (pagination) - default: 20 - name: limit - in: query - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Page[IterationResultItem]' - required: - - _meta - - _links - - data - type: object - properties: - _meta: - $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/200/content/application~1json/schema/properties/_meta' - _links: - $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/200/content/application~1json/schema/properties/_links' - data: - title: Data - type: array - items: - $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/200/content/application~1json/schema/properties/data/items' - '404': - description: This project has no iterations.Only meta-project have iterations and they must be explicitly created. - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1projects~1%7Bproject_uuid%7D~1checkpoint~1%7Bref_id%7D~1iterations/get/responses/422/content/application~1json/schema' - '/projects/{project_uuid}/checkpoint/{ref_id}/iterations/{iter_id}/results': - get: - tags: - - meta-projects - summary: Get Project Iteration Results - description: Get current project's iterations - operationId: simcore_service_webserver.meta_modeling_handlers._get_meta_project_iteration_results_handler - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - - required: true - schema: - title: Ref Id - anyOf: - - type: integer - - type: string - name: ref_id - in: path - - required: true - schema: - type: integer - name: iter_id - in: path - responses: - '200': - description: Successful Response - /repos/projects: - get: - tags: - - repository - summary: List Repos - description: List info about versioned projects - operationId: simcore_service_webserver.version_control_handlers._list_repos_handler - parameters: - - description: index to the first item to return (pagination) - required: false - schema: - title: Offset - exclusiveMinimum: false - type: integer - description: index to the first item to return (pagination) - default: 0 - name: offset - in: query - - description: maximum number of items to return (pagination) - required: false - schema: - title: Limit - maximum: 50 - minimum: 1 - type: integer - description: maximum number of items to return (pagination) - default: 20 - name: limit - in: query - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Page[Repo]' - required: - - _meta - - _links - - data - type: object - properties: - _meta: - title: PageMetaInfoLimitOffset - required: - - limit - - total - - count - type: object - properties: - limit: - title: Limit - exclusiveMinimum: false - type: integer - total: - title: Total - minimum: 0 - type: integer - offset: - title: Offset - minimum: 0 - type: integer - default: 0 - count: - title: Count - minimum: 0 - type: integer - additionalProperties: false - _links: - title: PageLinks - required: - - self - - first - - last - type: object - properties: - self: - title: Self - maxLength: 65536 - minLength: 1 - type: string - format: uri - first: - title: First - maxLength: 65536 - minLength: 1 - type: string - format: uri - prev: - title: Prev - maxLength: 65536 - minLength: 1 - type: string - format: uri - next: - title: Next - maxLength: 65536 - minLength: 1 - type: string - format: uri - last: - title: Last - maxLength: 65536 - minLength: 1 - type: string - format: uri - additionalProperties: false - data: - title: Data - type: array - items: - title: Repo - required: - - project_uuid - - url - type: object - properties: - project_uuid: - title: Project Uuid - type: string - format: uuid - url: - title: Url - maxLength: 2083 - minLength: 1 - type: string - format: uri - '422': - description: Validation Error - content: - application/json: - schema: - title: HTTPValidationError - type: object - properties: - detail: - title: Detail - type: array - items: - title: ValidationError - required: - - loc - - msg - - type - type: object - properties: - loc: - title: Location - type: array - items: - type: string - msg: - title: Message - type: string - type: - title: Error Type - type: string - '/repos/projects/{project_uuid}/checkpoints': - get: - tags: - - repository - summary: List Checkpoints - description: Lists commits&tags tree of the project - operationId: simcore_service_webserver.version_control_handlers._list_checkpoints_handler - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - - description: index to the first item to return (pagination) - required: false - schema: - title: Offset - exclusiveMinimum: false - type: integer - description: index to the first item to return (pagination) - default: 0 - name: offset - in: query - - description: maximum number of items to return (pagination) - required: false - schema: - title: Limit - maximum: 50 - minimum: 1 - type: integer - description: maximum number of items to return (pagination) - default: 20 - name: limit - in: query - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Page[Checkpoint]' - required: - - _meta - - _links - - data - type: object - properties: - _meta: - $ref: '#/paths/~1repos~1projects/get/responses/200/content/application~1json/schema/properties/_meta' - _links: - $ref: '#/paths/~1repos~1projects/get/responses/200/content/application~1json/schema/properties/_links' - data: - title: Data - type: array - items: - $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema/properties/data' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - post: - tags: - - repository - summary: Create Checkpoint - operationId: simcore_service_webserver.version_control_handlers._create_checkpoint_handler - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - requestBody: - content: - application/json: - schema: - title: CheckpointNew - required: - - tag - type: object - properties: - tag: - title: Tag - type: string - message: - title: Message - type: string - required: true - responses: - '201': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[Checkpoint]' - type: object - properties: - data: - title: Checkpoint - required: - - id - - checksum - - tag - - message - - parent - - created_at - - url - type: object - properties: - id: - title: Id - exclusiveMinimum: false - type: integer - checksum: - title: Checksum - type: string - tag: - title: Tag - type: string - message: - title: Message - type: string - parent: - title: Parent - exclusiveMinimum: false - type: integer - created_at: - title: Created At - type: string - format: date-time - url: - title: Url - maxLength: 2083 - minLength: 1 - type: string - format: uri - error: - title: Error - required: - - code - - message - type: object - properties: - code: - title: Code - type: integer - message: - title: Message - type: string - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - '/repos/projects/{project_uuid}/checkpoints/HEAD': - get: - tags: - - repository - summary: Gets HEAD (i.e. current) checkpoint - description: Get current commit - operationId: simcore_service_webserver.version_control_handlers._get_checkpoint_handler_head - parameters: - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - '/repos/projects/{project_uuid}/checkpoints/{ref_id}': - get: - tags: - - repository - summary: Get Checkpoint - description: Set ref_id=HEAD to return current commit - operationId: simcore_service_webserver.version_control_handlers._get_checkpoint_handler - parameters: - - description: 'A repository ref (commit, tag or branch)' - required: true - schema: - title: Ref Id - anyOf: - - type: string - format: uuid - - type: string - description: 'A repository ref (commit, tag or branch)' - name: ref_id - in: path - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - patch: - tags: - - repository - summary: Update Checkpoint Annotations - operationId: simcore_service_webserver.version_control_handlers._update_checkpoint_annotations_handler - parameters: - - description: 'A repository ref (commit, tag or branch)' - required: true - schema: - title: Ref Id - anyOf: - - type: string - format: uuid - - type: string - description: 'A repository ref (commit, tag or branch)' - name: ref_id - in: path - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - requestBody: - content: - application/json: - schema: - title: CheckpointAnnotations - type: object - properties: - tag: - title: Tag - type: string - message: - title: Message - type: string - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - '/repos/projects/{project_uuid}/checkpoints/{ref_id}:checkout': - post: - tags: - - repository - summary: Checkout - description: |- - Affect current working copy of the project, i.e. get_project will now return - the check out - operationId: simcore_service_webserver.version_control_handlers._checkout_handler - parameters: - - description: 'A repository ref (commit, tag or branch)' - required: true - schema: - title: Ref Id - anyOf: - - type: string - format: uuid - - type: string - description: 'A repository ref (commit, tag or branch)' - name: ref_id - in: path - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - '/repos/projects/{project_uuid}/checkpoints/{ref_id}/workbench/view': - get: - tags: - - repository - summary: View Project Workbench - description: Returns a view of the workbench for a given project's version - operationId: simcore_service_webserver.version_control_handlers._view_project_workbench_handler - parameters: - - description: 'A repository ref (commit, tag or branch)' - required: true - schema: - title: Ref Id - anyOf: - - type: string - format: uuid - - type: string - description: 'A repository ref (commit, tag or branch)' - name: ref_id - in: path - - description: Project unique identifier - required: true - schema: - title: Project Uuid - type: string - description: Project unique identifier - format: uuid - name: project_uuid - in: path - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[WorkbenchView]' - type: object - properties: - data: - title: WorkbenchView - type: object - properties: - workbench: - title: Workbench - type: object - additionalProperties: - title: Node - required: - - key - - version - - label - - inputs - - outputs - type: object - properties: - key: - title: Key - type: string - version: - title: Version - pattern: \d+\.\d+\.\d+ - type: string - label: - title: Label - type: string - inputs: - title: Inputs - type: object - outputs: - title: Outputs - type: object - default: {} - ui: - title: Ui - type: object - default: {} - description: A view (i.e. read-only and visual) of the project's workbench - error: - $ref: '#/paths/~1repos~1projects~1%7Bproject_uuid%7D~1checkpoints/post/responses/201/content/application~1json/schema/properties/error' - '422': - description: Validation Error - content: - application/json: - schema: - $ref: '#/paths/~1repos~1projects/get/responses/422/content/application~1json/schema' - /activity/status: - get: - operationId: get_status - tags: - - activity - responses: - '200': - description: 'Object containing queuing, CPU and Memory usage/limits information of services' - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - additionalProperties: true - type: object - properties: - stats: - type: object - properties: - cpuUsage: - type: number - minimum: 0 - memoryUsage: - type: number - limits: - type: object - properties: - cpus: - type: number - mem: - type: number - queued: - type: boolean - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - /tags: - get: - tags: - - tag - summary: List Tags - operationId: list_tags - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[list[simcore_service_webserver.tags_handlers.TagGet]]' - type: object - properties: - data: - title: Data - type: array - items: - $ref: '#/paths/~1tags/post/responses/200/content/application~1json/schema/properties/data' - error: - title: Error - post: - tags: - - tag - summary: Create Tag - operationId: create_tag - requestBody: - content: - application/json: - schema: - title: TagCreate - required: - - name - - color - type: object - properties: - name: - title: Name - type: string - description: - title: Description - type: string - color: - title: Color - pattern: '^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$' - type: string - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - title: 'Envelope[TagGet]' - type: object - properties: - data: - title: TagGet - required: - - id - - name - - color - - accessRights - type: object - properties: - id: - title: Id - exclusiveMinimum: true - type: integer - minimum: 0 - name: - title: Name - type: string - description: - title: Description - type: string - color: - title: Color - type: string - accessRights: - title: TagAccessRights - required: - - read - - write - - delete - type: object - properties: - read: - title: Read - type: boolean - write: - title: Write - type: boolean - delete: - title: Delete - type: boolean - error: - title: Error - '/tags/{tag_id}': - delete: - tags: - - tag - summary: Delete Tag - operationId: delete_tag - parameters: - - required: true - schema: - title: Tag Id - type: integer - name: tag_id - in: path - responses: - '204': - description: Successful Response - patch: - tags: - - tag - summary: Update Tag - operationId: update_tag - parameters: - - required: true - schema: - title: Tag Id - type: integer - name: tag_id - in: path - requestBody: - content: - application/json: - schema: - title: TagUpdate - type: object - properties: - name: - title: Name - type: string - description: - title: Description - type: string - color: - title: Color - pattern: '^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$' - type: string - additionalProperties: false - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1tags/post/responses/200/content/application~1json/schema' - /publications/service-submission: - post: - tags: - - publication - summary: Submits a new service candidate - operationId: service_submission - requestBody: - content: - multipart/form-data: - schema: - type: object - required: - - metadata - properties: - metadata: - type: string - format: binary - attachment: - type: string - format: binary - responses: - '204': - description: Submission has been registered - default: - $ref: '#/components/responses/DefaultErrorResponse' - /catalog/dags: - get: - tags: - - catalog - operationId: list_catalog_dags - responses: - '200': - description: List of catalog dags - '422': - description: Validation Error - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - tags: - - catalog - summary: Creates a new dag in catalog - operationId: create_catalog_dag - requestBody: - content: - application/json: - schema: - type: object - additionalProperties: true - responses: - '201': - description: The dag was successfully created - '422': - description: Validation Error - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/catalog/dags/{dag_id}': - parameters: - - in: path - name: dag_id - required: true - schema: - title: Dag Id - type: integer - put: - tags: - - catalog - summary: Replaces a dag in catalog - operationId: replace_catalog_dag - requestBody: - content: - application/json: - schema: - type: object - additionalProperties: true - responses: - '200': - description: The dag was replaced in catalog - '422': - description: Validation Error - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - catalog - summary: Deletes an existing dag - operationId: delete_catalog_dag - responses: - '204': - description: Successfully deleted - '422': - description: Validation Error - /catalog/services: - get: - tags: - - catalog - summary: List Services - operationId: list_services_handler - responses: - '200': - description: Returns list of services from the catalog - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/catalog/services/{service_key}/{service_version}': - parameters: - - in: path - name: service_key - required: true - schema: - title: Service key - type: string - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - - in: path - name: service_version - required: true - schema: - title: Service version - type: string - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - get: - tags: - - catalog - summary: Get Service - operationId: get_service_handler - responses: - '200': - description: Returns service - default: - $ref: '#/components/responses/DefaultErrorResponse' - patch: - tags: - - catalog - summary: Update Service - operationId: update_service_handler - requestBody: - content: - application/json: - schema: - type: object - additionalProperties: true - responses: - '200': - description: Returns modified service - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/catalog/services/{service_key}/{service_version}/inputs': - get: - tags: - - catalog - operationId: list_service_inputs_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - responses: - '200': - content: - application/json: - schema: - additionalProperties: false - description: Metadata on a service input port - example: - defaultValue: 0 - description: Time to wait before completion - displayOrder: 2 - keyId: input_2 - label: Sleep Time - type: number - unit: second - unitLong: seconds - unitShort: sec - widget: - details: - minHeight: 1 - type: TextArea - properties: - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - description: use this to numerically sort the properties for display - title: Displayorder - type: number - fileToKeyMap: - description: Place the data associated with the named keys in files - title: Filetokeymap - type: object - keyId: - description: Unique name identifier for this input - pattern: '^[-_a-zA-Z0-9]+$' - title: Keyid - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - pattern: '^(number|integer|boolean|string|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - unitLong: - description: 'Long name of the unit, if available' - title: Unitlong - type: string - unitShort: - description: 'Short name for the unit, if available' - title: Unitshort - type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - x-exclusiveMinimum: 0 - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - displayOrder - - label - - description - - type - - keyId - title: ServiceInputApiOut - type: object - description: Successful Response - '422': - content: - application/json: - schema: - properties: - detail: - items: - properties: - loc: - items: - type: string - title: Location - type: array - msg: - title: Message - type: string - type: - title: Error Type - type: string - required: - - loc - - msg - - type - title: ValidationError - type: object - title: Detail - type: array - title: HTTPValidationError - type: object - description: Validation Error - summary: List Service Inputs - '/catalog/services/{service_key}/{service_version}/inputs/{input_key}': - get: - tags: - - catalog - operationId: get_service_input_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - - in: path - name: input_key - required: true - schema: - pattern: '^[-_a-zA-Z0-9]+$' - title: Input Key - type: string - responses: - '200': - content: - application/json: - schema: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/200/content/application~1json/schema' - description: Successful Response - '422': - content: - application/json: - schema: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' - description: Validation Error - summary: Get Service Input - '/catalog/services/{service_key}/{service_version}/inputs:match': - get: - tags: - - catalog - description: 'Filters inputs of this service that match a given service output. Returns compatible input ports of the service, provided an output port of a connected node.' - operationId: get_compatible_inputs_given_source_output_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - - in: query - name: fromService - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Fromservice - type: string - - in: query - name: fromVersion - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Fromversion - type: string - - in: query - name: fromOutput - required: true - schema: - pattern: '^[-_a-zA-Z0-9]+$' - title: Fromoutput - type: string - responses: - '200': - content: - application/json: - schema: - items: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Response Get Compatible Inputs Given Source Output Catalog Services Service Key Service Version Inputs Match Get - type: array - description: Successful Response - '422': - content: - application/json: - schema: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' - description: Validation Error - summary: Get Compatible Inputs Given Source Output - '/catalog/services/{service_key}/{service_version}/outputs': - get: - tags: - - catalog - operationId: list_service_outputs_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - responses: - '200': - content: - application/json: - schema: - items: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1outputs~1%7Boutput_key%7D/get/responses/200/content/application~1json/schema' - title: Response List Service Outputs Catalog Services Service Key Service Version Outputs Get - type: array - description: Successful Response - '422': - content: - application/json: - schema: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' - description: Validation Error - summary: List Service Outputs - '/catalog/services/{service_key}/{service_version}/outputs/{output_key}': - get: - tags: - - catalog - operationId: get_service_output_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - - in: path - name: output_key - required: true - schema: - pattern: '^[-_a-zA-Z0-9]+$' - title: Output Key - type: string - responses: - '200': - content: - application/json: - schema: - additionalProperties: false - description: Metadata on a service input or output port - example: - defaultValue: 0 - description: Time to wait before completion - displayOrder: 2 - keyId: input_2 - label: Sleep Time - type: number - unit: second - unitLong: seconds - unitShort: sec - widget: - details: - minHeight: 1 - type: TextArea - properties: - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string - displayOrder: - description: use this to numerically sort the properties for display - title: Displayorder - type: number - fileToKeyMap: - description: Place the data associated with the named keys in files - title: Filetokeymap - type: object - keyId: - description: Unique name identifier for this input - pattern: '^[-_a-zA-Z0-9]+$' - title: Keyid - type: string - label: - description: short name for the property - example: Age - title: Label - type: string - type: - description: data type expected on this input glob matching for data type is allowed - pattern: '^(number|integer|boolean|string|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string - unit: - description: 'Units, when it refers to a physical quantity' - title: Unit - type: string - unitLong: - description: 'Long name of the unit, if available' - title: Unitlong - type: string - unitShort: - description: 'Short name for the unit, if available' - title: Unitshort - type: string - widget: - allOf: - - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/200/content/application~1json/schema/properties/widget/allOf/0' - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - displayOrder - - label - - description - - type - - keyId - title: ServiceOutputApiOut - type: object - description: Successful Response - '422': - content: - application/json: - schema: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' - description: Validation Error - summary: Get Service Output - '/catalog/services/{service_key}/{service_version}/outputs:match': - get: - tags: - - catalog - description: Filters outputs of this service that match a given service input. Returns compatible output port of a connected node for a given input - operationId: get_compatible_outputs_given_target_input_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - - in: query - name: toService - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Toservice - type: string - - in: query - name: toVersion - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Toversion - type: string - - in: query - name: toInput - required: true - schema: - pattern: '^[-_a-zA-Z0-9]+$' - title: Toinput - type: string - responses: - '200': - content: - application/json: - schema: - items: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Response Get Compatible Outputs Given Target Input Catalog Services Service Key Service Version Outputs Match Get - type: array - description: Successful Response - '422': - content: - application/json: - schema: - $ref: '#/paths/~1catalog~1services~1%7Bservice_key%7D~1%7Bservice_version%7D~1inputs/get/responses/422/content/application~1json/schema' - description: Validation Error - summary: Get Compatible Outputs Given Target Input - '/catalog/services/{service_key}/{service_version}/resources': - get: - tags: - - catalog - description: Returns the service default resources - operationId: get_service_resources_handler - parameters: - - in: path - name: service_key - required: true - schema: - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Service Key - type: string - - in: path - name: service_version - required: true - schema: - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Service Version - type: string - responses: - '200': - description: Successful Response - content: - application/json: - schema: - $ref: '#/paths/~1projects~1%7Bproject_id%7D~1nodes~1%7Bnode_id%7D~1resources/get/responses/200/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/clusters:ping': - post: - summary: test connectivity with cluster - operationId: ping_cluster_handler - tags: - - cluster - requestBody: - required: true - description: the cluster endpoint/authentication to test - content: - application/json: - schema: - type: object - properties: - endpoint: - type: string - minLength: 1 - maxLength: 65536 - authentication: - description: Dask gateway authentication - anyOf: - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/0' - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/1' - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/2' - required: - - endpoint - - authentication - additionalProperties: false - responses: - '204': - description: connectivity is OK - default: - $ref: '#/components/responses/DefaultErrorResponse' - /clusters: - get: - summary: List my clusters - operationId: list_clusters_handler - tags: - - cluster - responses: - '200': - description: list of the clusters I have access to - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - $ref: '#/paths/~1clusters/post/responses/201/content/application~1json/schema/properties/data' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - post: - summary: Create a new cluster - operationId: create_cluster_handler - tags: - - cluster - requestBody: - required: true - description: the cluster to create - content: - application/json: - schema: - type: object - properties: - name: - description: the cluster name - type: string - description: - description: the cluster description - type: string - type: - description: the cluster type - type: string - enum: - - ON_PREMISE - - AWS - thumbnail: - type: string - endpoint: - type: string - minLength: 1 - maxLength: 65536 - authentication: - description: Dask gateway authentication - anyOf: - - type: object - properties: - type: - type: string - enum: - - simple - default: simple - username: - type: string - password: - type: string - writeOnly: true - required: - - username - - password - additionalProperties: false - - type: object - properties: - type: - type: string - enum: - - kerberos - default: kerberos - additionalProperties: false - - type: object - properties: - type: - type: string - enum: - - jupyterhub - default: jupyterhub - api_token: - type: string - required: - - api_token - additionalProperties: false - required: - - name - - type - - endpoint - - authentication - additionalProperties: false - responses: - '201': - description: cluster created - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - id: - description: the cluster id - type: integer - minimum: 1 - name: - description: the cluster name - type: string - description: - description: the cluster description - type: string - type: - description: the cluster type - type: string - enum: - - ON_PREMISE - - AWS - owner: - description: the cluster owner group - type: integer - minimum: 1 - thumbnail: - type: string - format: uri - endpoint: - type: string - minLength: 1 - maxLength: 65536 - authentication: - description: Dask gateway authentication - anyOf: - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/0' - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/1' - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/2' - accessRights: - type: object - description: object containing the GroupID as key and read/write/execution permissions as value - x-patternProperties: - ^\S+$: - $ref: '#/paths/~1clusters~1%7Bcluster_id%7D/patch/requestBody/content/application~1json/schema/properties/accessRights/x-patternProperties/%5E%5CS%2B%24' - required: - - id - - name - - accessRights - - endpoint - - authentication - additionalProperties: false - example: - - id: 1 - name: AWS cluster - type: AWS - endpoint: 'https://registry.osparc-development.fake.dev' - authentication: - type: simple - username: someuser - password: somepassword - owner: 2 - accessRights: - '2': - read: true - write: true - delete: true - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/clusters/{cluster_id}': - parameters: - - name: cluster_id - in: path - required: true - schema: - type: string - get: - tags: - - cluster - summary: Gets one cluster - operationId: get_cluster_handler - responses: - '200': - description: got cluster - content: - application/json: - schema: - $ref: '#/paths/~1clusters/post/responses/201/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - patch: - summary: Update one cluster - operationId: update_cluster_handler - tags: - - cluster - requestBody: - required: true - description: the cluster to update - content: - application/json: - schema: - type: object - properties: - name: - description: the cluster name - type: string - description: - description: the cluster description - type: string - type: - description: the cluster type - type: string - enum: - - ON_PREMISE - - AWS - owner: - description: the cluster owner group - type: integer - minimum: 1 - thumbnail: - type: string - endpoint: - type: string - minLength: 1 - maxLength: 65536 - authentication: - description: Dask gateway authentication - anyOf: - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/0' - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/1' - - $ref: '#/paths/~1clusters/post/requestBody/content/application~1json/schema/properties/authentication/anyOf/2' - accessRights: - type: object - description: object containing the GroupID as key and read/write/execution permissions as value - x-patternProperties: - ^\S+$: - description: defines acesss rights for the cluster - type: object - properties: - read: - type: boolean - description: allows usage of the cluster - write: - type: boolean - description: allows modification of the cluster - delete: - type: boolean - description: allows deletion of the cluster - required: - - read - - write - - delete - additionalProperties: false - responses: - '200': - description: the modified cluster - content: - application/json: - schema: - $ref: '#/paths/~1clusters/post/responses/201/content/application~1json/schema' - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - tags: - - cluster - summary: Deletes one cluster - operationId: delete_cluster_handler - responses: - '204': - description: cluster has been successfully deleted - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/clusters/{cluster_id}:ping': - parameters: - - name: cluster_id - in: path - required: true - schema: - type: string - post: - summary: test connectivity with cluster - operationId: ping_cluster_cluster_id_handler - tags: - - cluster - responses: - '204': - description: connectivity is OK - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/clusters/{cluster_id}/details': - parameters: - - name: cluster_id - in: path - required: true - schema: - type: string - get: - tags: - - cluster - summary: Gets one cluster details - operationId: get_cluster_details_handler - responses: - '200': - description: got cluster - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - scheduler: - type: object - description: contains information about the cluster scheduler - cluster: - type: object - description: contains information about the cluster workers - dashboardLink: - type: string - minLength: 1 - maxLength: 65536 - description: contains the link to the cluster dashboard - required: - - scheduler - - cluster - - dashboardLink - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - /tasks: - get: - operationId: list_tasks - tags: - - tasks - responses: - '200': - description: Returns the list of active tasks (running and/or done) - content: - application/json: - schema: - type: array - items: - $ref: '#/paths/~1projects/post/responses/202/content/application~1json/schema' - '/tasks/{task_id}': - parameters: - - name: task_id - in: path - required: true - schema: - type: string - get: - operationId: get_task_status - tags: - - tasks - responses: - '200': - description: Returns the task status - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - task_progress - - done - - started - properties: - task_progress: - type: number - minimum: 0 - maximum: 1 - done: - type: boolean - started: - type: string - pattern: '\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z' - example: '2018-07-01T11:13:43Z' - error: - nullable: true - default: null - default: - $ref: '#/components/responses/DefaultErrorResponse' - delete: - operationId: cancel_and_delete_task - description: Aborts and remove the task - tags: - - tasks - responses: - '204': - description: Task was successfully aborted - default: - $ref: '#/components/responses/DefaultErrorResponse' - '/tasks/{task_id}/result': - parameters: - - name: task_id - in: path - required: true - schema: - type: string - get: - operationId: get_task_result - tags: - - tasks - responses: - 2XX: - description: Retrieve the task result and returns directly its HTTP code - default: - $ref: '#/components/responses/DefaultErrorResponse' - /viewers: - get: - operationId: list_viewers - parameters: - - in: query - name: file_type - required: false - schema: - title: File Type - description: Filters list to viewers supporting that filetype - type: string - responses: - '200': - content: - application/json: - schema: - properties: - data: - items: - $ref: '#/paths/~1viewers~1default/get/responses/200/content/application~1json/schema/properties/data' - type: array - required: - - data - title: ViewerListEnveloped - type: object - description: Successful Response - summary: Lists viewers - description: Lists all publicaly available viewers. Notice that this might contain multiple services for the same filetype - tags: - - viewer - /viewers/default: - get: - operationId: list_default_viewers - parameters: - - in: query - name: file_type - required: false - schema: - title: File Type - description: Filters list to viewers supporting that filetype - type: string - responses: - '200': - content: - application/json: - schema: - properties: - data: - properties: - file_type: - title: File Type - type: string - description: Identifier for the file type - view_url: - description: 'Base url to execute viewer. Needs appending file_size,[file_name] and download_link as query parameters' - format: uri - maxLength: 2083 - minLength: 1 - title: Redirection Url - type: string - title: - description: Short formatted label with name and version of the viewer - title: Viewer Title - type: string - required: - - file_type - - viewer_title - - view_url - title: Viewer - type: object - required: - - data - title: ViewerEnveloped - type: object - description: Successful Response - summary: List Default Viewers - description: Lists a default viewer for each supported filetype. Only publicaly available viewers. - tags: - - viewer -components: - responses: - DefaultErrorResponse: - description: Default http error response body - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - nullable: true - properties: - logs: - description: log messages - type: array - items: - type: object - properties: - level: - description: log level - type: string - default: INFO - enum: - - DEBUG - - WARNING - - INFO - - ERROR - message: - description: 'log message. If logger is USER, then it MUST be human readable' - type: string - logger: - description: name of the logger receiving this message - type: string - required: - - message - example: - message: 'Hi there, Mr user' - level: INFO - logger: user-logger - errors: - description: errors metadata - type: array - items: - type: object - required: - - code - - message - properties: - code: - type: string - description: Typically the name of the exception that produced it otherwise some known error code - message: - type: string - description: Error message specific to this item - resource: - type: string - description: API resource affected by this error - field: - type: string - description: Specific field within the resource - status: - description: HTTP error code - type: integer - example: - BadRequestError: - logs: - - message: Requested information is incomplete or malformed - level: ERROR - - message: Invalid email and password - level: ERROR - logger: USER - errors: - - code: InvalidEmail - message: Email is malformed - field: email - - code: UnsavePassword - message: Password is not secure - field: pasword - status: 400 diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} From 0af64574ec21c5f5806841bfa3530189c7765384 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 15:37:38 +0100 Subject: [PATCH 14/34] minor - adding comments --- packages/pytest-simcore/src/pytest_simcore/schemas.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/pytest-simcore/src/pytest_simcore/schemas.py b/packages/pytest-simcore/src/pytest_simcore/schemas.py index fe0ce787605..743f88d2b00 100644 --- a/packages/pytest-simcore/src/pytest_simcore/schemas.py +++ b/packages/pytest-simcore/src/pytest_simcore/schemas.py @@ -106,8 +106,8 @@ def _run_diff(schema_lhs: dict, schema_rhs: dict) -> subprocess.CompletedProcess schema_rhs_path = tmpdir / "schema_rhs.json" schema_rhs_path.write_text(json.dumps(schema_rhs, indent=1)) - # NOTE: When debugging the differences, as of now both schemas comes from - # pydantic model, it is easy to visually compare the difference. To do so, + # NOTE: When debugging the differences, as of now both schemas come from + # pydantic model, now it is possible to visually compare the difference. To do so, # just dereference the current pydantic schema. Example can be seen here: # /osparc-simcore/api/specs/webserver/scripts/openapi_project.py From 38ed2c7b86ebeb51de4dd80c971730b3a5bd8674 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 16:01:36 +0100 Subject: [PATCH 15/34] fix - removing old project-v0.0.1.json --- ...-meta-v0.0.1-pydantic-converted-clean.yaml | 2 ++ .../node-meta-v0.0.1-pydantic-converted.yaml | 6 ++++++ ...oject-v0.0.1-pydantic-converted-clean.yaml | 13 ++++--------- .../project-v0.0.1-pydantic-converted.yaml | 19 ++++++++++++------- .../api/v0/openapi.yaml | 6 ++++++ .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../api/v0/openapi.yaml | 6 ++++-- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../api/v0/openapi.yaml | 6 ++++-- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../projects/project_models.py | 8 ++++---- 14 files changed, 81 insertions(+), 45 deletions(-) diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index 1479593ad2f..d5d53587ca6 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -324,6 +324,7 @@ properties: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -489,6 +490,7 @@ properties: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index 26f1abdf176..f6ddc5cc80e 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -232,6 +232,7 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -422,6 +423,7 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -674,6 +676,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -745,6 +748,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -881,6 +885,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -1065,6 +1070,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index 48528406b18..eb56e3411ee 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,10 +141,8 @@ properties: properties: value: allOf: - - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational workflow\n\ + \n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED @@ -714,11 +712,8 @@ properties: properties: currentStatus: allOf: - - description: 'State of execution of a project''s computational - workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational\ + \ workflow\n\n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index 0286294827c..e0b090c1b0f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,7 +1003,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1042,7 +1043,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1510,7 +1512,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1687,7 +1690,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1791,7 +1795,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index 258cd733e61..da6d4fb1a53 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -463,6 +463,7 @@ paths: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -625,6 +626,7 @@ paths: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -1156,6 +1158,7 @@ paths: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -1318,6 +1321,7 @@ paths: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -3263,6 +3267,7 @@ components: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -3425,6 +3430,7 @@ components: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index ec4665f1f6e..e687f912630 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,7 +1302,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1855,7 +1856,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", 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 ff10cf5e982..1fcb6d82311 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 @@ -2572,7 +2572,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -3125,7 +3126,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 31ced27e659..522902b732f 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/web/server/src/simcore_service_webserver/projects/project_models.py b/services/web/server/src/simcore_service_webserver/projects/project_models.py index ed1703ab80a..b7a485e2038 100644 --- a/services/web/server/src/simcore_service_webserver/projects/project_models.py +++ b/services/web/server/src/simcore_service_webserver/projects/project_models.py @@ -1,6 +1,6 @@ import json from enum import Enum -from typing import Any, Dict, Optional, Tuple +from typing import Any, Optional from aiohttp import web from aiopg.sa.result import RowProxy @@ -10,7 +10,7 @@ from .._resources import resources # TODO: extend -ProjectDict = Dict[str, Any] +ProjectDict = dict[str, Any] ProjectProxy = RowProxy @@ -31,7 +31,7 @@ def to_project_type_db(cls, api_type: "ProjectTypeAPI") -> Optional[ProjectType] def setup_projects_model_schema(app: web.Application): # NOTE: inits once per app # FIXME: schemas are hard-coded to api/V0!!! - with resources.stream("api/v0/schemas/project-v0.0.1.json") as fh: + with resources.stream("api/v0/schemas/project-v0.0.1-pydantic.json") as fh: project_schema = json.load(fh) if app.get(APP_JSONSCHEMA_SPECS_KEY) is None: @@ -43,7 +43,7 @@ def setup_projects_model_schema(app: web.Application): return app[APP_JSONSCHEMA_SPECS_KEY]["projects"] -__all__: Tuple[str, ...] = ( +__all__: tuple[str, ...] = ( "ProjectDict", "ProjectProxy", "setup_projects_model_schema", From c0831c3a52d15cebc53e92add86c65988e60c788 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 16:45:07 +0100 Subject: [PATCH 16/34] removing old json schemas --- .../node-meta-v0.0.1-converted.yaml | 348 -------- .../schemas/depreciated/node-meta-v0.0.1.json | 477 ----------- .../depreciated/project-v0.0.1-converted.yaml | 558 ------------- .../schemas/depreciated/project-v0.0.1.json | 768 ------------------ 4 files changed, 2151 deletions(-) delete mode 100644 api/specs/common/schemas/depreciated/node-meta-v0.0.1-converted.yaml delete mode 100644 api/specs/common/schemas/depreciated/node-meta-v0.0.1.json delete mode 100644 api/specs/common/schemas/depreciated/project-v0.0.1-converted.yaml delete mode 100644 api/specs/common/schemas/depreciated/project-v0.0.1.json diff --git a/api/specs/common/schemas/depreciated/node-meta-v0.0.1-converted.yaml b/api/specs/common/schemas/depreciated/node-meta-v0.0.1-converted.yaml deleted file mode 100644 index 6a506cf7107..00000000000 --- a/api/specs/common/schemas/depreciated/node-meta-v0.0.1-converted.yaml +++ /dev/null @@ -1,348 +0,0 @@ -title: simcore node -description: Description of a simcore node 'class' with input and output -type: object -additionalProperties: false -required: - - key - - version - - type - - name - - description - - authors - - contact - - inputs - - outputs -properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - example: simcore/services/comp/itis/sleeper - integration-version: - type: string - description: integration version number - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - example: 1.0.0 - version: - type: string - description: service version number - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - example: 1.0.0 - type: - type: string - description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: short, human readable name for the node - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: >- - https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png - badges: - type: array - items: - type: object - required: - - name - - image - - url - additionalProperties: false - properties: - name: - type: string - description: Name of the subject - example: travis-ci - image: - type: string - description: Url to the shield - example: >- - https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master - url: - type: string - description: Link to status - example: >- - https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: - build, test and pushing images' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type - authors: - type: array - minItems: 1 - items: - type: object - required: - - name - - email - additionalProperties: false - properties: - name: - type: string - description: Name of the author - example: Sun Bak - email: - description: Email address - type: string - format: email - example: sun@sense.eight - affiliation: - description: Affiliation of the author - type: string - example: Sense8 - contact: - type: string - format: email - description: email to correspond to the authors about the node - example: lab@net.flix - inputs: - type: object - description: definition of the inputs of this node - x-patternProperties: - ^[-_a-zA-Z0-9]+$: - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: >- - DEPRECATED: new display order is taken from the item position. - This property will be removed. - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - description: >- - data type expected on this input glob matching for data type is - allowed - example: - - number - - boolean - - data:*/* - - data:text/* - - data:[image/jpeg,image/png] - - data:application/json - - >- - data:application/json;schema=https://my-schema/not/really/schema.json - - data:application/vnd.ms-excel - - data:text/plain - - data:application/hdf5 - - data:application/edu.ucdavis@ceclancy.xyz - contentSchema: - title: Content Schema - description: >- - jsonschema of the content at this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: Units of this input value, if a physical quantity - type: string - widget: - description: >- - custom widget to use instead of the default one determined from - the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true - outputs: - type: object - description: definition of the outputs of this node - x-patternProperties: - ^[-_a-zA-Z0-9]+$: - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$ - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - data:application/json - - 'data:application/vnd.ms-excel ' - - data:text/plain - - data:application/hdf5 - contentSchema: - title: Content Schema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - description: >- - Place the data stored in the named files and store it in the - locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: Units of the output value, if a physical quantity - type: string - additionalProperties: true - boot-options: - title: Boot Options - description: >- - Service defined boot options. These get injected in the service as env - variables. - type: object - x-patternProperties: - ^[_a-zA-Z0-9]+$: - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true diff --git a/api/specs/common/schemas/depreciated/node-meta-v0.0.1.json b/api/specs/common/schemas/depreciated/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/api/specs/common/schemas/depreciated/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/api/specs/common/schemas/depreciated/project-v0.0.1-converted.yaml b/api/specs/common/schemas/depreciated/project-v0.0.1-converted.yaml deleted file mode 100644 index 87da6e07177..00000000000 --- a/api/specs/common/schemas/depreciated/project-v0.0.1-converted.yaml +++ /dev/null @@ -1,558 +0,0 @@ -title: simcore project -description: Description of a simcore project -type: object -additionalProperties: false -required: - - uuid - - name - - description - - prjOwner - - accessRights - - creationDate - - lastChangeDate - - thumbnail - - workbench -properties: - uuid: - type: string - format: uuid - description: project unique identifier - example: 07640335-a91f-468c-ab69-a374fa82078d - name: - type: string - description: project name - example: Temporal Distortion Simulator - description: - type: string - description: longer one-line description about the project - example: Dabbling in temporal transitions ... - prjOwner: - type: string - format: email - description: user email - accessRights: - type: object - description: >- - object containing the GroupID as key and read/write/execution permissions - as value - x-patternProperties: - ^\S+$: - type: object - description: the group id - additionalProperties: false - required: - - read - - write - - delete - properties: - read: - type: boolean - description: gives read access - write: - type: boolean - description: gives write access - delete: - type: boolean - description: gives deletion rights - additionalProperties: true - creationDate: - type: string - description: project creation date - pattern: >- - \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - example: '2018-07-01T11:13:43Z' - lastChangeDate: - type: string - description: last save date - pattern: >- - \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - example: '2018-07-01T11:13:43Z' - thumbnail: - type: string - minLength: 0 - maxLength: 2083 - format: uri - description: url of the latest screenshot of the project - example: https://placeimg.com/171/96/tech/grayscale/?0.jpg - workbench: - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - type: object - additionalProperties: false - required: - - key - - version - - label - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - example: - - simcore/services/comp/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - version: - type: string - description: semantic version number of the node - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - example: - - 1.0.0 - - 0.0.1 - label: - type: string - description: The short name of the node - example: - - JupyterLab - progress: - type: number - maximum: 100 - minimum: 0 - description: the node progress value - thumbnail: - minLength: 0 - maxLength: 2083 - format: uri - type: string - description: url of the latest screenshot of the node - example: - - https://placeimg.com/171/96/tech/grayscale/?0.jpg - runHash: - description: >- - the hex digest of the resolved inputs +outputs hash at the time - when the last outputs were generated - type: - - string - - 'null' - example: - - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 - inputs: - type: object - description: values of input properties - patternProperties: - ^[-_a-zA-Z0-9]+$: - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - nodeUuid - - output - properties: - nodeUuid: - type: string - format: uuid - output: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - inputsUnits: - type: object - description: values of input unit - patternProperties: - ^[-_a-zA-Z0-9]+$: - type: string - example: - - kilo-meter - - milli-second - - micro-gram - - kelvin - inputAccess: - description: map with key - access level pairs - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - type: string - enum: - - Invisible - - ReadOnly - - ReadAndWrite - default: ReadAndWrite - example: - - ReadOnly - inputNodes: - type: array - items: - type: string - format: uuid - description: node IDs of where the node is connected to - example: - - nodeUuid1 - - nodeUuid2 - outputs: - default: {} - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - type: object - additionalProperties: false - required: - - store - - path - properties: - store: - type: - - string - - integer - dataset: - type: string - path: - type: string - label: - type: string - eTag: - type: string - - type: object - additionalProperties: false - required: - - downloadLink - properties: - downloadLink: - minLength: 1 - maxLength: 65536 - type: string - format: uri - label: - type: string - - type: array - items: {} - outputNode: - type: boolean - deprecated: true - outputNodes: - type: array - items: - type: string - format: uuid - description: Used in group-nodes. Node IDs of those connected to the output - example: - - nodeUuid1 - - nodeUuid2 - parent: - type: - - 'null' - - string - format: uuid - description: Parent's (group-nodes') node ID s. - example: - - nodeUuid1 - - nodeUuid2 - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - deprecated: true - state: - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: >- - contains the node inputs dependencies if they need to be - computed first - type: array - uniqueItems: true - items: - type: string - format: uuid - currentStatus: - description: the node's current state - default: NOT_STARTED - example: - - RUNNING - - FAILED - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - bootOptions: - title: Boot Options - description: >- - Some services provide alternative parameters to be injected at - boot time. The user selection should be stored here, and it will - overwrite the services's defaults. - type: object - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - additionalProperties: true - ui: - type: object - additionalProperties: true - properties: - workbench: - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - type: object - additionalProperties: false - required: - - position - properties: - position: - type: object - additionalProperties: false - required: - - x - - 'y' - properties: - x: - type: integer - description: The x position - example: - - '12' - 'y': - type: integer - description: The y position - example: - - '15' - marker: - type: object - additionalProperties: false - required: - - color - properties: - color: - type: string - description: Marker's color - example: - - '#FF0000' - - '#0000FF' - additionalProperties: true - slideshow: - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - type: object - additionalProperties: false - required: - - position - properties: - position: - type: integer - description: Slide's position - example: - - 0 - - 2 - instructions: - type: - - string - - 'null' - description: Instructions about what to do in this step - example: - - This is a **sleeper** - - Please, select the config file defined [in this link](asdf) - additionalProperties: true - currentNodeId: - type: string - format: uuid - annotations: - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - type: object - additionalProperties: false - required: - - type - - color - - attributes - properties: - type: - type: string - description: Annotation type - example: - - rect - - text - color: - type: string - description: Annotation's color - example: - - '#FF0000' - - '#0000FF' - attributes: - type: object - description: svg attributes - additionalProperties: true - tags: - type: array - items: - type: integer - classifiers: - type: array - description: Contains the reference to the project classifiers - items: - type: string - example: some:id:to:a:classifier - dev: - type: object - description: object used for development purposes only - state: - title: State - description: Project state - anyOf: - - nullable: true - - title: ProjectState - type: object - additionalProperties: false - properties: - locked: - title: Locked - description: The project lock state - allOf: - - title: ProjectLocked - type: object - additionalProperties: false - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: If locked, the user that owns the lock - allOf: - - title: Owner - type: object - additionalProperties: false - properties: - user_id: - title: User Id - type: integer - description: >- - Owner's identifier when registered in the user's - database table - example: - - 2 - first_name: - title: First Name - description: Owner first name - example: - - John - type: string - last_name: - title: Last Name - description: Owner last name - example: - - Smith - type: string - required: - - user_id - - first_name - - last_name - status: - title: Status - description: The status of the project - enum: - - CLOSED - - CLOSING - - CLONING - - OPENING - - EXPORTING - - OPENED - type: string - required: - - value - - status - state: - title: State - description: The project running state - allOf: - - title: ProjectRunningState - type: object - additionalProperties: false - properties: - value: - title: RunningState - description: An enumeration. - enum: - - UNKNOWN - - NOT_STARTED - - PUBLISHED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - required: - - value - required: - - locked - - state - quality: - type: object - title: Quality - description: Object containing Quality Assessment related data diff --git a/api/specs/common/schemas/depreciated/project-v0.0.1.json b/api/specs/common/schemas/depreciated/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/api/specs/common/schemas/depreciated/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} From 382e7ba213adf2c42ab6ffae568e112bf9d2d9c1 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 16:46:11 +0100 Subject: [PATCH 17/34] adding min lenght to the thumbnail to be back compatible --- .../schemas/openapi-project-generated.yaml | 8 +++-- ...oject-v0.0.1-pydantic-converted-clean.yaml | 15 ++++++---- .../project-v0.0.1-pydantic-converted.yaml | 29 ++++++++----------- .../schemas/project-v0.0.1-pydantic.json | 26 ++++++++--------- .../src/models_library/projects.py | 15 ++++------ .../src/models_library/projects_nodes.py | 6 ++-- .../v0/schemas/project-v0.0.1-pydantic.json | 26 ++++++++--------- .../api/v0/openapi.yaml | 8 ++--- .../v0/schemas/project-v0.0.1-pydantic.json | 26 ++++++++--------- .../api/v0/openapi.yaml | 8 ++--- .../v0/schemas/project-v0.0.1-pydantic.json | 26 ++++++++--------- 11 files changed, 94 insertions(+), 99 deletions(-) diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index 7091cfb4640..dbd7059a54d 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -177,7 +177,7 @@ components: thumbnail: title: Thumbnail maxLength: 2083 - minLength: 1 + minLength: 0 type: string description: url of the latest screenshot of the node format: uri @@ -492,8 +492,10 @@ components: - FAILED - ABORTED type: string - description: "State of execution of a project's computational workflow\n\n \ - \ SEE StateType for task state\n " + description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index eb56e3411ee..527c8a3484f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,8 +141,10 @@ properties: properties: value: allOf: - - description: "State of execution of a project's computational workflow\n\ - \n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED @@ -712,8 +714,11 @@ properties: properties: currentStatus: allOf: - - description: "State of execution of a project's computational\ - \ workflow\n\n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational + workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED @@ -752,7 +757,7 @@ properties: - https://placeimg.com/171/96/tech/grayscale/?0.jpg format: uri maxLength: 2083 - minLength: 1 + minLength: 0 title: Thumbnail type: string version: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index e0b090c1b0f..96e7800ca1d 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -20,8 +20,8 @@ properties: thumbnail: title: Thumbnail description: url of the project thumbnail - minLength: 0 maxLength: 2083 + minLength: 0 format: uri type: string example: https://placeimg.com/171/96/tech/grayscale/?0.jpg @@ -81,10 +81,10 @@ properties: thumbnail: title: Thumbnail description: url of the latest screenshot of the node + maxLength: 2083 + minLength: 0 example: - https://placeimg.com/171/96/tech/grayscale/?0.jpg - minLength: 1 - maxLength: 2083 format: uri type: string runHash: @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,8 +1003,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1043,8 +1042,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1105,10 +1103,10 @@ definitions: thumbnail: title: Thumbnail description: url of the latest screenshot of the node + maxLength: 2083 + minLength: 0 example: - https://placeimg.com/171/96/tech/grayscale/?0.jpg - minLength: 1 - maxLength: 2083 format: uri type: string runHash: @@ -1512,8 +1510,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1690,8 +1687,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1795,8 +1791,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 522902b732f..8231d515779 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 0, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 6675a08d065..4f116877bec 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -7,7 +7,7 @@ from typing import Any, Optional from uuid import UUID -from pydantic import BaseModel, EmailStr, Extra, Field, HttpUrl, constr, validator +from pydantic import BaseModel, EmailStr, Extra, Field, constr, validator from .basic_regex import DATE_RE, UUID_RE_BASE from .projects_access import AccessRights, GroupIDStr @@ -36,14 +36,6 @@ class ProjectType(str, Enum): STANDARD = "STANDARD" -class HttpUrlWithCustomLength(HttpUrl): - # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to update this. - # We override the default min_length=1 from parent class to min_length=0 - @classmethod - def __modify_schema__(cls, field_schema): - field_schema.update(minLength=0, maxLength=2083, format="uri") - - class BaseProjectModel(BaseModel): # Description of the project uuid: ProjectID = Field( @@ -62,10 +54,13 @@ class BaseProjectModel(BaseModel): description="longer one-line description about the project", examples=["Dabbling in temporal transitions ..."], ) - thumbnail: Optional[HttpUrlWithCustomLength] = Field( + thumbnail: Optional[str] = Field( ..., description="url of the project thumbnail", examples=["https://placeimg.com/171/96/tech/grayscale/?0.jpg"], + min_length=0, + max_length=2083, + format="uri", ) creation_date: datetime = Field(...) diff --git a/packages/models-library/src/models_library/projects_nodes.py b/packages/models-library/src/models_library/projects_nodes.py index f661319d66c..c48c7e17f46 100644 --- a/packages/models-library/src/models_library/projects_nodes.py +++ b/packages/models-library/src/models_library/projects_nodes.py @@ -9,7 +9,6 @@ BaseModel, Extra, Field, - HttpUrl, Json, StrictBool, StrictFloat, @@ -122,10 +121,13 @@ class Node(BaseModel): progress: Optional[float] = Field( None, ge=0, le=100, description="the node progress value" ) - thumbnail: Optional[HttpUrl] = Field( + thumbnail: Optional[str] = Field( None, description="url of the latest screenshot of the node", examples=["https://placeimg.com/171/96/tech/grayscale/?0.jpg"], + min_length=0, + max_length=2083, + format="uri", ) # RUN HASH diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..8231d515779 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 0, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index e687f912630..6eb6bec08af 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,8 +1302,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1856,8 +1855,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1895,7 +1893,7 @@ components: - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' format: uri maxLength: 2083 - minLength: 1 + minLength: 0 title: Thumbnail type: string version: diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..8231d515779 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 0, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", 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 1fcb6d82311..12b5d24214d 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 @@ -2572,8 +2572,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -3126,8 +3125,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -3165,7 +3163,7 @@ paths: - 'https://placeimg.com/171/96/tech/grayscale/?0.jpg' format: uri maxLength: 2083 - minLength: 1 + minLength: 0 title: Thumbnail type: string version: diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 522902b732f..8231d515779 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 0, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", + "maxLength": 2083, + "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], - "minLength": 1, - "maxLength": 2083, "format": "uri", "type": "string" }, @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", From 487f4a90bfa8609d13d772cbb4267ea47536d80f Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Tue, 14 Mar 2023 17:21:52 +0100 Subject: [PATCH 18/34] testing changes of TextArea that is doing problems in director v0 --- .../node-meta-v0.0.1-pydantic-converted-clean.yaml | 2 -- .../schemas/node-meta-v0.0.1-pydantic-converted.yaml | 6 ------ .../common/schemas/node-meta-v0.0.1-pydantic.json | 6 ------ .../common/schemas/openapi-node-meta-generated.yaml | 2 -- .../models-library/src/models_library/services_ui.py | 10 +++++++++- .../src/simcore_service_director/api/v0/openapi.yaml | 6 ------ .../api/v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ------ .../api/v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ------ .../api/v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ------ 9 files changed, 9 insertions(+), 41 deletions(-) diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index d5d53587ca6..1479593ad2f 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -324,7 +324,6 @@ properties: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -490,7 +489,6 @@ properties: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index f6ddc5cc80e..26f1abdf176 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -232,7 +232,6 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -423,7 +422,6 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -676,7 +674,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -748,7 +745,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -885,7 +881,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -1070,7 +1065,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index 46fde614c4b..ed219a58b63 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -351,10 +351,8 @@ components: properties: minHeight: title: Minheight - exclusiveMinimum: true type: integer description: minimum Height of the textarea - minimum: 0 additionalProperties: false ValidationError: title: ValidationError diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index 2933c09a212..c95fb48d1f0 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -10,8 +10,16 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" +class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): + # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this + # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 + @classmethod + def __modify_schema__(cls, field_schema): + field_schema.pop("exclusiveMinimum", None) + + class TextArea(BaseModel): - min_height: PositiveInt = Field( + min_height: PositiveIntWithExclusiveMinimumRemoved = Field( ..., alias="minHeight", description="minimum Height of the textarea" ) diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index da6d4fb1a53..258cd733e61 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -463,7 +463,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -626,7 +625,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -1158,7 +1156,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -1321,7 +1318,6 @@ paths: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -3267,7 +3263,6 @@ components: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -3430,7 +3425,6 @@ components: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, From 29d89bea5212510a355071264d726f442bc7453c Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 15 Mar 2023 06:54:30 +0100 Subject: [PATCH 19/34] removing changes from director v0 - we should not touch him --- Makefile | 2 +- ...-meta-v0.0.1-pydantic-converted-clean.yaml | 2 + .../node-meta-v0.0.1-pydantic-converted.yaml | 6 + .../schemas/node-meta-v0.0.1-pydantic.json | 6 + .../schemas/openapi-node-meta-generated.yaml | 2 + .../src/models_library/services_ui.py | 10 +- services/director/Dockerfile | 4 +- .../api/v0/openapi.yaml | 2242 +++++--------- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 1817 ----------- .../api/v0/schemas/node-meta-v0.0.1.json | 477 +++ .../v0/schemas/project-v0.0.1-pydantic.json | 2724 ----------------- .../api/v0/schemas/project-v0.0.1.json | 768 +++++ .../src/simcore_service_director/config.py | 2 +- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 + .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 + 15 files changed, 2018 insertions(+), 6056 deletions(-) delete mode 100644 services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json create mode 100644 services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json create mode 100644 services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json diff --git a/Makefile b/Makefile index 0c444019a87..eb2835a0933 100644 --- a/Makefile +++ b/Makefile @@ -508,7 +508,7 @@ new-service: .venv ## Bakes a new project from cookiecutter-simcore-pyservice an openapi-specs: ## bundles and validates openapi specifications and schemas of ALL service's API @$(MAKE_C) services/web/server $@ @$(MAKE_C) services/storage $@ - @$(MAKE_C) services/director $@ + .PHONY: settings-schema.json settings-schema.json: ## [container] dumps json-schema settings of all services diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index 1479593ad2f..d5d53587ca6 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -324,6 +324,7 @@ properties: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -489,6 +490,7 @@ properties: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index 26f1abdf176..f6ddc5cc80e 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -232,6 +232,7 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -422,6 +423,7 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -674,6 +676,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -745,6 +748,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -881,6 +885,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -1065,6 +1070,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index ed219a58b63..46fde614c4b 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -351,8 +351,10 @@ components: properties: minHeight: title: Minheight + exclusiveMinimum: true type: integer description: minimum Height of the textarea + minimum: 0 additionalProperties: false ValidationError: title: ValidationError diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index c95fb48d1f0..2933c09a212 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -10,16 +10,8 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" -class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): - # As we are trying to match this Pydantic model to a historical json schema "project-v0.0.1" we need to remove this - # Pydantic does not support exclusiveMinimum boolean https://github.com/pydantic/pydantic/issues/4108 - @classmethod - def __modify_schema__(cls, field_schema): - field_schema.pop("exclusiveMinimum", None) - - class TextArea(BaseModel): - min_height: PositiveIntWithExclusiveMinimumRemoved = Field( + min_height: PositiveInt = Field( ..., alias="minHeight", description="minimum Height of the textarea" ) diff --git a/services/director/Dockerfile b/services/director/Dockerfile index e7d1bfc4e10..4180b0f85f9 100644 --- a/services/director/Dockerfile +++ b/services/director/Dockerfile @@ -90,8 +90,8 @@ RUN pip --no-cache-dir install -r /build/services/director/requirements/_base.tx # FIXME: # necessary to prevent duplicated files. # Will be removed when director is refactored using cookiecutter as this will not be necessary anymore -COPY --chown=scu:scu api/specs/common/schemas/node-meta-v0.0.1-pydantic.json \ - /build/services/director/src/simcore_service_director/api/v0/oas-parts/schemas/node-meta-v0.0.1-pydantic.json +COPY --chown=scu:scu api/specs/common/schemas/node-meta-v0.0.1.json \ + /build/services/director/src/simcore_service_director/api/v0/oas-parts/schemas/node-meta-v0.0.1.json # --------------------------Prod-depends-only stage ------------------- # This stage is for production only dependencies that get partially wiped out afterwards (final docker image concerns) diff --git a/services/director/src/simcore_service_director/api/v0/openapi.yaml b/services/director/src/simcore_service_director/api/v0/openapi.yaml index 258cd733e61..3e9f05493f2 100644 --- a/services/director/src/simcore_service_director/api/v0/openapi.yaml +++ b/services/director/src/simcore_service_director/api/v0/openapi.yaml @@ -141,298 +141,137 @@ paths: data: type: array items: + title: simcore node + description: Description of a simcore node 'class' with input and output + type: object additionalProperties: false - description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json - example: - authors: - - affiliation: Company - email: smith@company.com - name: John Smith - - affiliation: University - email: brown@uni.edu - name: Richard Brown - contact: smith@company.com - description: oSparc Python Runner - inputs: - input_1: - description: 'Any code, requirements or data file' - displayOrder: 1 - label: Input data - type: 'data:*/*' - integration-version: 1.0.0 - key: simcore/services/comp/osparc-python-runner - name: oSparc Python Runner - outputs: - output_1: - description: All data produced by the script is zipped as output_data.zip - displayOrder: 1 - fileToKeyMap: - output_data.zip: output_1 - label: Output data - type: 'data:*/*' - type: computational - version: 1.7.0 + required: + - key + - version + - type + - name + - description + - authors + - contact + - inputs + - outputs properties: - authors: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: simcore/services/comp/itis/sleeper + integration-version: + type: string + description: integration version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + version: + type: string + description: service version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + type: + type: string + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + name: + type: string + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + type: string + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + badges: + type: array items: + type: object + required: + - name + - image + - url additionalProperties: false properties: - affiliation: - description: Affiliation of the author - example: Sense8 - title: Affiliation + name: type: string - email: - description: Email address - example: sun@sense.eight - format: email - title: Email + description: Name of the subject + example: travis-ci + image: type: string - name: - description: Name of the author - example: Jim Knopf - title: Name + description: Url to the shield + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + url: type: string + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' + description: + type: string + description: human readable description of the purpose of the node + example: Our best node type + authors: + type: array + minItems: 1 + items: + type: object required: - name - email - title: Author - type: object - minItems: 1 - title: Authors - type: array - badges: - items: additionalProperties: false properties: - image: - description: Url to the badge - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' - format: uri - maxLength: 2083 - minLength: 1 - title: Image - type: string name: - description: Name of the subject - example: travis-ci - title: Name type: string - url: - description: Link to the status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - format: uri - maxLength: 2083 - minLength: 1 - title: Url + description: Name of the author + example: Sun Bak + email: + description: Email address type: string - required: - - name - - image - - url - title: Badge - type: object - title: Badges - type: array - boot-options: - additionalProperties: true - description: Service defined boot options. These get injected in the service as env variables. - title: Boot-Options - type: object - x-patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - example: - - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - - default: b - description: Select a theme for the application - items: - a: - description: Using white background - label: Clear - b: - description: Using black and gray tones - label: Dark - label: Application theme - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - - default: b - description: Select a theme for the application - items: - a: - description: Using white background - label: Clear - b: - description: Using black and gray tones - label: Dark - label: Application theme - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + format: email + example: sun@sense.eight + affiliation: + description: Affiliation of the author + type: string + example: Sense8 contact: + type: string + format: email description: email to correspond to the authors about the node example: lab@net.flix - format: email - title: Contact - type: string - description: - description: human readable description of the purpose of the node - example: Our best node type - title: Description - type: string inputs: - additionalProperties: true - description: definition of the inputs of this node - title: Inputs type: object + description: definition of the inputs of this node x-patternProperties: '^[-_a-zA-Z0-9]+$': + type: object + description: all the input configurable for this service additionalProperties: false - description: Metadata on a service input port - example: - - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: 'data:*/*' - - defaultValue: 0 - description: Time to wait before completion - displayOrder: 2 - label: Sleep Time - v2 - type: number - unit: second - widget: - details: - minHeight: 3 - type: TextArea - - defaultValue: 0 - description: Time to wait before completion - label: Sleep Time - latest - type: number - unit: second - widget: - details: - minHeight: 3 - type: TextArea - - contentSchema: - items: - type: number - title: 'list[number]' - type: array - description: Some array of numbers - label: array_numbers - type: ref_contentSchema - - contentSchema: - properties: - b: - title: Bool - type: boolean - i: - default: 3 - title: Int - type: integer - s: - title: Str - type: string - required: - - b - - s - title: an object named A - type: object - description: Some object - label: my_object - type: ref_contentSchema + required: + - displayOrder + - label + - description + - type properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: - - Dog - - true - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string displayOrder: + description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder type: number - fileToKeyMap: - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Filetokeymap - type: object label: + type: string description: short name for the property - example: Age - title: Label + example: + - Age + description: type: string + description: description of the property + example: + - Age in seconds since 1970 type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' description: data type expected on this input glob matching for data type is allowed example: - number @@ -446,280 +285,187 @@ paths: - 'data:text/plain' - 'data:application/hdf5' - 'data:application/edu.ucdavis@ceclancy.xyz' - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string + contentSchema: + title: Content Schema + description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data associated with the named keys in files + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + defaultValue: + description: initial value for this input + type: + - string + - number + - integer + - boolean + example: + - Dog + - true unit: - description: 'Units, when it refers to a physical quantity' title: Unit + description: 'Units of this input value, if a physical quantity' type: string widget: - allOf: - - additionalProperties: false + description: custom widget to use instead of the default one determined from the data-type + anyOf: + - type: object + additionalProperties: false + required: + - type properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string description: type of the property + type: string + enum: + - TextArea + minHeight: + description: minimum Height of the textarea + type: integer + minimum: 1 + - type: object + additionalProperties: false required: - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object - integration-version: - description: integration version number - example: 1.0.0 - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Integration-Version - type: string - key: - description: distinctive name for the node based on the docker registry path - example: simcore/services/comp/itis/sleeper - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Key - type: string - name: - description: 'short, human readable name for the node' - example: Fast Counter - title: Name - type: string - outputs: + - structure + properties: + type: + description: type of the property + type: string + enum: + - SelectBox + structure: + type: array + minItems: 1 + items: + type: object + additionalProperties: false + required: + - key + - label + properties: + key: + type: + - string + - boolean + - number + label: + type: string + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog additionalProperties: true - description: definition of the outputs of this node - title: Outputs + outputs: type: object + description: definition of the outputs of this node x-patternProperties: '^[-_a-zA-Z0-9]+$': + type: object + description: all the output produced by this node additionalProperties: false - description: Base class for service input/outputs - example: - - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - units - type: number - unit: second - - description: Time the service waited before completion - label: Time Slept - w/o displayorder - type: number - unit: second - - description: Output file uploaded from the outputs folder - displayOrder: 4 - label: Output file 1 - type: 'data:*/*' + required: + - displayOrder + - label + - description + - type properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder type: number - fileToKeyMap: - description: Place the data associated with the named keys in files + description: use this to numerically sort the properties for display example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Filetokeymap - type: object + - 1 + - -0.2 label: + type: string description: short name for the property - example: Age - title: Label + example: + - Age + description: type: string + description: description of the property + example: + - Age in seconds since 1970 type: - description: data type expected on this input glob matching for data type is allowed + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' + description: data type expected on this output example: - number + - integer - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' + - string - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' + - 'data:application/vnd.ms-excel ' - 'data:text/plain' - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string + contentSchema: + title: Content Schema + description: jsonschema of this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 unit: - description: 'Units, when it refers to a physical quantity' title: Unit + description: 'Units of the output value, if a physical quantity' type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceOutput + additionalProperties: true + boot-options: + title: Boot Options + description: Service defined boot options. These get injected in the service as env variables. + type: object + x-patternProperties: + '^[_a-zA-Z0-9]+$': + title: BootOptionMode type: object - thumbnail: - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - format: uri - maxLength: 2083 - minLength: 1 - title: Thumbnail - type: string - type: - allOf: - - description: An enumeration. - enum: - - computational - - dynamic - - frontend - - backend - title: ServiceType - type: string - description: service type - example: computational - version: - description: service version number - example: 1.0.0 - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Version - type: string - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - title: ServiceDockerData - type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootOptionItem + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description + required: + - label + - description + - default + - items + additionalProperties: true error: nullable: true default: null @@ -834,298 +580,137 @@ paths: data: type: array items: + title: simcore node + description: Description of a simcore node 'class' with input and output + type: object additionalProperties: false - description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json - example: - authors: - - affiliation: Company - email: smith@company.com - name: John Smith - - affiliation: University - email: brown@uni.edu - name: Richard Brown - contact: smith@company.com - description: oSparc Python Runner - inputs: - input_1: - description: 'Any code, requirements or data file' - displayOrder: 1 - label: Input data - type: 'data:*/*' - integration-version: 1.0.0 - key: simcore/services/comp/osparc-python-runner - name: oSparc Python Runner - outputs: - output_1: - description: All data produced by the script is zipped as output_data.zip - displayOrder: 1 - fileToKeyMap: - output_data.zip: output_1 - label: Output data - type: 'data:*/*' - type: computational - version: 1.7.0 + required: + - key + - version + - type + - name + - description + - authors + - contact + - inputs + - outputs properties: - authors: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: simcore/services/comp/itis/sleeper + integration-version: + type: string + description: integration version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + version: + type: string + description: service version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + type: + type: string + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + name: + type: string + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + type: string + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + badges: + type: array items: + type: object + required: + - name + - image + - url additionalProperties: false properties: - affiliation: - description: Affiliation of the author - example: Sense8 - title: Affiliation + name: type: string - email: - description: Email address - example: sun@sense.eight - format: email - title: Email + description: Name of the subject + example: travis-ci + image: type: string - name: - description: Name of the author - example: Jim Knopf - title: Name + description: Url to the shield + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + url: type: string + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' + description: + type: string + description: human readable description of the purpose of the node + example: Our best node type + authors: + type: array + minItems: 1 + items: + type: object required: - name - email - title: Author - type: object - minItems: 1 - title: Authors - type: array - badges: - items: additionalProperties: false properties: - image: - description: Url to the badge - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' - format: uri - maxLength: 2083 - minLength: 1 - title: Image - type: string name: - description: Name of the subject - example: travis-ci - title: Name type: string - url: - description: Link to the status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - format: uri - maxLength: 2083 - minLength: 1 - title: Url + description: Name of the author + example: Sun Bak + email: + description: Email address type: string - required: - - name - - image - - url - title: Badge - type: object - title: Badges - type: array - boot-options: - additionalProperties: true - description: Service defined boot options. These get injected in the service as env variables. - title: Boot-Options - type: object - x-patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - example: - - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - - default: b - description: Select a theme for the application - items: - a: - description: Using white background - label: Clear - b: - description: Using black and gray tones - label: Dark - label: Application theme - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - - default: b - description: Select a theme for the application - items: - a: - description: Using white background - label: Clear - b: - description: Using black and gray tones - label: Dark - label: Application theme - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + format: email + example: sun@sense.eight + affiliation: + description: Affiliation of the author + type: string + example: Sense8 contact: + type: string + format: email description: email to correspond to the authors about the node example: lab@net.flix - format: email - title: Contact - type: string - description: - description: human readable description of the purpose of the node - example: Our best node type - title: Description - type: string inputs: - additionalProperties: true - description: definition of the inputs of this node - title: Inputs type: object + description: definition of the inputs of this node x-patternProperties: '^[-_a-zA-Z0-9]+$': + type: object + description: all the input configurable for this service additionalProperties: false - description: Metadata on a service input port - example: - - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: 'data:*/*' - - defaultValue: 0 - description: Time to wait before completion - displayOrder: 2 - label: Sleep Time - v2 - type: number - unit: second - widget: - details: - minHeight: 3 - type: TextArea - - defaultValue: 0 - description: Time to wait before completion - label: Sleep Time - latest - type: number - unit: second - widget: - details: - minHeight: 3 - type: TextArea - - contentSchema: - items: - type: number - title: 'list[number]' - type: array - description: Some array of numbers - label: array_numbers - type: ref_contentSchema - - contentSchema: - properties: - b: - title: Bool - type: boolean - i: - default: 3 - title: Int - type: integer - s: - title: Str - type: string - required: - - b - - s - title: an object named A - type: object - description: Some object - label: my_object - type: ref_contentSchema + required: + - displayOrder + - label + - description + - type properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: - - Dog - - true - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string displayOrder: + description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder type: number - fileToKeyMap: - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Filetokeymap - type: object label: + type: string description: short name for the property - example: Age - title: Label + example: + - Age + description: type: string + description: description of the property + example: + - Age in seconds since 1970 type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' description: data type expected on this input glob matching for data type is allowed example: - number @@ -1139,280 +724,187 @@ paths: - 'data:text/plain' - 'data:application/hdf5' - 'data:application/edu.ucdavis@ceclancy.xyz' - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string + contentSchema: + title: Content Schema + description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data associated with the named keys in files + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + defaultValue: + description: initial value for this input + type: + - string + - number + - integer + - boolean + example: + - Dog + - true unit: - description: 'Units, when it refers to a physical quantity' title: Unit + description: 'Units of this input value, if a physical quantity' type: string widget: - allOf: - - additionalProperties: false + description: custom widget to use instead of the default one determined from the data-type + anyOf: + - type: object + additionalProperties: false + required: + - type properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string description: type of the property + type: string + enum: + - TextArea + minHeight: + description: minimum Height of the textarea + type: integer + minimum: 1 + - type: object + additionalProperties: false required: - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object - integration-version: - description: integration version number - example: 1.0.0 - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Integration-Version - type: string - key: - description: distinctive name for the node based on the docker registry path - example: simcore/services/comp/itis/sleeper - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Key - type: string - name: - description: 'short, human readable name for the node' - example: Fast Counter - title: Name - type: string - outputs: + - structure + properties: + type: + description: type of the property + type: string + enum: + - SelectBox + structure: + type: array + minItems: 1 + items: + type: object + additionalProperties: false + required: + - key + - label + properties: + key: + type: + - string + - boolean + - number + label: + type: string + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog additionalProperties: true - description: definition of the outputs of this node - title: Outputs + outputs: type: object + description: definition of the outputs of this node x-patternProperties: '^[-_a-zA-Z0-9]+$': + type: object + description: all the output produced by this node additionalProperties: false - description: Base class for service input/outputs - example: - - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - units - type: number - unit: second - - description: Time the service waited before completion - label: Time Slept - w/o displayorder - type: number - unit: second - - description: Output file uploaded from the outputs folder - displayOrder: 4 - label: Output file 1 - type: 'data:*/*' + required: + - displayOrder + - label + - description + - type properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder type: number - fileToKeyMap: - description: Place the data associated with the named keys in files + description: use this to numerically sort the properties for display example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Filetokeymap - type: object + - 1 + - -0.2 label: + type: string description: short name for the property - example: Age - title: Label + example: + - Age + description: type: string + description: description of the property + example: + - Age in seconds since 1970 type: - description: data type expected on this input glob matching for data type is allowed + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' + description: data type expected on this output example: - number + - integer - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' + - string - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' + - 'data:application/vnd.ms-excel ' - 'data:text/plain' - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string + contentSchema: + title: Content Schema + description: jsonschema of this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 unit: - description: 'Units, when it refers to a physical quantity' title: Unit + description: 'Units of the output value, if a physical quantity' type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget + additionalProperties: true + boot-options: + title: Boot Options + description: Service defined boot options. These get injected in the service as env variables. + type: object + x-patternProperties: + '^[_a-zA-Z0-9]+$': + title: BootOptionMode + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootOptionItem + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description required: - label - description - - type - title: ServiceOutput - type: object - thumbnail: - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - format: uri - maxLength: 2083 - minLength: 1 - title: Thumbnail - type: string - type: - allOf: - - description: An enumeration. - enum: - - computational - - dynamic - - frontend - - backend - title: ServiceType - type: string - description: service type - example: computational - version: - description: service version number - example: 1.0.0 - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Version - type: string - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - title: ServiceDockerData - type: object + - default + - items + additionalProperties: true error: nullable: true default: null @@ -2941,298 +2433,137 @@ components: data: type: array items: + title: simcore node + description: Description of a simcore node 'class' with input and output + type: object additionalProperties: false - description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json - example: - authors: - - affiliation: Company - email: smith@company.com - name: John Smith - - affiliation: University - email: brown@uni.edu - name: Richard Brown - contact: smith@company.com - description: oSparc Python Runner - inputs: - input_1: - description: 'Any code, requirements or data file' - displayOrder: 1 - label: Input data - type: 'data:*/*' - integration-version: 1.0.0 - key: simcore/services/comp/osparc-python-runner - name: oSparc Python Runner - outputs: - output_1: - description: All data produced by the script is zipped as output_data.zip - displayOrder: 1 - fileToKeyMap: - output_data.zip: output_1 - label: Output data - type: 'data:*/*' - type: computational - version: 1.7.0 + required: + - key + - version + - type + - name + - description + - authors + - contact + - inputs + - outputs properties: - authors: + key: + type: string + description: distinctive name for the node based on the docker registry path + pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' + example: simcore/services/comp/itis/sleeper + integration-version: + type: string + description: integration version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + version: + type: string + description: service version number + pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' + example: 1.0.0 + type: + type: string + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + name: + type: string + description: 'short, human readable name for the node' + example: Fast Counter + thumbnail: + type: string + description: url to the thumbnail + example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' + badges: + type: array items: + type: object + required: + - name + - image + - url additionalProperties: false properties: - affiliation: - description: Affiliation of the author - example: Sense8 - title: Affiliation + name: type: string - email: - description: Email address - example: sun@sense.eight - format: email - title: Email + description: Name of the subject + example: travis-ci + image: type: string - name: - description: Name of the author - example: Jim Knopf - title: Name + description: Url to the shield + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' + url: type: string + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' + description: + type: string + description: human readable description of the purpose of the node + example: Our best node type + authors: + type: array + minItems: 1 + items: + type: object required: - name - email - title: Author - type: object - minItems: 1 - title: Authors - type: array - badges: - items: additionalProperties: false properties: - image: - description: Url to the badge - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' - format: uri - maxLength: 2083 - minLength: 1 - title: Image - type: string name: - description: Name of the subject - example: travis-ci - title: Name type: string - url: - description: Link to the status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - format: uri - maxLength: 2083 - minLength: 1 - title: Url + description: Name of the author + example: Sun Bak + email: + description: Email address type: string - required: - - name - - image - - url - title: Badge - type: object - title: Badges - type: array - boot-options: - additionalProperties: true - description: Service defined boot options. These get injected in the service as env variables. - title: Boot-Options - type: object - x-patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - example: - - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - - default: b - description: Select a theme for the application - items: - a: - description: Using white background - label: Clear - b: - description: Using black and gray tones - label: Dark - label: Application theme - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - example: - - default: '0' - description: Start it in web page mode - items: - '0': - description: Tooltip for non Voila boot mode - label: Non Voila - '1': - description: Tooltip for Voila boot mode - label: Voila - label: Boot mode - - default: b - description: Select a theme for the application - items: - a: - description: Using white background - label: Clear - b: - description: Using black and gray tones - label: Dark - label: Application theme - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootChoice - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOption - type: object + format: email + example: sun@sense.eight + affiliation: + description: Affiliation of the author + type: string + example: Sense8 contact: + type: string + format: email description: email to correspond to the authors about the node example: lab@net.flix - format: email - title: Contact - type: string - description: - description: human readable description of the purpose of the node - example: Our best node type - title: Description - type: string inputs: - additionalProperties: true - description: definition of the inputs of this node - title: Inputs type: object + description: definition of the inputs of this node x-patternProperties: '^[-_a-zA-Z0-9]+$': + type: object + description: all the input configurable for this service additionalProperties: false - description: Metadata on a service input port - example: - - description: Files downloaded from service connected at the input - displayOrder: 1 - label: Input files - file-wo-widget - type: 'data:*/*' - - defaultValue: 0 - description: Time to wait before completion - displayOrder: 2 - label: Sleep Time - v2 - type: number - unit: second - widget: - details: - minHeight: 3 - type: TextArea - - defaultValue: 0 - description: Time to wait before completion - label: Sleep Time - latest - type: number - unit: second - widget: - details: - minHeight: 3 - type: TextArea - - contentSchema: - items: - type: number - title: 'list[number]' - type: array - description: Some array of numbers - label: array_numbers - type: ref_contentSchema - - contentSchema: - properties: - b: - title: Bool - type: boolean - i: - default: 3 - title: Int - type: integer - s: - title: Str - type: string - required: - - b - - s - title: an object named A - type: object - description: Some object - label: my_object - type: ref_contentSchema + required: + - displayOrder + - label + - description + - type properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - defaultValue: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - example: - - Dog - - true - title: Defaultvalue - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string displayOrder: + description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder type: number - fileToKeyMap: - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Filetokeymap - type: object label: + type: string description: short name for the property - example: Age - title: Label + example: + - Age + description: type: string + description: description of the property + example: + - Age in seconds since 1970 type: + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' description: data type expected on this input glob matching for data type is allowed example: - number @@ -3246,280 +2577,187 @@ components: - 'data:text/plain' - 'data:application/hdf5' - 'data:application/edu.ucdavis@ceclancy.xyz' - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string + contentSchema: + title: Content Schema + description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data associated with the named keys in files + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + defaultValue: + description: initial value for this input + type: + - string + - number + - integer + - boolean + example: + - Dog + - true unit: - description: 'Units, when it refers to a physical quantity' title: Unit + description: 'Units of this input value, if a physical quantity' type: string widget: - allOf: - - additionalProperties: false + description: custom widget to use instead of the default one determined from the data-type + anyOf: + - type: object + additionalProperties: false + required: + - type properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string description: type of the property + type: string + enum: + - TextArea + minHeight: + description: minimum Height of the textarea + type: integer + minimum: 1 + - type: object + additionalProperties: false required: - type - - details - title: Widget - type: object - description: custom widget to use instead of the default one determined from the data-type - title: Widget - required: - - label - - description - - type - title: ServiceInput - type: object - integration-version: - description: integration version number - example: 1.0.0 - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Integration-Version - type: string - key: - description: distinctive name for the node based on the docker registry path - example: simcore/services/comp/itis/sleeper - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - title: Key - type: string - name: - description: 'short, human readable name for the node' - example: Fast Counter - title: Name - type: string - outputs: + - structure + properties: + type: + description: type of the property + type: string + enum: + - SelectBox + structure: + type: array + minItems: 1 + items: + type: object + additionalProperties: false + required: + - key + - label + properties: + key: + type: + - string + - boolean + - number + label: + type: string + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog additionalProperties: true - description: definition of the outputs of this node - title: Outputs + outputs: type: object + description: definition of the outputs of this node x-patternProperties: '^[-_a-zA-Z0-9]+$': + type: object + description: all the output produced by this node additionalProperties: false - description: Base class for service input/outputs - example: - - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - type: number - - description: Time the service waited before completion - displayOrder: 2 - label: Time Slept - units - type: number - unit: second - - description: Time the service waited before completion - label: Time Slept - w/o displayorder - type: number - unit: second - - description: Output file uploaded from the outputs folder - displayOrder: 4 - label: Output file 1 - type: 'data:*/*' + required: + - displayOrder + - label + - description + - type properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Contentschema - type: object - description: - description: description of the property - example: Age in seconds since 1970 - title: Description - type: string displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. This will be removed.' - title: Displayorder type: number - fileToKeyMap: - description: Place the data associated with the named keys in files + description: use this to numerically sort the properties for display example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: '^[-_a-zA-Z0-9]+$' - type: string - title: Filetokeymap - type: object + - 1 + - -0.2 label: + type: string description: short name for the property - example: Age - title: Label + example: + - Age + description: type: string + description: description of the property + example: + - Age in seconds since 1970 type: - description: data type expected on this input glob matching for data type is allowed + type: string + pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' + description: data type expected on this output example: - number + - integer - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' + - string - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' + - 'data:application/vnd.ms-excel ' - 'data:text/plain' - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - title: Type - type: string + contentSchema: + title: Content Schema + description: jsonschema of this input/output. Required when type='ref_contentSchema' + type: object + fileToKeyMap: + description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. + type: object + patternProperties: + .+: + type: string + pattern: '^[-_a-zA-Z0-9]+$' + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 unit: - description: 'Units, when it refers to a physical quantity' title: Unit + description: 'Units of the output value, if a physical quantity' type: string - widget: - allOf: - - additionalProperties: false - properties: - details: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - title: Minheight - type: integer - required: - - minHeight - title: TextArea - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - properties: - key: - anyOf: - - type: string - - type: boolean - - type: number - title: Key - label: - title: Label - type: string - required: - - key - - label - title: Structure - type: object - minItems: 1 - title: Structure - type: array - required: - - structure - title: SelectBox - type: object - title: Details - type: - allOf: - - description: An enumeration. - enum: - - TextArea - - SelectBox - title: WidgetType - type: string - description: type of the property - required: - - type - - details - title: Widget - type: object - deprecated: true - description: custom widget to use instead of the default one determined from the data-type - title: Widget + additionalProperties: true + boot-options: + title: Boot Options + description: Service defined boot options. These get injected in the service as env variables. + type: object + x-patternProperties: + '^[_a-zA-Z0-9]+$': + title: BootOptionMode + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + default: + title: Default + type: string + items: + title: Items + type: object + additionalProperties: + title: BootOptionItem + type: object + properties: + label: + title: Label + type: string + description: + title: Description + type: string + required: + - label + - description required: - label - description - - type - title: ServiceOutput - type: object - thumbnail: - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - format: uri - maxLength: 2083 - minLength: 1 - title: Thumbnail - type: string - type: - allOf: - - description: An enumeration. - enum: - - computational - - dynamic - - frontend - - backend - title: ServiceType - type: string - description: service type - example: computational - version: - description: service version number - example: 1.0.0 - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - title: Version - type: string - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - title: ServiceDockerData - type: object + - default + - items + additionalProperties: true error: nullable: true default: null diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json deleted file mode 100644 index 35382a6950e..00000000000 --- a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ /dev/null @@ -1,1817 +0,0 @@ -{ - "title": "ServiceDockerData", - "description": "Static metadata for a service injected in the image labels\n\nThis is one to one with node-meta-v0.0.1.json", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "short, human readable name for the node", - "example": "Fast Counter", - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "description": { - "title": "Description", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ], - "type": "string" - }, - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "integration-version": { - "title": "Integration-Version", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ], - "type": "string" - }, - "type": { - "description": "service type", - "examples": [ - "computational" - ], - "allOf": [ - { - "title": "ServiceType", - "description": "An enumeration.", - "enum": [ - "computational", - "dynamic", - "frontend", - "backend" - ], - "type": "string" - } - ] - }, - "badges": { - "title": "Badges", - "type": "array", - "items": { - "title": "Badge", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ], - "type": "string" - }, - "image": { - "title": "Image", - "description": "Url to the badge", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "url": { - "title": "Url", - "description": "Link to the status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - } - }, - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false - } - }, - "authors": { - "title": "Authors", - "minItems": 1, - "type": "array", - "items": { - "title": "Author", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the author", - "example": "Jim Knopf", - "type": "string" - }, - "email": { - "title": "Email", - "description": "Email address", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ], - "type": "string", - "format": "email" - }, - "affiliation": { - "title": "Affiliation", - "description": "Affiliation of the author", - "examples": [ - "Sense8", - "Babylon 5" - ], - "type": "string" - } - }, - "required": [ - "name", - "email" - ], - "additionalProperties": false - } - }, - "contact": { - "title": "Contact", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ], - "type": "string", - "format": "email" - }, - "inputs": { - "title": "Inputs", - "description": "definition of the inputs of this node", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] - } - } - }, - "outputs": { - "title": "Outputs", - "description": "definition of the outputs of this node", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] - } - } - }, - "boot-options": { - "title": "Boot-Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - } - }, - "required": [ - "name", - "description", - "key", - "version", - "type", - "authors", - "contact", - "inputs", - "outputs" - ], - "additionalProperties": false, - "examples": [ - { - "name": "oSparc Python Runner", - "key": "simcore/services/comp/osparc-python-runner", - "type": "computational", - "integration-version": "1.0.0", - "version": "1.7.0", - "description": "oSparc Python Runner", - "contact": "smith@company.com", - "authors": [ - { - "name": "John Smith", - "email": "smith@company.com", - "affiliation": "Company" - }, - { - "name": "Richard Brown", - "email": "brown@uni.edu", - "affiliation": "University" - } - ], - "inputs": { - "input_1": { - "displayOrder": 1, - "label": "Input data", - "description": "Any code, requirements or data file", - "type": "data:*/*" - } - }, - "outputs": { - "output_1": { - "displayOrder": 1, - "label": "Output data", - "description": "All data produced by the script is zipped as output_data.zip", - "type": "data:*/*", - "fileToKeyMap": { - "output_data.zip": "output_1" - } - } - } - }, - { - "name": "oSparc Python Runner", - "key": "simcore/services/comp/osparc-python-runner", - "type": "computational", - "integration-version": "1.0.0", - "version": "1.7.0", - "description": "oSparc Python Runner", - "contact": "smith@company.com", - "authors": [ - { - "name": "John Smith", - "email": "smith@company.com", - "affiliation": "Company" - }, - { - "name": "Richard Brown", - "email": "brown@uni.edu", - "affiliation": "University" - } - ], - "inputs": { - "input_1": { - "label": "Input data", - "description": "Any code, requirements or data file", - "type": "data:*/*" - } - }, - "outputs": { - "output_1": { - "label": "Output data", - "description": "All data produced by the script is zipped as output_data.zip", - "type": "data:*/*", - "fileToKeyMap": { - "output_data.zip": "output_1" - } - } - }, - "boot-options": { - "example_service_defined_boot_mode": { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - "example_service_defined_theme_selection": { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - } - } - ], - "definitions": { - "ServiceType": { - "title": "ServiceType", - "description": "An enumeration.", - "enum": [ - "computational", - "dynamic", - "frontend", - "backend" - ], - "type": "string" - }, - "Badge": { - "title": "Badge", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ], - "type": "string" - }, - "image": { - "title": "Image", - "description": "Url to the badge", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - }, - "url": { - "title": "Url", - "description": "Link to the status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ], - "minLength": 1, - "maxLength": 2083, - "format": "uri", - "type": "string" - } - }, - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false - }, - "Author": { - "title": "Author", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "Name of the author", - "example": "Jim Knopf", - "type": "string" - }, - "email": { - "title": "Email", - "description": "Email address", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ], - "type": "string", - "format": "email" - }, - "affiliation": { - "title": "Affiliation", - "description": "Affiliation of the author", - "examples": [ - "Sense8", - "Babylon 5" - ], - "type": "string" - } - }, - "required": [ - "name", - "email" - ], - "additionalProperties": false - }, - "WidgetType": { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - }, - "TextArea": { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - "Structure": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - }, - "SelectBox": { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - }, - "Widget": { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - }, - "ServiceInput": { - "title": "ServiceInput", - "description": "Metadata on a service input port", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "defaultValue": { - "title": "Defaultvalue", - "examples": [ - "Dog", - true - ], - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 1, - "label": "Input files - file-wo-widget", - "description": "Files downloaded from service connected at the input", - "type": "data:*/*" - }, - { - "displayOrder": 2, - "label": "Sleep Time - v2", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "Sleep Time - latest", - "description": "Time to wait before completion", - "type": "number", - "defaultValue": 0, - "unit": "second", - "widget": { - "type": "TextArea", - "details": { - "minHeight": 3 - } - } - }, - { - "label": "array_numbers", - "description": "Some array of numbers", - "type": "ref_contentSchema", - "contentSchema": { - "title": "list[number]", - "type": "array", - "items": { - "type": "number" - } - } - }, - { - "label": "my_object", - "description": "Some object", - "type": "ref_contentSchema", - "contentSchema": { - "title": "an object named A", - "type": "object", - "properties": { - "i": { - "title": "Int", - "type": "integer", - "default": 3 - }, - "b": { - "title": "Bool", - "type": "boolean" - }, - "s": { - "title": "Str", - "type": "string" - } - }, - "required": [ - "b", - "s" - ] - } - } - ] - }, - "ServiceOutput": { - "title": "ServiceOutput", - "description": "Base class for service input/outputs", - "type": "object", - "properties": { - "displayOrder": { - "title": "Displayorder", - "description": "DEPRECATED: new display order is taken from the item position. This will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "title": "Label", - "description": "short name for the property", - "example": "Age", - "type": "string" - }, - "description": { - "title": "Description", - "description": "description of the property", - "example": "Age in seconds since 1970", - "type": "string" - }, - "type": { - "title": "Type", - "description": "data type expected on this input glob matching for data type is allowed", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ], - "type": "string" - }, - "contentSchema": { - "title": "Contentschema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "title": "Filetokeymap", - "description": "Place the data associated with the named keys in files", - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ], - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - "unit": { - "title": "Unit", - "description": "Units, when it refers to a physical quantity", - "type": "string" - }, - "widget": { - "title": "Widget", - "description": "custom widget to use instead of the default one determined from the data-type", - "deprecated": true, - "allOf": [ - { - "title": "Widget", - "type": "object", - "properties": { - "type": { - "description": "type of the property", - "allOf": [ - { - "title": "WidgetType", - "description": "An enumeration.", - "enum": [ - "TextArea", - "SelectBox" - ], - "type": "string" - } - ] - }, - "details": { - "title": "Details", - "anyOf": [ - { - "title": "TextArea", - "type": "object", - "properties": { - "minHeight": { - "title": "Minheight", - "description": "minimum Height of the textarea", - "type": "integer" - } - }, - "required": [ - "minHeight" - ], - "additionalProperties": false - }, - { - "title": "SelectBox", - "type": "object", - "properties": { - "structure": { - "title": "Structure", - "minItems": 1, - "type": "array", - "items": { - "title": "Structure", - "type": "object", - "properties": { - "key": { - "title": "Key", - "anyOf": [ - { - "type": "string" - }, - { - "type": "boolean" - }, - { - "type": "number" - } - ] - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "key", - "label" - ], - "additionalProperties": false - } - } - }, - "required": [ - "structure" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "type", - "details" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "label", - "description", - "type" - ], - "additionalProperties": false, - "examples": [ - { - "displayOrder": 2, - "label": "Time Slept", - "description": "Time the service waited before completion", - "type": "number" - }, - { - "displayOrder": 2, - "label": "Time Slept - units", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Time Slept - w/o displayorder", - "description": "Time the service waited before completion", - "type": "number", - "unit": "second" - }, - { - "label": "Output file 1", - "displayOrder": 4.0, - "description": "Output file uploaded from the outputs folder", - "type": "data:*/*" - } - ] - }, - "BootChoice": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - }, - "BootOption": { - "title": "BootOption", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootChoice", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ], - "examples": [ - { - "label": "Boot mode", - "description": "Start it in web page mode", - "default": "0", - "items": { - "0": { - "label": "Non Voila", - "description": "Tooltip for non Voila boot mode" - }, - "1": { - "label": "Voila", - "description": "Tooltip for Voila boot mode" - } - } - }, - { - "label": "Application theme", - "description": "Select a theme for the application", - "default": "b", - "items": { - "a": { - "label": "Clear", - "description": "Using white background" - }, - "b": { - "label": "Dark", - "description": "Using black and gray tones" - } - } - } - ] - } - } -} diff --git a/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json new file mode 100644 index 00000000000..a47f6c2ad3b --- /dev/null +++ b/services/director/src/simcore_service_director/api/v0/schemas/node-meta-v0.0.1.json @@ -0,0 +1,477 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "simcore node", + "description": "Description of a simcore node 'class' with input and output", + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "type", + "name", + "description", + "authors", + "contact", + "inputs", + "outputs" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ] + }, + "integration-version": { + "type": "string", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ] + }, + "version": { + "type": "string", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "type": { + "type": "string", + "description": "service type", + "enum": [ + "frontend", + "computational", + "dynamic" + ], + "examples": [ + "computational" + ] + }, + "name": { + "type": "string", + "description": "short, human readable name for the node", + "examples": [ + "Fast Counter" + ] + }, + "thumbnail": { + "type": "string", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ] + }, + "badges": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ] + }, + "image": { + "type": "string", + "description": "Url to the shield", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ] + }, + "url": { + "type": "string", + "description": "Link to status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ] + } + } + } + }, + "description": { + "type": "string", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ] + }, + "authors": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "name", + "email" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the author", + "examples": [ + "Sun Bak", + "Delenn" + ] + }, + "email": { + "description": "Email address", + "type": "string", + "format": "email", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ] + }, + "affiliation": { + "description": "Affiliation of the author", + "type": "string", + "examples": [ + "Sense8", + "Babylon 5" + ] + } + } + } + }, + "contact": { + "type": "string", + "format": "email", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ] + }, + "inputs": { + "type": "object", + "description": "definition of the inputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the input configurable for this service", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "description": "data type expected on this input glob matching for data type is allowed", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data associated with the named keys in files", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "defaultValue": { + "description": "initial value for this input", + "type": [ + "string", + "number", + "integer", + "boolean" + ], + "examples": [ + "Dog", + true + ] + }, + "unit": { + "title": "Unit", + "description": "Units of this input value, if a physical quantity", + "type": "string" + }, + "widget": { + "description": "custom widget to use instead of the default one determined from the data-type", + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "TextArea" + ] + }, + "minHeight": { + "description": "minimum Height of the textarea", + "type": "integer", + "minimum": 1 + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "structure" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "SelectBox" + ] + }, + "structure": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "label" + ], + "properties": { + "key": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "label": { + "type": "string" + } + }, + "examples": [ + [ + { + "key": "rat", + "label": "The Rat" + }, + { + "key": "dog", + "label": "Bello the Dog" + } + ] + ] + } + } + } + } + ] + } + } + } + } + }, + "outputs": { + "type": "object", + "description": "definition of the outputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the output produced by this node", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "type": "number", + "description": "use this to numerically sort the properties for display", + "examples": [ + 1, + -0.2 + ] + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", + "description": "data type expected on this output", + "examples": [ + "number", + "integer", + "boolean", + "string", + "data:application/json", + "data:application/vnd.ms-excel ", + "data:text/plain", + "data:application/hdf5" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "unit": { + "title": "Unit", + "description": "Units of the output value, if a physical quantity", + "type": "string" + } + } + } + } + }, + "boot-options": { + "title": "Boot Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z0-9]+$": { + "title": "BootOptionMode", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootOptionItem", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ] + } + } + } + } +} diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json deleted file mode 100644 index 8231d515779..00000000000 --- a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1-pydantic.json +++ /dev/null @@ -1,2724 +0,0 @@ -{ - "title": "osparc-simcore project", - "type": "object", - "properties": { - "uuid": { - "title": "Uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ], - "type": "string", - "format": "uuid" - }, - "name": { - "title": "Name", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ], - "type": "string" - }, - "description": { - "title": "Description", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ], - "type": "string" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the project thumbnail", - "maxLength": 2083, - "minLength": 0, - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "format": "uri", - "type": "string" - }, - "creationDate": { - "title": "Creationdate", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "lastChangeDate": { - "title": "Lastchangedate", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ], - "type": "string" - }, - "workbench": { - "title": "Workbench", - "description": "Project's pipeline", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "examples": [ - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "examples": [ - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - } - } - }, - "prjOwner": { - "title": "Prjowner", - "description": "user email", - "type": "string", - "format": "email" - }, - "accessRights": { - "title": "Accessrights", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "type": "object", - "patternProperties": { - "^\\S+$": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - } - } - }, - "tags": { - "title": "Tags", - "default": [], - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "title": "Classifiers", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "type": "array", - "items": { - "type": "string" - } - }, - "state": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - } - ] - }, - "ui": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - } - } - } - } - }, - "quality": { - "title": "Quality", - "description": "stores the study quality assessment", - "default": {}, - "type": "object" - }, - "dev": { - "title": "Dev", - "description": "object used for development purposes only", - "type": "object" - } - }, - "required": [ - "uuid", - "name", - "description", - "thumbnail", - "creationDate", - "lastChangeDate", - "workbench", - "prjOwner", - "accessRights" - ], - "additionalProperties": false, - "definitions": { - "PortLink": { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - "SimCoreFileLink": { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "examples": [ - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - "DatCoreFileLink": { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - "DownloadLink": { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - "AccessEnum": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - }, - "Position": { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - }, - "RunningState": { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - }, - "NodeState": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - }, - "Node": { - "title": "Node", - "type": "object", - "properties": { - "key": { - "title": "Key", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ], - "type": "string" - }, - "version": { - "title": "Version", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ], - "type": "string" - }, - "label": { - "title": "Label", - "description": "The short name of the node", - "examples": [ - "JupyterLab" - ], - "type": "string" - }, - "progress": { - "title": "Progress", - "description": "the node progress value", - "minimum": 0, - "maximum": 100, - "type": "number" - }, - "thumbnail": { - "title": "Thumbnail", - "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ], - "format": "uri", - "type": "string" - }, - "runHash": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Runhash", - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": "string" - } - ] - }, - "inputs": { - "title": "Inputs", - "description": "values of input properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "PortLink", - "description": "I/O port type to reference to an output port of another node in the same project", - "type": "object", - "properties": { - "nodeUuid": { - "title": "Nodeuuid", - "description": "The node to get the port output from", - "type": "string", - "format": "uuid" - }, - "output": { - "title": "Output", - "description": "The port key in the node given by nodeUuid", - "pattern": "^[-_a-zA-Z0-9]+$", - "type": "string" - } - }, - "required": [ - "nodeUuid", - "output" - ], - "additionalProperties": false, - "examples": [ - { - "nodeUuid": "da5068e0-8a8d-4fb9-9516-56e5ddaef15b", - "output": "out_2" - } - ] - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "examples": [ - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "inputsUnits": { - "title": "Inputsunits", - "description": "Overrides default unit (if any) defined in the service for each port", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string" - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "title": "AccessEnum", - "description": "An enumeration.", - "enum": [ - "ReadAndWrite", - "Invisible", - "ReadOnly" - ], - "type": "string" - } - } - }, - "inputNodes": { - "title": "Inputnodes", - "description": "node IDs of where the node is connected to", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "outputs": { - "title": "Outputs", - "description": "values of output properties", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "number" - }, - { - "type": "string", - "format": "json-string" - }, - { - "type": "string" - }, - { - "title": "SimCoreFileLink", - "description": "I/O port type to hold a link to a file in simcore S3 storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "deprecated": true, - "type": "string" - } - }, - "required": [ - "store", - "path" - ], - "additionalProperties": false, - "examples": [ - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt", - "eTag": "859fda0cb82fc4acb4686510a172d9a9-1", - "label": "input.txt" - }, - { - "store": "0", - "path": "50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5", - "eTag": "f7e4c7076761a42a871e978c8691c676" - }, - { - "store": 0, - "path": "api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt" - }, - { - "store": 0, - "path": "94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt" - } - ] - }, - { - "title": "DatCoreFileLink", - "description": "I/O port type to hold a link to a file in DATCORE storage", - "type": "object", - "properties": { - "store": { - "title": "Store", - "description": "The store identifier: 0 for simcore S3, 1 for datcore", - "type": "integer" - }, - "path": { - "title": "Path", - "description": "The path to the file in the storage provider domain", - "anyOf": [ - { - "type": "string", - "pattern": "^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\\/(.+)$" - }, - { - "type": "string", - "pattern": "^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" - } - ] - }, - "label": { - "title": "Label", - "description": "The real file name", - "type": "string" - }, - "eTag": { - "title": "Etag", - "description": "Entity tag that uniquely represents the file. The method to generate the tag is not specified (black box).", - "type": "string" - }, - "dataset": { - "title": "Dataset", - "description": "Unique identifier to access the dataset on datcore (REQUIRED for datcore)", - "type": "string" - } - }, - "required": [ - "store", - "path", - "label", - "dataset" - ], - "additionalProperties": false, - "examples": [ - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - }, - { - "store": 1, - "dataset": "N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4", - "path": "N:package:32df09ba-e8d6-46da-bd54-f696157de6ce", - "label": "initial_WTstates" - } - ] - }, - { - "title": "DownloadLink", - "description": "I/O port type to hold a generic download link to a file (e.g. S3 pre-signed link, etc)", - "type": "object", - "properties": { - "downloadLink": { - "title": "Downloadlink", - "minLength": 1, - "maxLength": 65536, - "format": "uri", - "type": "string" - }, - "label": { - "title": "Label", - "type": "string" - } - }, - "required": [ - "downloadLink" - ], - "additionalProperties": false, - "examples": [ - { - "downloadLink": "https://fakeimg.pl/250x100/" - } - ] - }, - { - "type": "array", - "items": {} - }, - { - "type": "object" - } - ] - } - } - }, - "outputNode": { - "title": "Outputnode", - "deprecated": true, - "type": "boolean" - }, - "outputNodes": { - "title": "Outputnodes", - "description": "Used in group-nodes. Node IDs of those connected to the output", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - } - }, - "parent": { - "anyOf": [ - { - "type": "null" - }, - { - "title": "Parent", - "description": "Parent's (group-nodes') node ID s. Used to group", - "type": "string", - "format": "uuid" - } - ] - }, - "position": { - "title": "Position", - "description": "Use projects_ui.WorkbenchUI.position instead", - "deprecated": true, - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "state": { - "title": "State", - "description": "The node's state object", - "allOf": [ - { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "additionalProperties": false, - "examples": [ - { - "modified": true, - "dependencies": [], - "currentStatus": "NOT_STARTED" - }, - { - "modified": true, - "dependencies": [ - "42838344-03de-4ce2-8d93-589a5dcdfd05" - ], - "currentStatus": "ABORTED" - }, - { - "modified": false, - "dependencies": [], - "currentStatus": "SUCCESS" - } - ] - } - ] - }, - "bootOptions": { - "title": "Bootoptions", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - }, - "required": [ - "key", - "version", - "label" - ], - "additionalProperties": false - }, - "AccessRights": { - "title": "AccessRights", - "type": "object", - "properties": { - "read": { - "title": "Read", - "description": "gives read access", - "type": "boolean" - }, - "write": { - "title": "Write", - "description": "gives write access", - "type": "boolean" - }, - "delete": { - "title": "Delete", - "description": "gives deletion rights", - "type": "boolean" - } - }, - "required": [ - "read", - "write", - "delete" - ], - "additionalProperties": false - }, - "Owner": { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - }, - "ProjectStatus": { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - }, - "ProjectLocked": { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - }, - "ProjectRunningState": { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - }, - "ProjectState": { - "title": "ProjectState", - "type": "object", - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "properties": { - "user_id": { - "title": "User Id", - "description": "Owner's identifier when registered in the user's database table", - "examples": [ - 2 - ], - "type": "integer" - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "examples": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "examples": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ], - "additionalProperties": false - } - ] - }, - "status": { - "description": "The status of the project", - "allOf": [ - { - "title": "ProjectStatus", - "description": "An enumeration.", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "EXPORTING", - "OPENING", - "OPENED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value", - "status" - ], - "additionalProperties": false, - "examples": [ - { - "value": false, - "status": "CLOSED" - }, - { - "value": true, - "status": "OPENED", - "owner": { - "user_id": 123, - "first_name": "Johnny", - "last_name": "Cash" - } - } - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "properties": { - "value": { - "description": "The running state of the project", - "examples": [ - "STARTED" - ], - "allOf": [ - { - "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - ] - } - }, - "required": [ - "value" - ], - "additionalProperties": false - } - ] - } - }, - "required": [ - "locked", - "state" - ], - "additionalProperties": false - }, - "Marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - }, - "WorkbenchUI": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - }, - "Slideshow": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - }, - "Annotation": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - }, - "StudyUI": { - "title": "StudyUI", - "type": "object", - "properties": { - "workbench": { - "title": "Workbench", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "WorkbenchUI", - "type": "object", - "properties": { - "position": { - "title": "Position", - "description": "The node position in the workbench", - "allOf": [ - { - "title": "Position", - "type": "object", - "properties": { - "x": { - "title": "X", - "description": "The x position", - "example": [ - "12" - ], - "type": "integer" - }, - "y": { - "title": "Y", - "description": "The y position", - "example": [ - "15" - ], - "type": "integer" - } - }, - "required": [ - "x", - "y" - ], - "additionalProperties": false - } - ] - }, - "marker": { - "title": "Marker", - "type": "object", - "properties": { - "color": { - "title": "Color", - "type": "string", - "format": "color" - } - }, - "required": [ - "color" - ], - "additionalProperties": false - } - }, - "required": [ - "position" - ], - "additionalProperties": false - } - } - }, - "slideshow": { - "title": "Slideshow", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Slideshow", - "type": "object", - "properties": { - "position": { - "title": "Position", - "type": "integer" - }, - "instructions": { - "title": "Instructions", - "type": "string" - } - }, - "required": [ - "position" - ] - } - } - }, - "currentNodeId": { - "title": "Currentnodeid", - "type": "string", - "format": "uuid" - }, - "annotations": { - "title": "Annotations", - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$": { - "title": "Annotation", - "type": "object", - "properties": { - "type": { - "title": "Type", - "enum": [ - "rect", - "text" - ], - "type": "string" - }, - "color": { - "title": "Color", - "type": "string", - "format": "color" - }, - "attributes": { - "title": "Attributes", - "description": "svg attributes", - "type": "object" - } - }, - "required": [ - "type", - "color", - "attributes" - ], - "additionalProperties": false, - "examples": [ - { - "type": "rect", - "color": "#FF0000", - "attributes": { - "x": 415, - "y": 100, - "width": 117, - "height": 26 - } - }, - { - "type": "text", - "color": "#0000FF", - "attributes": { - "x": 415, - "y": 100, - "text": "Hey!" - } - } - ] - } - } - } - } - } - } -} diff --git a/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json new file mode 100644 index 00000000000..8c178845ccb --- /dev/null +++ b/services/director/src/simcore_service_director/api/v0/schemas/project-v0.0.1.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} diff --git a/services/director/src/simcore_service_director/config.py b/services/director/src/simcore_service_director/config.py index 81cb895e604..187c963a853 100644 --- a/services/director/src/simcore_service_director/config.py +++ b/services/director/src/simcore_service_director/config.py @@ -121,7 +121,7 @@ def _from_env_with_default(env: str, python_type, default): # used when in devel mode vs release mode NODE_SCHEMA_LOCATION: str = os.environ.get( - "NODE_SCHEMA_LOCATION", f"{API_ROOT}/{API_VERSION}/schemas/node-meta-v0.0.1-pydantic.json" + "NODE_SCHEMA_LOCATION", f"{API_ROOT}/{API_VERSION}/schemas/node-meta-v0.0.1.json" ) # used to find the right network name SIMCORE_SERVICES_NETWORK_NAME: Optional[str] = os.environ.get( diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, From 4332e7712aeb0a740a920f936ef445bf2f9c688a Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 15 Mar 2023 06:56:58 +0100 Subject: [PATCH 20/34] removing changes from director v0 - we should not touch him --- services/director/Dockerfile | 2 +- services/director/tests/conftest.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/director/Dockerfile b/services/director/Dockerfile index 4180b0f85f9..1df4e033ac2 100644 --- a/services/director/Dockerfile +++ b/services/director/Dockerfile @@ -147,7 +147,7 @@ CMD ["services/director/docker/boot.sh"] FROM build as development ENV SC_BUILD_TARGET=development -ENV NODE_SCHEMA_LOCATION=../../../api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +ENV NODE_SCHEMA_LOCATION=../../../api/specs/common/schemas/node-meta-v0.0.1.json WORKDIR /devel RUN chown -R scu:scu "${VIRTUAL_ENV}" ENTRYPOINT [ "/bin/sh", "services/director/docker/entrypoint.sh" ] diff --git a/services/director/tests/conftest.py b/services/director/tests/conftest.py index 7efd511702f..229960559d0 100644 --- a/services/director/tests/conftest.py +++ b/services/director/tests/conftest.py @@ -45,7 +45,7 @@ def package_dir(): @pytest.fixture def configure_schemas_location(package_dir, common_schemas_specs_dir): config.NODE_SCHEMA_LOCATION = str( - common_schemas_specs_dir / "node-meta-v0.0.1-pydantic.json" + common_schemas_specs_dir / "node-meta-v0.0.1.json" ) resources.RESOURCE_NODE_SCHEMA = os.path.relpath( config.NODE_SCHEMA_LOCATION, package_dir From aa836b6be4a7d620d3374a341eae2e1c9fe666fa Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 15 Mar 2023 07:24:38 +0100 Subject: [PATCH 21/34] adding back original json schemas, as they are still needed in the director v0 --- .../common/schemas/node-meta-v0.0.1.json | 477 +++++++++++ api/specs/common/schemas/project-v0.0.1.json | 768 ++++++++++++++++++ 2 files changed, 1245 insertions(+) create mode 100644 api/specs/common/schemas/node-meta-v0.0.1.json create mode 100644 api/specs/common/schemas/project-v0.0.1.json diff --git a/api/specs/common/schemas/node-meta-v0.0.1.json b/api/specs/common/schemas/node-meta-v0.0.1.json new file mode 100644 index 00000000000..a47f6c2ad3b --- /dev/null +++ b/api/specs/common/schemas/node-meta-v0.0.1.json @@ -0,0 +1,477 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "simcore node", + "description": "Description of a simcore node 'class' with input and output", + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "type", + "name", + "description", + "authors", + "contact", + "inputs", + "outputs" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ] + }, + "integration-version": { + "type": "string", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ] + }, + "version": { + "type": "string", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "type": { + "type": "string", + "description": "service type", + "enum": [ + "frontend", + "computational", + "dynamic" + ], + "examples": [ + "computational" + ] + }, + "name": { + "type": "string", + "description": "short, human readable name for the node", + "examples": [ + "Fast Counter" + ] + }, + "thumbnail": { + "type": "string", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ] + }, + "badges": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ] + }, + "image": { + "type": "string", + "description": "Url to the shield", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ] + }, + "url": { + "type": "string", + "description": "Link to status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ] + } + } + } + }, + "description": { + "type": "string", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ] + }, + "authors": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "name", + "email" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the author", + "examples": [ + "Sun Bak", + "Delenn" + ] + }, + "email": { + "description": "Email address", + "type": "string", + "format": "email", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ] + }, + "affiliation": { + "description": "Affiliation of the author", + "type": "string", + "examples": [ + "Sense8", + "Babylon 5" + ] + } + } + } + }, + "contact": { + "type": "string", + "format": "email", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ] + }, + "inputs": { + "type": "object", + "description": "definition of the inputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the input configurable for this service", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "description": "data type expected on this input glob matching for data type is allowed", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data associated with the named keys in files", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "defaultValue": { + "description": "initial value for this input", + "type": [ + "string", + "number", + "integer", + "boolean" + ], + "examples": [ + "Dog", + true + ] + }, + "unit": { + "title": "Unit", + "description": "Units of this input value, if a physical quantity", + "type": "string" + }, + "widget": { + "description": "custom widget to use instead of the default one determined from the data-type", + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "TextArea" + ] + }, + "minHeight": { + "description": "minimum Height of the textarea", + "type": "integer", + "minimum": 1 + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "structure" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "SelectBox" + ] + }, + "structure": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "label" + ], + "properties": { + "key": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "label": { + "type": "string" + } + }, + "examples": [ + [ + { + "key": "rat", + "label": "The Rat" + }, + { + "key": "dog", + "label": "Bello the Dog" + } + ] + ] + } + } + } + } + ] + } + } + } + } + }, + "outputs": { + "type": "object", + "description": "definition of the outputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the output produced by this node", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "type": "number", + "description": "use this to numerically sort the properties for display", + "examples": [ + 1, + -0.2 + ] + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", + "description": "data type expected on this output", + "examples": [ + "number", + "integer", + "boolean", + "string", + "data:application/json", + "data:application/vnd.ms-excel ", + "data:text/plain", + "data:application/hdf5" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "unit": { + "title": "Unit", + "description": "Units of the output value, if a physical quantity", + "type": "string" + } + } + } + } + }, + "boot-options": { + "title": "Boot Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z0-9]+$": { + "title": "BootOptionMode", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootOptionItem", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ] + } + } + } + } +} diff --git a/api/specs/common/schemas/project-v0.0.1.json b/api/specs/common/schemas/project-v0.0.1.json new file mode 100644 index 00000000000..8c178845ccb --- /dev/null +++ b/api/specs/common/schemas/project-v0.0.1.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} From 92b99aead6de15fc72ad5815828c839b869378b5 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 15 Mar 2023 08:50:42 +0100 Subject: [PATCH 22/34] removing exclusiveMinimum from the TextArea so we are back compatible --- .../node-meta-v0.0.1-converted-clean.yaml | 332 ++++++++ ...-meta-v0.0.1-pydantic-converted-clean.yaml | 2 - .../node-meta-v0.0.1-pydantic-converted.yaml | 6 - .../schemas/node-meta-v0.0.1-pydantic.json | 6 - .../schemas/openapi-node-meta-generated.yaml | 2 - .../project-v0.0.1-converted-clean.yaml | 551 +++++++++++++ .../src/models_library/services_ui.py | 9 +- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 - .../api/v0/schemas/node-meta-v0.0.1.json | 477 +++++++++++ .../api/v0/schemas/project-v0.0.1.json | 768 ++++++++++++++++++ .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 - .../api/v0/schemas/node-meta-v0.0.1.json | 477 +++++++++++ .../api/v0/schemas/project-v0.0.1.json | 768 ++++++++++++++++++ 13 files changed, 3381 insertions(+), 29 deletions(-) create mode 100644 api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml create mode 100644 api/specs/common/schemas/project-v0.0.1-converted-clean.yaml create mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json create mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json diff --git a/api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml new file mode 100644 index 00000000000..58b0445ed55 --- /dev/null +++ b/api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml @@ -0,0 +1,332 @@ +additionalProperties: false +description: Description of a simcore node 'class' with input and output +properties: + authors: + items: + additionalProperties: false + properties: + affiliation: + description: Affiliation of the author + example: Sense8 + type: string + email: + description: Email address + example: sun@sense.eight + format: email + type: string + name: + description: Name of the author + example: Sun Bak + type: string + required: + - name + - email + type: object + minItems: 1 + type: array + badges: + items: + additionalProperties: false + properties: + image: + description: Url to the shield + example: https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master + type: string + name: + description: Name of the subject + example: travis-ci + type: string + url: + description: Link to status + example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of + CI: build, test and pushing images''' + type: string + required: + - name + - image + - url + type: object + type: array + boot-options: + additionalProperties: true + description: Service defined boot options. These get injected in the service as + env variables. + title: Boot Options + type: object + x-patternProperties: + ^[_a-zA-Z0-9]+$: + properties: + default: + title: Default + type: string + description: + title: Description + type: string + items: + additionalProperties: + properties: + description: + title: Description + type: string + label: + title: Label + type: string + required: + - label + - description + title: BootOptionItem + type: object + title: Items + type: object + label: + title: Label + type: string + required: + - label + - description + - default + - items + title: BootOptionMode + type: object + contact: + description: email to correspond to the authors about the node + example: lab@net.flix + format: email + type: string + description: + description: human readable description of the purpose of the node + example: Our best node type + type: string + inputs: + additionalProperties: true + description: definition of the inputs of this node + type: object + x-patternProperties: + ^[-_a-zA-Z0-9]+$: + additionalProperties: false + description: all the input configurable for this service + properties: + contentSchema: + description: jsonschema of the content at this input/output. Required + when type='ref_contentSchema' + title: Content Schema + type: object + defaultValue: + description: initial value for this input + example: + - Dog + - true + type: + - string + - number + - integer + - boolean + description: + description: description of the property + example: + - Age in seconds since 1970 + type: string + displayOrder: + deprecated: true + description: 'DEPRECATED: new display order is taken from the item position. + This property will be removed.' + type: number + fileToKeyMap: + description: Place the data associated with the named keys in files + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + type: object + label: + description: short name for the property + example: + - Age + type: string + type: + description: data type expected on this input glob matching for data type + is allowed + example: + - number + - boolean + - data:*/* + - data:text/* + - data:[image/jpeg,image/png] + - data:application/json + - data:application/json;schema=https://my-schema/not/really/schema.json + - data:application/vnd.ms-excel + - data:text/plain + - data:application/hdf5 + - data:application/edu.ucdavis@ceclancy.xyz + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ + type: string + unit: + description: Units of this input value, if a physical quantity + title: Unit + type: string + widget: + anyOf: + - additionalProperties: false + properties: + minHeight: + description: minimum Height of the textarea + minimum: 1 + type: integer + type: + description: type of the property + enum: + - TextArea + type: string + required: + - type + type: object + - additionalProperties: false + properties: + structure: + items: + additionalProperties: false + example: + - - key: rat + label: The Rat + - key: dog + label: Bello the Dog + properties: + key: + type: + - string + - boolean + - number + label: + type: string + required: + - key + - label + type: object + minItems: 1 + type: array + type: + description: type of the property + enum: + - SelectBox + type: string + required: + - type + - structure + type: object + description: custom widget to use instead of the default one determined + from the data-type + required: + - displayOrder + - label + - description + - type + type: object + integration-version: + description: integration version number + example: 1.0.0 + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + key: + description: distinctive name for the node based on the docker registry path + example: simcore/services/comp/itis/sleeper + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + type: string + name: + description: short, human readable name for the node + example: Fast Counter + type: string + outputs: + additionalProperties: true + description: definition of the outputs of this node + type: object + x-patternProperties: + ^[-_a-zA-Z0-9]+$: + additionalProperties: false + description: all the output produced by this node + properties: + contentSchema: + description: jsonschema of this input/output. Required when type='ref_contentSchema' + title: Content Schema + type: object + description: + description: description of the property + example: + - Age in seconds since 1970 + type: string + displayOrder: + description: use this to numerically sort the properties for display + example: + - 1 + - -0.2 + type: number + fileToKeyMap: + description: Place the data stored in the named files and store it in + the locations pointed to by the respective output key. + example: + - dir/input1.txt: key_1 + dir33/input2.txt: key2 + patternProperties: + .+: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + type: object + label: + description: short name for the property + example: + - Age + type: string + type: + description: data type expected on this output + example: + - number + - integer + - boolean + - string + - data:application/json + - 'data:application/vnd.ms-excel ' + - data:text/plain + - data:application/hdf5 + pattern: ^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$ + type: string + unit: + description: Units of the output value, if a physical quantity + title: Unit + type: string + required: + - displayOrder + - label + - description + - type + type: object + thumbnail: + description: url to the thumbnail + example: https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png + type: string + type: + description: service type + enum: + - frontend + - computational + - dynamic + example: computational + type: string + version: + description: service version number + example: 1.0.0 + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string +required: +- key +- version +- type +- name +- description +- authors +- contact +- inputs +- outputs +title: simcore node +type: object diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index d5d53587ca6..1479593ad2f 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -324,7 +324,6 @@ properties: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: @@ -490,7 +489,6 @@ properties: properties: minHeight: description: minimum Height of the textarea - exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index f6ddc5cc80e..26f1abdf176 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -232,7 +232,6 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -423,7 +422,6 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -676,7 +674,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -748,7 +745,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -885,7 +881,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight @@ -1070,7 +1065,6 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea - exclusiveMinimum: 0 type: integer required: - minHeight diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index 46fde614c4b..ed219a58b63 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -351,10 +351,8 @@ components: properties: minHeight: title: Minheight - exclusiveMinimum: true type: integer description: minimum Height of the textarea - minimum: 0 additionalProperties: false ValidationError: title: ValidationError diff --git a/api/specs/common/schemas/project-v0.0.1-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-converted-clean.yaml new file mode 100644 index 00000000000..ffbe44cc1e4 --- /dev/null +++ b/api/specs/common/schemas/project-v0.0.1-converted-clean.yaml @@ -0,0 +1,551 @@ +additionalProperties: false +description: Description of a simcore project +properties: + accessRights: + additionalProperties: true + description: object containing the GroupID as key and read/write/execution permissions + as value + type: object + x-patternProperties: + ^\S+$: + additionalProperties: false + description: the group id + properties: + delete: + description: gives deletion rights + type: boolean + read: + description: gives read access + type: boolean + write: + description: gives write access + type: boolean + required: + - read + - write + - delete + type: object + classifiers: + description: Contains the reference to the project classifiers + example: some:id:to:a:classifier + items: + type: string + type: array + creationDate: + description: project creation date + example: '2018-07-01T11:13:43Z' + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + description: + description: longer one-line description about the project + example: Dabbling in temporal transitions ... + type: string + dev: + description: object used for development purposes only + type: object + lastChangeDate: + description: last save date + example: '2018-07-01T11:13:43Z' + pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z + type: string + name: + description: project name + example: Temporal Distortion Simulator + type: string + prjOwner: + description: user email + format: email + type: string + quality: + description: Object containing Quality Assessment related data + title: Quality + type: object + state: + anyOf: + - nullable: true + - additionalProperties: false + properties: + locked: + allOf: + - additionalProperties: false + properties: + owner: + allOf: + - additionalProperties: false + properties: + first_name: + description: Owner first name + example: + - John + title: First Name + type: string + last_name: + description: Owner last name + example: + - Smith + title: Last Name + type: string + user_id: + description: Owner's identifier when registered in the user's + database table + example: + - 2 + title: User Id + type: integer + required: + - user_id + - first_name + - last_name + title: Owner + type: object + description: If locked, the user that owns the lock + title: Owner + status: + description: The status of the project + enum: + - CLOSED + - CLOSING + - CLONING + - OPENING + - EXPORTING + - OPENED + title: Status + type: string + value: + description: True if the project is locked + title: Value + type: boolean + required: + - value + - status + title: ProjectLocked + type: object + description: The project lock state + title: Locked + state: + allOf: + - additionalProperties: false + properties: + value: + description: An enumeration. + enum: + - UNKNOWN + - NOT_STARTED + - PUBLISHED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + title: RunningState + type: string + required: + - value + title: ProjectRunningState + type: object + description: The project running state + title: State + required: + - locked + - state + title: ProjectState + type: object + description: Project state + title: State + tags: + items: + type: integer + type: array + thumbnail: + description: url of the latest screenshot of the project + example: https://placeimg.com/171/96/tech/grayscale/?0.jpg + format: uri + maxLength: 2083 + minLength: 0 + type: string + ui: + additionalProperties: true + properties: + annotations: + additionalProperties: true + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: + additionalProperties: false + properties: + attributes: + description: svg attributes + type: object + color: + description: Annotation's color + example: + - '#FF0000' + - '#0000FF' + type: string + type: + description: Annotation type + example: + - rect + - text + type: string + required: + - type + - color + - attributes + type: object + currentNodeId: + format: uuid + type: string + slideshow: + additionalProperties: true + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: + additionalProperties: false + properties: + instructions: + description: Instructions about what to do in this step + example: + - This is a **sleeper** + - Please, select the config file defined [in this link](asdf) + type: + - string + - 'null' + position: + description: Slide's position + example: + - 0 + - 2 + type: integer + required: + - position + type: object + workbench: + additionalProperties: true + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: + additionalProperties: false + properties: + marker: + additionalProperties: false + properties: + color: + description: Marker's color + example: + - '#FF0000' + - '#0000FF' + type: string + required: + - color + type: object + position: + additionalProperties: false + properties: + x: + description: The x position + example: + - '12' + type: integer + y: + description: The y position + example: + - '15' + type: integer + required: + - x + - y + type: object + required: + - position + type: object + type: object + uuid: + description: project unique identifier + example: 07640335-a91f-468c-ab69-a374fa82078d + format: uuid + type: string + workbench: + additionalProperties: true + type: object + x-patternProperties: + ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: + additionalProperties: false + properties: + bootOptions: + description: Some services provide alternative parameters to be injected + at boot time. The user selection should be stored here, and it will + overwrite the services's defaults. + patternProperties: + '[a-zA-Z][a-azA-Z0-9_]*': + type: string + title: Boot Options + type: object + inputAccess: + description: map with key - access level pairs + patternProperties: + ^[-_a-zA-Z0-9]+$: + default: ReadAndWrite + enum: + - Invisible + - ReadOnly + - ReadAndWrite + example: + - ReadOnly + type: string + type: object + inputNodes: + description: node IDs of where the node is connected to + example: + - nodeUuid1 + - nodeUuid2 + items: + format: uuid + type: string + type: array + inputs: + description: values of input properties + patternProperties: + ^[-_a-zA-Z0-9]+$: + oneOf: + - type: + - integer + - boolean + - string + - number + - 'null' + - additionalProperties: false + properties: + nodeUuid: + format: uuid + type: string + output: + pattern: ^[-_a-zA-Z0-9]+$ + type: string + required: + - nodeUuid + - output + type: object + - additionalProperties: false + properties: + dataset: + type: string + eTag: + type: string + label: + type: string + path: + type: string + store: + type: + - string + - integer + required: + - store + - path + type: object + - additionalProperties: false + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + type: string + label: + type: string + required: + - downloadLink + type: object + - items: {} + type: array + type: object + inputsUnits: + description: values of input unit + patternProperties: + ^[-_a-zA-Z0-9]+$: + example: + - kilo-meter + - milli-second + - micro-gram + - kelvin + type: string + type: object + key: + description: distinctive name for the node based on the docker registry + path + example: + - simcore/services/comp/sleeper + - simcore/services/dynamic/3dviewer + - simcore/services/frontend/file-picker + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ + type: string + label: + description: The short name of the node + example: + - JupyterLab + type: string + outputNode: + deprecated: true + type: boolean + outputNodes: + description: Used in group-nodes. Node IDs of those connected to the output + example: + - nodeUuid1 + - nodeUuid2 + items: + format: uuid + type: string + type: array + outputs: + default: {} + patternProperties: + ^[-_a-zA-Z0-9]+$: + oneOf: + - type: + - integer + - boolean + - string + - number + - 'null' + - additionalProperties: false + properties: + dataset: + type: string + eTag: + type: string + label: + type: string + path: + type: string + store: + type: + - string + - integer + required: + - store + - path + type: object + - additionalProperties: false + properties: + downloadLink: + format: uri + maxLength: 65536 + minLength: 1 + type: string + label: + type: string + required: + - downloadLink + type: object + - items: {} + type: array + type: object + parent: + description: Parent's (group-nodes') node ID s. + example: + - nodeUuid1 + - nodeUuid2 + format: uuid + type: + - 'null' + - string + position: + additionalProperties: false + deprecated: true + properties: + x: + description: The x position + example: + - '12' + type: integer + y: + description: The y position + example: + - '15' + type: integer + required: + - x + - y + type: object + progress: + description: the node progress value + maximum: 100 + minimum: 0 + type: number + runHash: + description: the hex digest of the resolved inputs +outputs hash at the + time when the last outputs were generated + example: + - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 + type: + - string + - 'null' + state: + additionalProperties: false + properties: + currentStatus: + default: NOT_STARTED + description: the node's current state + enum: + - UNKNOWN + - PUBLISHED + - NOT_STARTED + - PENDING + - STARTED + - RETRY + - SUCCESS + - FAILED + - ABORTED + example: + - RUNNING + - FAILED + type: string + dependencies: + description: contains the node inputs dependencies if they need to + be computed first + items: + format: uuid + type: string + title: Dependencies + type: array + uniqueItems: true + modified: + default: true + description: true if the node's outputs need to be re-computed + title: Modified + type: boolean + title: NodeState + type: object + thumbnail: + description: url of the latest screenshot of the node + example: + - https://placeimg.com/171/96/tech/grayscale/?0.jpg + format: uri + maxLength: 2083 + minLength: 0 + type: string + version: + description: semantic version number of the node + example: + - 1.0.0 + - 0.0.1 + pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ + type: string + required: + - key + - version + - label + type: object +required: +- uuid +- name +- description +- prjOwner +- accessRights +- creationDate +- lastChangeDate +- thumbnail +- workbench +title: simcore project +type: object diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index 2933c09a212..7d3c52275fa 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -10,8 +10,15 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" +class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): + # As we are trying to match this Pydantic model to a historical json schema "node-meta-v0.0.1" we need to remove this + @classmethod + def __modify_schema__(cls, field_schema): + field_schema.pop("exclusiveMinimum", None) + + class TextArea(BaseModel): - min_height: PositiveInt = Field( + min_height: PositiveIntWithExclusiveMinimumRemoved = Field( ..., alias="minHeight", description="minimum Height of the textarea" ) diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json new file mode 100644 index 00000000000..a47f6c2ad3b --- /dev/null +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json @@ -0,0 +1,477 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "simcore node", + "description": "Description of a simcore node 'class' with input and output", + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "type", + "name", + "description", + "authors", + "contact", + "inputs", + "outputs" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ] + }, + "integration-version": { + "type": "string", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ] + }, + "version": { + "type": "string", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "type": { + "type": "string", + "description": "service type", + "enum": [ + "frontend", + "computational", + "dynamic" + ], + "examples": [ + "computational" + ] + }, + "name": { + "type": "string", + "description": "short, human readable name for the node", + "examples": [ + "Fast Counter" + ] + }, + "thumbnail": { + "type": "string", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ] + }, + "badges": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ] + }, + "image": { + "type": "string", + "description": "Url to the shield", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ] + }, + "url": { + "type": "string", + "description": "Link to status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ] + } + } + } + }, + "description": { + "type": "string", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ] + }, + "authors": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "name", + "email" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the author", + "examples": [ + "Sun Bak", + "Delenn" + ] + }, + "email": { + "description": "Email address", + "type": "string", + "format": "email", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ] + }, + "affiliation": { + "description": "Affiliation of the author", + "type": "string", + "examples": [ + "Sense8", + "Babylon 5" + ] + } + } + } + }, + "contact": { + "type": "string", + "format": "email", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ] + }, + "inputs": { + "type": "object", + "description": "definition of the inputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the input configurable for this service", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "description": "data type expected on this input glob matching for data type is allowed", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data associated with the named keys in files", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "defaultValue": { + "description": "initial value for this input", + "type": [ + "string", + "number", + "integer", + "boolean" + ], + "examples": [ + "Dog", + true + ] + }, + "unit": { + "title": "Unit", + "description": "Units of this input value, if a physical quantity", + "type": "string" + }, + "widget": { + "description": "custom widget to use instead of the default one determined from the data-type", + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "TextArea" + ] + }, + "minHeight": { + "description": "minimum Height of the textarea", + "type": "integer", + "minimum": 1 + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "structure" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "SelectBox" + ] + }, + "structure": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "label" + ], + "properties": { + "key": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "label": { + "type": "string" + } + }, + "examples": [ + [ + { + "key": "rat", + "label": "The Rat" + }, + { + "key": "dog", + "label": "Bello the Dog" + } + ] + ] + } + } + } + } + ] + } + } + } + } + }, + "outputs": { + "type": "object", + "description": "definition of the outputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the output produced by this node", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "type": "number", + "description": "use this to numerically sort the properties for display", + "examples": [ + 1, + -0.2 + ] + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", + "description": "data type expected on this output", + "examples": [ + "number", + "integer", + "boolean", + "string", + "data:application/json", + "data:application/vnd.ms-excel ", + "data:text/plain", + "data:application/hdf5" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "unit": { + "title": "Unit", + "description": "Units of the output value, if a physical quantity", + "type": "string" + } + } + } + } + }, + "boot-options": { + "title": "Boot Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z0-9]+$": { + "title": "BootOptionMode", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootOptionItem", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ] + } + } + } + } +} diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json new file mode 100644 index 00000000000..8c178845ccb --- /dev/null +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..35382a6950e 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,7 +306,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -562,7 +561,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1017,7 +1015,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1127,7 +1124,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1311,7 +1307,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, @@ -1560,7 +1555,6 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", - "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json new file mode 100644 index 00000000000..a47f6c2ad3b --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json @@ -0,0 +1,477 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "simcore node", + "description": "Description of a simcore node 'class' with input and output", + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "type", + "name", + "description", + "authors", + "contact", + "inputs", + "outputs" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ] + }, + "integration-version": { + "type": "string", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ] + }, + "version": { + "type": "string", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "type": { + "type": "string", + "description": "service type", + "enum": [ + "frontend", + "computational", + "dynamic" + ], + "examples": [ + "computational" + ] + }, + "name": { + "type": "string", + "description": "short, human readable name for the node", + "examples": [ + "Fast Counter" + ] + }, + "thumbnail": { + "type": "string", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ] + }, + "badges": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ] + }, + "image": { + "type": "string", + "description": "Url to the shield", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ] + }, + "url": { + "type": "string", + "description": "Link to status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ] + } + } + } + }, + "description": { + "type": "string", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ] + }, + "authors": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "name", + "email" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the author", + "examples": [ + "Sun Bak", + "Delenn" + ] + }, + "email": { + "description": "Email address", + "type": "string", + "format": "email", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ] + }, + "affiliation": { + "description": "Affiliation of the author", + "type": "string", + "examples": [ + "Sense8", + "Babylon 5" + ] + } + } + } + }, + "contact": { + "type": "string", + "format": "email", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ] + }, + "inputs": { + "type": "object", + "description": "definition of the inputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the input configurable for this service", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "description": "data type expected on this input glob matching for data type is allowed", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data associated with the named keys in files", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "defaultValue": { + "description": "initial value for this input", + "type": [ + "string", + "number", + "integer", + "boolean" + ], + "examples": [ + "Dog", + true + ] + }, + "unit": { + "title": "Unit", + "description": "Units of this input value, if a physical quantity", + "type": "string" + }, + "widget": { + "description": "custom widget to use instead of the default one determined from the data-type", + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "TextArea" + ] + }, + "minHeight": { + "description": "minimum Height of the textarea", + "type": "integer", + "minimum": 1 + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "structure" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "SelectBox" + ] + }, + "structure": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "label" + ], + "properties": { + "key": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "label": { + "type": "string" + } + }, + "examples": [ + [ + { + "key": "rat", + "label": "The Rat" + }, + { + "key": "dog", + "label": "Bello the Dog" + } + ] + ] + } + } + } + } + ] + } + } + } + } + }, + "outputs": { + "type": "object", + "description": "definition of the outputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the output produced by this node", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "type": "number", + "description": "use this to numerically sort the properties for display", + "examples": [ + 1, + -0.2 + ] + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", + "description": "data type expected on this output", + "examples": [ + "number", + "integer", + "boolean", + "string", + "data:application/json", + "data:application/vnd.ms-excel ", + "data:text/plain", + "data:application/hdf5" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "unit": { + "title": "Unit", + "description": "Units of the output value, if a physical quantity", + "type": "string" + } + } + } + } + }, + "boot-options": { + "title": "Boot Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z0-9]+$": { + "title": "BootOptionMode", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootOptionItem", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ] + } + } + } + } +} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json new file mode 100644 index 00000000000..8c178845ccb --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +} From 27a2f687481451754b801d9e4ce4b8d2b5018f30 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Wed, 15 Mar 2023 10:22:04 +0100 Subject: [PATCH 23/34] putting previous changes back as it didnt help --- ...-meta-v0.0.1-pydantic-converted-clean.yaml | 2 ++ .../node-meta-v0.0.1-pydantic-converted.yaml | 6 ++++++ .../schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../schemas/openapi-node-meta-generated.yaml | 2 ++ .../schemas/openapi-project-generated.yaml | 6 ++---- ...oject-v0.0.1-pydantic-converted-clean.yaml | 13 ++++--------- .../project-v0.0.1-pydantic-converted.yaml | 19 ++++++++++++------- .../schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../src/models_library/services_ui.py | 9 +-------- .../api/v0/openapi.yaml | 6 ++++-- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- .../api/v0/openapi.yaml | 6 ++++-- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 6 ++++++ .../v0/schemas/project-v0.0.1-pydantic.json | 14 +++++++------- 15 files changed, 76 insertions(+), 53 deletions(-) diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml index 1479593ad2f..d5d53587ca6 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted-clean.yaml @@ -324,6 +324,7 @@ properties: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: @@ -489,6 +490,7 @@ properties: properties: minHeight: description: minimum Height of the textarea + exclusiveMinimum: 0 title: Minheight type: integer required: diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml index 26f1abdf176..f6ddc5cc80e 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml @@ -232,6 +232,7 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -422,6 +423,7 @@ properties: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -674,6 +676,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -745,6 +748,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -881,6 +885,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight @@ -1065,6 +1070,7 @@ definitions: minHeight: title: Minheight description: minimum Height of the textarea + exclusiveMinimum: 0 type: integer required: - minHeight diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml index ed219a58b63..46fde614c4b 100644 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ b/api/specs/common/schemas/openapi-node-meta-generated.yaml @@ -351,8 +351,10 @@ components: properties: minHeight: title: Minheight + exclusiveMinimum: true type: integer description: minimum Height of the textarea + minimum: 0 additionalProperties: false ValidationError: title: ValidationError diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index dbd7059a54d..1db8ddbc0d1 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -492,10 +492,8 @@ components: - FAILED - ABORTED type: string - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + description: "State of execution of a project's computational workflow\n\n \ + \ SEE StateType for task state\n " SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index 527c8a3484f..cf70872b601 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,10 +141,8 @@ properties: properties: value: allOf: - - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational workflow\n\ + \n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED @@ -714,11 +712,8 @@ properties: properties: currentStatus: allOf: - - description: 'State of execution of a project''s computational - workflow - - - SEE StateType for task state' + - description: "State of execution of a project's computational\ + \ workflow\n\n SEE StateType for task state\n " enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index 96e7800ca1d..6f853513502 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow + SEE StateType for task state - SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,7 +1003,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1042,7 +1043,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1510,7 +1512,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1687,7 +1690,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1791,7 +1795,8 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 8231d515779..95e2eba459b 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/packages/models-library/src/models_library/services_ui.py b/packages/models-library/src/models_library/services_ui.py index 7d3c52275fa..2933c09a212 100644 --- a/packages/models-library/src/models_library/services_ui.py +++ b/packages/models-library/src/models_library/services_ui.py @@ -10,15 +10,8 @@ class WidgetType(str, Enum): SelectBox = "SelectBox" -class PositiveIntWithExclusiveMinimumRemoved(PositiveInt): - # As we are trying to match this Pydantic model to a historical json schema "node-meta-v0.0.1" we need to remove this - @classmethod - def __modify_schema__(cls, field_schema): - field_schema.pop("exclusiveMinimum", None) - - class TextArea(BaseModel): - min_height: PositiveIntWithExclusiveMinimumRemoved = Field( + min_height: PositiveInt = Field( ..., alias="minHeight", description="minimum Height of the textarea" ) diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index 6eb6bec08af..6e4d529aa3c 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,7 +1302,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -1855,7 +1856,8 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 8231d515779..95e2eba459b 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", 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 12b5d24214d..e9705cbe321 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 @@ -2572,7 +2572,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED @@ -3125,7 +3126,8 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state + enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 35382a6950e..2efda637384 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -306,6 +306,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -561,6 +562,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1015,6 +1017,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1124,6 +1127,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1307,6 +1311,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, @@ -1555,6 +1560,7 @@ "minHeight": { "title": "Minheight", "description": "minimum Height of the textarea", + "exclusiveMinimum": 0, "type": "integer" } }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 8231d515779..95e2eba459b 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", + "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", "enum": [ "UNKNOWN", "PUBLISHED", From 0909b4ca02e3afbc3ca759947a939ab61cedebbc Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Sun, 19 Mar 2023 13:04:17 +0100 Subject: [PATCH 24/34] patching of project json schema - to work as before --- .../projects/project_models.py | 11 +++- .../unit/isolated/data/project-data.json | 64 +++++++++++++++++++ .../tests/unit/isolated/test__testit.py | 35 ++++++++++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 services/web/server/tests/unit/isolated/data/project-data.json create mode 100644 services/web/server/tests/unit/isolated/test__testit.py diff --git a/services/web/server/src/simcore_service_webserver/projects/project_models.py b/services/web/server/src/simcore_service_webserver/projects/project_models.py index b7a485e2038..b18349ca9a4 100644 --- a/services/web/server/src/simcore_service_webserver/projects/project_models.py +++ b/services/web/server/src/simcore_service_webserver/projects/project_models.py @@ -30,10 +30,19 @@ def to_project_type_db(cls, api_type: "ProjectTypeAPI") -> Optional[ProjectType] def setup_projects_model_schema(app: web.Application): # NOTE: inits once per app - # FIXME: schemas are hard-coded to api/V0!!! with resources.stream("api/v0/schemas/project-v0.0.1-pydantic.json") as fh: project_schema = json.load(fh) + # WARNING: Mar.2023 During changing to pydantic generated json schema + # found out there was BUG in the previously used project-v0.0.1.json schema + # This is a temporary patch, until the bug is fixed. + # https://github.com/ITISFoundation/osparc-simcore/issues/3992 + # Tested in test_validate_project_json_schema() + project_schema["properties"]["workbench"].pop("patternProperties") + project_schema["properties"]["ui"]["properties"]["workbench"].pop( + "patternProperties" + ) + if app.get(APP_JSONSCHEMA_SPECS_KEY) is None: app[APP_JSONSCHEMA_SPECS_KEY] = {"projects": project_schema} diff --git a/services/web/server/tests/unit/isolated/data/project-data.json b/services/web/server/tests/unit/isolated/data/project-data.json new file mode 100644 index 00000000000..d57ad0e6f4b --- /dev/null +++ b/services/web/server/tests/unit/isolated/data/project-data.json @@ -0,0 +1,64 @@ +{ + "uuid": "e7cbead8-f2ff-476f-999c-d68eb4011918", + "name": "solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.1.1/jobs/e7cbead8-f2ff-476f-999c-d68eb4011918", + "description": "Study associated to solver job:\n{\n \"id\": \"e7cbead8-f2ff-476f-999c-d68eb4011918\",\n \"name\": \"solvers/simcore%2Fservices%2Fcomp%2Fitis%2Fsleeper/releases/2.1.1/jobs/e7cbead8-f2ff-476f-999c-d68eb4011918\",\n \"inputs_checksum\": \"ab779fef37c800b6c012f1dcb0ea7c091036ba65faf2384460ab4a83a5dd948a\",\n \"created_at\": \"2023-03-19T06:55:13.455581\"\n}", + "thumbnail": "https://2xx2gy2ovf3r21jclkjio3x8-wpengine.netdna-ssl.com/wp-content/uploads/2018/12/API-Examples.jpg", + "creationDate": "2023-03-19T06:55:13.456Z", + "lastChangeDate": "2023-03-19T06:55:13.456Z", + "workbench": { + "6eb83026-f82b-5d95-96b0-b50daeee38ec": { + "key": "simcore/services/comp/itis/sleeper", + "version": "2.1.1", + "label": "sleeper", + "progress": null, + "thumbnail": null, + "runHash": null, + "inputs": { + "input_1": { + "store": 0, + "path": "api/7cab36a7-1efa-3541-920d-d1ba4806e2dc/file-with-number.txt", + "label": "file-with-number.txt", + "eTag": "c81e728d9d4c2f636f067f89cc14862c", + "dataset": null + }, + "input_2": 0.0, + "input_3": 0.0, + "input_4": 0.0 + }, + "inputsUnits": {}, + "inputAccess": null, + "inputNodes": [], + "outputs": {}, + "outputNode": null, + "outputNodes": null, + "parent": null, + "position": null, + "state": { + "modified": true, + "dependencies": [], + "currentStatus": "NOT_STARTED" + }, + "bootOptions": null + } + }, + "prjOwner": "api-placeholder@osparc.io", + "accessRights": {}, + "tags": [], + "classifiers": [], + "ui": { + "workbench": { + "6eb83026-f82b-5d95-96b0-b50daeee38ec": { + "position": { + "x": 633, + "y": 229 + }, + "marker": null + } + }, + "slideshow": {}, + "currentNodeId": "6eb83026-f82b-5d95-96b0-b50daeee38ec", + "annotations": {} + }, + "quality": {}, + "dev": {} +} diff --git a/services/web/server/tests/unit/isolated/test__testit.py b/services/web/server/tests/unit/isolated/test__testit.py new file mode 100644 index 00000000000..0a4a911e164 --- /dev/null +++ b/services/web/server/tests/unit/isolated/test__testit.py @@ -0,0 +1,35 @@ +import json +from pathlib import Path + +from servicelib.aiohttp import jsonschema_validation +from simcore_service_webserver._resources import resources + + +def test_validate_project_json_schema(): + CURRENT_DIR = Path(__file__).resolve().parent + + with open(CURRENT_DIR / "data/project-data.json") as f: + project = json.load(f) + + # NOTE: Mar.2023 Previous project-v0.0.1.json schema is passing validation + # even though it should fail. The reason is there is wrongly defined + # pattern properties in workbench which is ignored in practice. + # Current: "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$" + # Should be: "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + with resources.stream("api/v0/schemas/project-v0.0.1.json") as fh: + old_project_schema = json.load(fh) + + jsonschema_validation.validate_instance(project, old_project_schema) + + # This is new Pydantic generated json schema, that was modified + # so it works as the previous one. This should be fixed in: + # https://github.com/ITISFoundation/osparc-simcore/issues/3992 + with resources.stream("api/v0/schemas/project-v0.0.1-pydantic.json") as fh: + new_project_schema = json.load(fh) + + new_project_schema["properties"]["workbench"].pop("patternProperties") + new_project_schema["properties"]["ui"]["properties"]["workbench"].pop( + "patternProperties" + ) + + jsonschema_validation.validate_instance(project, new_project_schema) From bf7c000f41f5a2f04efc8533d7379ce78ace2e9b Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Sun, 19 Mar 2023 16:25:27 +0100 Subject: [PATCH 25/34] overwriting min length of HttpUrl to be back compatible --- .../schemas/project-v0.0.1-pydantic-converted.yaml | 2 +- .../common/schemas/project-v0.0.1-pydantic.json | 4 ++-- .../models-library/src/models_library/projects.py | 12 +++++++----- .../api/v0/schemas/project-v0.0.1-pydantic.json | 4 ++-- .../api/v0/schemas/project-v0.0.1-pydantic.json | 4 ++-- .../{test__testit.py => test__json_schema.py} | 0 6 files changed, 14 insertions(+), 12 deletions(-) rename services/web/server/tests/unit/isolated/{test__testit.py => test__json_schema.py} (100%) diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index 6f853513502..6a7e02a347a 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -20,8 +20,8 @@ properties: thumbnail: title: Thumbnail description: url of the project thumbnail - maxLength: 2083 minLength: 0 + maxLength: 2083 format: uri type: string example: https://placeimg.com/171/96/tech/grayscale/?0.jpg diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index 95e2eba459b..b9793c40bf1 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 4f116877bec..8eacf10e279 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -7,7 +7,7 @@ from typing import Any, Optional from uuid import UUID -from pydantic import BaseModel, EmailStr, Extra, Field, constr, validator +from pydantic import BaseModel, EmailStr, Extra, Field, HttpUrl, constr, validator from .basic_regex import DATE_RE, UUID_RE_BASE from .projects_access import AccessRights, GroupIDStr @@ -36,6 +36,11 @@ class ProjectType(str, Enum): STANDARD = "STANDARD" +class HttpUrlWithCustomMinLength(HttpUrl): + # Overwriting min length to be back compatible when generating OAS + min_length = 0 + + class BaseProjectModel(BaseModel): # Description of the project uuid: ProjectID = Field( @@ -54,13 +59,10 @@ class BaseProjectModel(BaseModel): description="longer one-line description about the project", examples=["Dabbling in temporal transitions ..."], ) - thumbnail: Optional[str] = Field( + thumbnail: Optional[HttpUrlWithCustomMinLength] = Field( ..., description="url of the project thumbnail", examples=["https://placeimg.com/171/96/tech/grayscale/?0.jpg"], - min_length=0, - max_length=2083, - format="uri", ) creation_date: datetime = Field(...) diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index 95e2eba459b..b9793c40bf1 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index 95e2eba459b..b9793c40bf1 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -31,11 +31,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the project thumbnail", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, diff --git a/services/web/server/tests/unit/isolated/test__testit.py b/services/web/server/tests/unit/isolated/test__json_schema.py similarity index 100% rename from services/web/server/tests/unit/isolated/test__testit.py rename to services/web/server/tests/unit/isolated/test__json_schema.py From ce749906a3dab6f417e8e0c62147a36a788fd471 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Sun, 19 Mar 2023 17:33:23 +0100 Subject: [PATCH 26/34] removing old json -converted.json files that are not used anymore --- api/specs/common/schemas/Makefile | 5 +- .../node-meta-v0.0.1-converted-clean.yaml | 332 ----------- .../schemas/node-meta-v0.0.1-pydantic.json | 2 +- .../schemas/openapi-project-generated.yaml | 6 +- .../project-v0.0.1-converted-clean.yaml | 551 ------------------ ...oject-v0.0.1-pydantic-converted-clean.yaml | 13 +- .../project-v0.0.1-pydantic-converted.yaml | 19 +- .../schemas/project-v0.0.1-pydantic.json | 14 +- .../api/v0/openapi.yaml | 6 +- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +- .../api/v0/openapi.yaml | 6 +- .../v0/schemas/project-v0.0.1-pydantic.json | 14 +- 12 files changed, 50 insertions(+), 932 deletions(-) delete mode 100644 api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml delete mode 100644 api/specs/common/schemas/project-v0.0.1-converted-clean.yaml mode change 100644 => 100755 api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml diff --git a/api/specs/common/schemas/Makefile b/api/specs/common/schemas/Makefile index 3df6bf28cab..880d3fccf28 100644 --- a/api/specs/common/schemas/Makefile +++ b/api/specs/common/schemas/Makefile @@ -1,8 +1,9 @@ .PHONY: all build clean help -objects = $(wildcard *.json) +objects = $(wildcard *-pydantic.json) outputs := $(objects:.json=-converted-clean.yaml) +depreciated_files = project-v0.0.1-converted.yaml node-meta-v0.0.1-converted.yaml TOOL_IMAGE_NAME := json-schema-to-openapi-schema @@ -16,6 +17,8 @@ all: check $(outputs) -v ${CURDIR}:/output \ $(TOOL_IMAGE_NAME) + rm -f $(depreciated_files) + .PRECIOUS: %-converted.yaml %-converted-clean.yaml:%-converted.yaml # remove the "definition" key from %-converted.yaml diff --git a/api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml b/api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml deleted file mode 100644 index 58b0445ed55..00000000000 --- a/api/specs/common/schemas/node-meta-v0.0.1-converted-clean.yaml +++ /dev/null @@ -1,332 +0,0 @@ -additionalProperties: false -description: Description of a simcore node 'class' with input and output -properties: - authors: - items: - additionalProperties: false - properties: - affiliation: - description: Affiliation of the author - example: Sense8 - type: string - email: - description: Email address - example: sun@sense.eight - format: email - type: string - name: - description: Name of the author - example: Sun Bak - type: string - required: - - name - - email - type: object - minItems: 1 - type: array - badges: - items: - additionalProperties: false - properties: - image: - description: Url to the shield - example: https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master - type: string - name: - description: Name of the subject - example: travis-ci - type: string - url: - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of - CI: build, test and pushing images''' - type: string - required: - - name - - image - - url - type: object - type: array - boot-options: - additionalProperties: true - description: Service defined boot options. These get injected in the service as - env variables. - title: Boot Options - type: object - x-patternProperties: - ^[_a-zA-Z0-9]+$: - properties: - default: - title: Default - type: string - description: - title: Description - type: string - items: - additionalProperties: - properties: - description: - title: Description - type: string - label: - title: Label - type: string - required: - - label - - description - title: BootOptionItem - type: object - title: Items - type: object - label: - title: Label - type: string - required: - - label - - description - - default - - items - title: BootOptionMode - type: object - contact: - description: email to correspond to the authors about the node - example: lab@net.flix - format: email - type: string - description: - description: human readable description of the purpose of the node - example: Our best node type - type: string - inputs: - additionalProperties: true - description: definition of the inputs of this node - type: object - x-patternProperties: - ^[-_a-zA-Z0-9]+$: - additionalProperties: false - description: all the input configurable for this service - properties: - contentSchema: - description: jsonschema of the content at this input/output. Required - when type='ref_contentSchema' - title: Content Schema - type: object - defaultValue: - description: initial value for this input - example: - - Dog - - true - type: - - string - - number - - integer - - boolean - description: - description: description of the property - example: - - Age in seconds since 1970 - type: string - displayOrder: - deprecated: true - description: 'DEPRECATED: new display order is taken from the item position. - This property will be removed.' - type: number - fileToKeyMap: - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - type: object - label: - description: short name for the property - example: - - Age - type: string - type: - description: data type expected on this input glob matching for data type - is allowed - example: - - number - - boolean - - data:*/* - - data:text/* - - data:[image/jpeg,image/png] - - data:application/json - - data:application/json;schema=https://my-schema/not/really/schema.json - - data:application/vnd.ms-excel - - data:text/plain - - data:application/hdf5 - - data:application/edu.ucdavis@ceclancy.xyz - pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - type: string - unit: - description: Units of this input value, if a physical quantity - title: Unit - type: string - widget: - anyOf: - - additionalProperties: false - properties: - minHeight: - description: minimum Height of the textarea - minimum: 1 - type: integer - type: - description: type of the property - enum: - - TextArea - type: string - required: - - type - type: object - - additionalProperties: false - properties: - structure: - items: - additionalProperties: false - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - properties: - key: - type: - - string - - boolean - - number - label: - type: string - required: - - key - - label - type: object - minItems: 1 - type: array - type: - description: type of the property - enum: - - SelectBox - type: string - required: - - type - - structure - type: object - description: custom widget to use instead of the default one determined - from the data-type - required: - - displayOrder - - label - - description - - type - type: object - integration-version: - description: integration version number - example: 1.0.0 - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - key: - description: distinctive name for the node based on the docker registry path - example: simcore/services/comp/itis/sleeper - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - name: - description: short, human readable name for the node - example: Fast Counter - type: string - outputs: - additionalProperties: true - description: definition of the outputs of this node - type: object - x-patternProperties: - ^[-_a-zA-Z0-9]+$: - additionalProperties: false - description: all the output produced by this node - properties: - contentSchema: - description: jsonschema of this input/output. Required when type='ref_contentSchema' - title: Content Schema - type: object - description: - description: description of the property - example: - - Age in seconds since 1970 - type: string - displayOrder: - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - type: number - fileToKeyMap: - description: Place the data stored in the named files and store it in - the locations pointed to by the respective output key. - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - patternProperties: - .+: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - type: object - label: - description: short name for the property - example: - - Age - type: string - type: - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - data:application/json - - 'data:application/vnd.ms-excel ' - - data:text/plain - - data:application/hdf5 - pattern: ^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$ - type: string - unit: - description: Units of the output value, if a physical quantity - title: Unit - type: string - required: - - displayOrder - - label - - description - - type - type: object - thumbnail: - description: url to the thumbnail - example: https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png - type: string - type: - description: service type - enum: - - frontend - - computational - - dynamic - example: computational - type: string - version: - description: service version number - example: 1.0.0 - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string -required: -- key -- version -- type -- name -- description -- authors -- contact -- inputs -- outputs -title: simcore node -type: object diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..6a5c0c7e6c7 100644 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/node-meta-v0.0.1-pydantic.json @@ -1820,4 +1820,4 @@ ] } } -} +} \ No newline at end of file diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml index 1db8ddbc0d1..dbd7059a54d 100644 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ b/api/specs/common/schemas/openapi-project-generated.yaml @@ -492,8 +492,10 @@ components: - FAILED - ABORTED type: string - description: "State of execution of a project's computational workflow\n\n \ - \ SEE StateType for task state\n " + description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' SimCoreFileLink: title: SimCoreFileLink required: diff --git a/api/specs/common/schemas/project-v0.0.1-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-converted-clean.yaml deleted file mode 100644 index ffbe44cc1e4..00000000000 --- a/api/specs/common/schemas/project-v0.0.1-converted-clean.yaml +++ /dev/null @@ -1,551 +0,0 @@ -additionalProperties: false -description: Description of a simcore project -properties: - accessRights: - additionalProperties: true - description: object containing the GroupID as key and read/write/execution permissions - as value - type: object - x-patternProperties: - ^\S+$: - additionalProperties: false - description: the group id - properties: - delete: - description: gives deletion rights - type: boolean - read: - description: gives read access - type: boolean - write: - description: gives write access - type: boolean - required: - - read - - write - - delete - type: object - classifiers: - description: Contains the reference to the project classifiers - example: some:id:to:a:classifier - items: - type: string - type: array - creationDate: - description: project creation date - example: '2018-07-01T11:13:43Z' - pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - description: - description: longer one-line description about the project - example: Dabbling in temporal transitions ... - type: string - dev: - description: object used for development purposes only - type: object - lastChangeDate: - description: last save date - example: '2018-07-01T11:13:43Z' - pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - name: - description: project name - example: Temporal Distortion Simulator - type: string - prjOwner: - description: user email - format: email - type: string - quality: - description: Object containing Quality Assessment related data - title: Quality - type: object - state: - anyOf: - - nullable: true - - additionalProperties: false - properties: - locked: - allOf: - - additionalProperties: false - properties: - owner: - allOf: - - additionalProperties: false - properties: - first_name: - description: Owner first name - example: - - John - title: First Name - type: string - last_name: - description: Owner last name - example: - - Smith - title: Last Name - type: string - user_id: - description: Owner's identifier when registered in the user's - database table - example: - - 2 - title: User Id - type: integer - required: - - user_id - - first_name - - last_name - title: Owner - type: object - description: If locked, the user that owns the lock - title: Owner - status: - description: The status of the project - enum: - - CLOSED - - CLOSING - - CLONING - - OPENING - - EXPORTING - - OPENED - title: Status - type: string - value: - description: True if the project is locked - title: Value - type: boolean - required: - - value - - status - title: ProjectLocked - type: object - description: The project lock state - title: Locked - state: - allOf: - - additionalProperties: false - properties: - value: - description: An enumeration. - enum: - - UNKNOWN - - NOT_STARTED - - PUBLISHED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - title: RunningState - type: string - required: - - value - title: ProjectRunningState - type: object - description: The project running state - title: State - required: - - locked - - state - title: ProjectState - type: object - description: Project state - title: State - tags: - items: - type: integer - type: array - thumbnail: - description: url of the latest screenshot of the project - example: https://placeimg.com/171/96/tech/grayscale/?0.jpg - format: uri - maxLength: 2083 - minLength: 0 - type: string - ui: - additionalProperties: true - properties: - annotations: - additionalProperties: true - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - additionalProperties: false - properties: - attributes: - description: svg attributes - type: object - color: - description: Annotation's color - example: - - '#FF0000' - - '#0000FF' - type: string - type: - description: Annotation type - example: - - rect - - text - type: string - required: - - type - - color - - attributes - type: object - currentNodeId: - format: uuid - type: string - slideshow: - additionalProperties: true - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - additionalProperties: false - properties: - instructions: - description: Instructions about what to do in this step - example: - - This is a **sleeper** - - Please, select the config file defined [in this link](asdf) - type: - - string - - 'null' - position: - description: Slide's position - example: - - 0 - - 2 - type: integer - required: - - position - type: object - workbench: - additionalProperties: true - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - additionalProperties: false - properties: - marker: - additionalProperties: false - properties: - color: - description: Marker's color - example: - - '#FF0000' - - '#0000FF' - type: string - required: - - color - type: object - position: - additionalProperties: false - properties: - x: - description: The x position - example: - - '12' - type: integer - y: - description: The y position - example: - - '15' - type: integer - required: - - x - - y - type: object - required: - - position - type: object - type: object - uuid: - description: project unique identifier - example: 07640335-a91f-468c-ab69-a374fa82078d - format: uuid - type: string - workbench: - additionalProperties: true - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$: - additionalProperties: false - properties: - bootOptions: - description: Some services provide alternative parameters to be injected - at boot time. The user selection should be stored here, and it will - overwrite the services's defaults. - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - title: Boot Options - type: object - inputAccess: - description: map with key - access level pairs - patternProperties: - ^[-_a-zA-Z0-9]+$: - default: ReadAndWrite - enum: - - Invisible - - ReadOnly - - ReadAndWrite - example: - - ReadOnly - type: string - type: object - inputNodes: - description: node IDs of where the node is connected to - example: - - nodeUuid1 - - nodeUuid2 - items: - format: uuid - type: string - type: array - inputs: - description: values of input properties - patternProperties: - ^[-_a-zA-Z0-9]+$: - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - additionalProperties: false - properties: - nodeUuid: - format: uuid - type: string - output: - pattern: ^[-_a-zA-Z0-9]+$ - type: string - required: - - nodeUuid - - output - type: object - - additionalProperties: false - properties: - dataset: - type: string - eTag: - type: string - label: - type: string - path: - type: string - store: - type: - - string - - integer - required: - - store - - path - type: object - - additionalProperties: false - properties: - downloadLink: - format: uri - maxLength: 65536 - minLength: 1 - type: string - label: - type: string - required: - - downloadLink - type: object - - items: {} - type: array - type: object - inputsUnits: - description: values of input unit - patternProperties: - ^[-_a-zA-Z0-9]+$: - example: - - kilo-meter - - milli-second - - micro-gram - - kelvin - type: string - type: object - key: - description: distinctive name for the node based on the docker registry - path - example: - - simcore/services/comp/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - label: - description: The short name of the node - example: - - JupyterLab - type: string - outputNode: - deprecated: true - type: boolean - outputNodes: - description: Used in group-nodes. Node IDs of those connected to the output - example: - - nodeUuid1 - - nodeUuid2 - items: - format: uuid - type: string - type: array - outputs: - default: {} - patternProperties: - ^[-_a-zA-Z0-9]+$: - oneOf: - - type: - - integer - - boolean - - string - - number - - 'null' - - additionalProperties: false - properties: - dataset: - type: string - eTag: - type: string - label: - type: string - path: - type: string - store: - type: - - string - - integer - required: - - store - - path - type: object - - additionalProperties: false - properties: - downloadLink: - format: uri - maxLength: 65536 - minLength: 1 - type: string - label: - type: string - required: - - downloadLink - type: object - - items: {} - type: array - type: object - parent: - description: Parent's (group-nodes') node ID s. - example: - - nodeUuid1 - - nodeUuid2 - format: uuid - type: - - 'null' - - string - position: - additionalProperties: false - deprecated: true - properties: - x: - description: The x position - example: - - '12' - type: integer - y: - description: The y position - example: - - '15' - type: integer - required: - - x - - y - type: object - progress: - description: the node progress value - maximum: 100 - minimum: 0 - type: number - runHash: - description: the hex digest of the resolved inputs +outputs hash at the - time when the last outputs were generated - example: - - a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2 - type: - - string - - 'null' - state: - additionalProperties: false - properties: - currentStatus: - default: NOT_STARTED - description: the node's current state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - example: - - RUNNING - - FAILED - type: string - dependencies: - description: contains the node inputs dependencies if they need to - be computed first - items: - format: uuid - type: string - title: Dependencies - type: array - uniqueItems: true - modified: - default: true - description: true if the node's outputs need to be re-computed - title: Modified - type: boolean - title: NodeState - type: object - thumbnail: - description: url of the latest screenshot of the node - example: - - https://placeimg.com/171/96/tech/grayscale/?0.jpg - format: uri - maxLength: 2083 - minLength: 0 - type: string - version: - description: semantic version number of the node - example: - - 1.0.0 - - 0.0.1 - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - required: - - key - - version - - label - type: object -required: -- uuid -- name -- description -- prjOwner -- accessRights -- creationDate -- lastChangeDate -- thumbnail -- workbench -title: simcore project -type: object diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml index cf70872b601..527c8a3484f 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted-clean.yaml @@ -141,8 +141,10 @@ properties: properties: value: allOf: - - description: "State of execution of a project's computational workflow\n\ - \n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED @@ -712,8 +714,11 @@ properties: properties: currentStatus: allOf: - - description: "State of execution of a project's computational\ - \ workflow\n\n SEE StateType for task state\n " + - description: 'State of execution of a project''s computational + workflow + + + SEE StateType for task state' enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml old mode 100644 new mode 100755 index 6a7e02a347a..d43fa129aed --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -499,8 +499,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -668,8 +668,8 @@ properties: State of execution of a project's computational workflow - SEE StateType for task state + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1003,8 +1003,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1043,8 +1042,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1512,8 +1510,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1690,8 +1687,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1795,8 +1791,7 @@ definitions: description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index b9793c40bf1..d1fe03283b5 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", diff --git a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml index 6e4d529aa3c..6eb6bec08af 100644 --- a/services/storage/src/simcore_service_storage/api/v0/openapi.yaml +++ b/services/storage/src/simcore_service_storage/api/v0/openapi.yaml @@ -1302,8 +1302,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -1856,8 +1855,7 @@ components: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index b9793c40bf1..d1fe03283b5 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", 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 e9705cbe321..12b5d24214d 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 @@ -2572,8 +2572,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED @@ -3126,8 +3125,7 @@ paths: - description: |- State of execution of a project's computational workflow - SEE StateType for task state - + SEE StateType for task state enum: - UNKNOWN - PUBLISHED diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index b9793c40bf1..d1fe03283b5 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -661,7 +661,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -902,7 +902,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1340,7 +1340,7 @@ }, "RunningState": { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -1380,7 +1380,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2017,7 +2017,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2254,7 +2254,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", @@ -2393,7 +2393,7 @@ "allOf": [ { "title": "RunningState", - "description": "State of execution of a project's computational workflow\n\n SEE StateType for task state\n ", + "description": "State of execution of a project's computational workflow\n\nSEE StateType for task state", "enum": [ "UNKNOWN", "PUBLISHED", From 2d81193f367e9a60fe80f7d176549e7cf931e2b0 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Sun, 19 Mar 2023 17:46:47 +0100 Subject: [PATCH 27/34] fix - HttpUrlWithCustomMinLenght dependency --- .../project-v0.0.1-pydantic-converted.yaml | 20 +++++++++---------- .../schemas/project-v0.0.1-pydantic.json | 16 +++++++-------- .../src/models_library/projects.py | 9 ++------- .../src/models_library/projects_nodes.py | 13 +++++++----- .../v0/schemas/project-v0.0.1-pydantic.json | 16 +++++++-------- .../v0/schemas/node-meta-v0.0.1-pydantic.json | 2 +- .../v0/schemas/project-v0.0.1-pydantic.json | 16 +++++++-------- 7 files changed, 45 insertions(+), 47 deletions(-) diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml index d43fa129aed..05e69dea54c 100755 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml @@ -51,20 +51,20 @@ properties: key: title: Key description: distinctive name for the node based on the docker registry path - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ example: - simcore/services/comp/itis/sleeper - simcore/services/dynamic/3dviewer - simcore/services/frontend/file-picker + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ type: string version: title: Version description: semantic version number of the node - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ example: - 1.0.0 - 0.0.1 + pattern: >- + ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ type: string label: title: Label @@ -81,10 +81,10 @@ properties: thumbnail: title: Thumbnail description: url of the latest screenshot of the node - maxLength: 2083 - minLength: 0 example: - https://placeimg.com/171/96/tech/grayscale/?0.jpg + minLength: 0 + maxLength: 2083 format: uri type: string runHash: @@ -1073,20 +1073,20 @@ definitions: key: title: Key description: distinctive name for the node based on the docker registry path - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ example: - simcore/services/comp/itis/sleeper - simcore/services/dynamic/3dviewer - simcore/services/frontend/file-picker + pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ type: string version: title: Version description: semantic version number of the node - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ example: - 1.0.0 - 0.0.1 + pattern: >- + ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ type: string label: title: Label @@ -1103,10 +1103,10 @@ definitions: thumbnail: title: Thumbnail description: url of the latest screenshot of the node - maxLength: 2083 - minLength: 0 example: - https://placeimg.com/171/96/tech/grayscale/?0.jpg + minLength: 0 + maxLength: 2083 format: uri type: string runHash: diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic.json b/api/specs/common/schemas/project-v0.0.1-pydantic.json index d1fe03283b5..91a645e4a7a 100644 --- a/api/specs/common/schemas/project-v0.0.1-pydantic.json +++ b/api/specs/common/schemas/project-v0.0.1-pydantic.json @@ -69,22 +69,22 @@ "key": { "title": "Key", "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "examples": [ "simcore/services/comp/itis/sleeper", "simcore/services/dynamic/3dviewer", "simcore/services/frontend/file-picker" ], + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "type": "string" }, "version": { "title": "Version", "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "examples": [ "1.0.0", "0.0.1" ], + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "type": "string" }, "label": { @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, @@ -1425,22 +1425,22 @@ "key": { "title": "Key", "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "examples": [ "simcore/services/comp/itis/sleeper", "simcore/services/dynamic/3dviewer", "simcore/services/frontend/file-picker" ], + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "type": "string" }, "version": { "title": "Version", "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "examples": [ "1.0.0", "0.0.1" ], + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "type": "string" }, "label": { @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, diff --git a/packages/models-library/src/models_library/projects.py b/packages/models-library/src/models_library/projects.py index 8eacf10e279..478c661641f 100644 --- a/packages/models-library/src/models_library/projects.py +++ b/packages/models-library/src/models_library/projects.py @@ -7,11 +7,11 @@ from typing import Any, Optional from uuid import UUID -from pydantic import BaseModel, EmailStr, Extra, Field, HttpUrl, constr, validator +from pydantic import BaseModel, EmailStr, Extra, Field, constr, validator from .basic_regex import DATE_RE, UUID_RE_BASE from .projects_access import AccessRights, GroupIDStr -from .projects_nodes import Node +from .projects_nodes import Node, HttpUrlWithCustomMinLength from .projects_nodes_io import NodeIDStr from .projects_state import ProjectState from .projects_ui import StudyUI @@ -36,11 +36,6 @@ class ProjectType(str, Enum): STANDARD = "STANDARD" -class HttpUrlWithCustomMinLength(HttpUrl): - # Overwriting min length to be back compatible when generating OAS - min_length = 0 - - class BaseProjectModel(BaseModel): # Description of the project uuid: ProjectID = Field( diff --git a/packages/models-library/src/models_library/projects_nodes.py b/packages/models-library/src/models_library/projects_nodes.py index c30ab1b0d19..7c55e08e434 100644 --- a/packages/models-library/src/models_library/projects_nodes.py +++ b/packages/models-library/src/models_library/projects_nodes.py @@ -15,6 +15,7 @@ StrictInt, constr, validator, + HttpUrl ) from .basic_types import EnvVarKey @@ -97,6 +98,11 @@ class Config: } +class HttpUrlWithCustomMinLength(HttpUrl): + # Overwriting min length to be back compatible when generating OAS + min_length = 0 + + class Node(BaseModel): key: ServiceKey = Field( ..., @@ -118,13 +124,10 @@ class Node(BaseModel): progress: Optional[float] = Field( None, ge=0, le=100, description="the node progress value" ) - thumbnail: Optional[str] = Field( + thumbnail: Optional[HttpUrlWithCustomMinLength] = Field( None, description="url of the latest screenshot of the node", - examples=["https://placeimg.com/171/96/tech/grayscale/?0.jpg"], - min_length=0, - max_length=2083, - format="uri", + examples=["https://placeimg.com/171/96/tech/grayscale/?0.jpg"] ) # RUN HASH diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json index d1fe03283b5..91a645e4a7a 100644 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1-pydantic.json @@ -69,22 +69,22 @@ "key": { "title": "Key", "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "examples": [ "simcore/services/comp/itis/sleeper", "simcore/services/dynamic/3dviewer", "simcore/services/frontend/file-picker" ], + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "type": "string" }, "version": { "title": "Version", "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "examples": [ "1.0.0", "0.0.1" ], + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "type": "string" }, "label": { @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, @@ -1425,22 +1425,22 @@ "key": { "title": "Key", "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "examples": [ "simcore/services/comp/itis/sleeper", "simcore/services/dynamic/3dviewer", "simcore/services/frontend/file-picker" ], + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "type": "string" }, "version": { "title": "Version", "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "examples": [ "1.0.0", "0.0.1" ], + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "type": "string" }, "label": { @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json index 2efda637384..6a5c0c7e6c7 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1-pydantic.json @@ -1820,4 +1820,4 @@ ] } } -} +} \ No newline at end of file diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json index d1fe03283b5..91a645e4a7a 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1-pydantic.json @@ -69,22 +69,22 @@ "key": { "title": "Key", "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "examples": [ "simcore/services/comp/itis/sleeper", "simcore/services/dynamic/3dviewer", "simcore/services/frontend/file-picker" ], + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "type": "string" }, "version": { "title": "Version", "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "examples": [ "1.0.0", "0.0.1" ], + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "type": "string" }, "label": { @@ -105,11 +105,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, @@ -1425,22 +1425,22 @@ "key": { "title": "Key", "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "examples": [ "simcore/services/comp/itis/sleeper", "simcore/services/dynamic/3dviewer", "simcore/services/frontend/file-picker" ], + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", "type": "string" }, "version": { "title": "Version", "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "examples": [ "1.0.0", "0.0.1" ], + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", "type": "string" }, "label": { @@ -1461,11 +1461,11 @@ "thumbnail": { "title": "Thumbnail", "description": "url of the latest screenshot of the node", - "maxLength": 2083, - "minLength": 0, "examples": [ "https://placeimg.com/171/96/tech/grayscale/?0.jpg" ], + "minLength": 0, + "maxLength": 2083, "format": "uri", "type": "string" }, From f3a217c3c0948d13f2c0b86aefb42e2404ada62b Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 20 Mar 2023 08:20:42 +0100 Subject: [PATCH 28/34] commented by a mistake --- services/web/server/Makefile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/services/web/server/Makefile b/services/web/server/Makefile index 7997ba098ce..2819dc09da7 100644 --- a/services/web/server/Makefile +++ b/services/web/server/Makefile @@ -30,14 +30,14 @@ run-devel: ## runs app with pg service -# _project_models_rest.py: ## auto-generates pydantic model for project rest API model -# # auto-generates $@ from $< -# datamodel-codegen \ -# --input $(CURDIR)/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json \ -# --input-file-type jsonschema \ -# --snake-case-field \ -# --use-schema-description \ -# --output $@ +_project_models_rest.py: ## auto-generates pydantic model for project rest API model + # auto-generates $@ from $< + datamodel-codegen \ + --input $(CURDIR)/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json \ + --input-file-type jsonschema \ + --snake-case-field \ + --use-schema-description \ + --output $@ From 7214f5fd4ca13298462d8df5b17601e77a8c79c3 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 20 Mar 2023 08:21:32 +0100 Subject: [PATCH 29/34] removing helper yaml files + removing old json schema files --- api/specs/common/schemas/Makefile | 6 +- .../node-meta-v0.0.1-pydantic-converted.yaml | 1270 ----------- .../common/schemas/node-meta-v0.0.1.json | 477 ---- .../schemas/openapi-node-meta-generated.yaml | 403 ---- .../schemas/openapi-project-generated.yaml | 596 ----- .../project-v0.0.1-pydantic-converted.yaml | 2023 ----------------- api/specs/common/schemas/project-v0.0.1.json | 768 ------- .../webserver/scripts/openapi_node_meta.py | 9 +- .../webserver/scripts/openapi_project.py | 9 +- 9 files changed, 11 insertions(+), 5550 deletions(-) delete mode 100644 api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml delete mode 100644 api/specs/common/schemas/node-meta-v0.0.1.json delete mode 100644 api/specs/common/schemas/openapi-node-meta-generated.yaml delete mode 100644 api/specs/common/schemas/openapi-project-generated.yaml delete mode 100755 api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml delete mode 100644 api/specs/common/schemas/project-v0.0.1.json diff --git a/api/specs/common/schemas/Makefile b/api/specs/common/schemas/Makefile index 880d3fccf28..f30fdb00a05 100644 --- a/api/specs/common/schemas/Makefile +++ b/api/specs/common/schemas/Makefile @@ -3,7 +3,7 @@ objects = $(wildcard *-pydantic.json) outputs := $(objects:.json=-converted-clean.yaml) -depreciated_files = project-v0.0.1-converted.yaml node-meta-v0.0.1-converted.yaml +helper_files = project-v0.0.1-pydantic-converted.yaml node-meta-v0.0.1-pydantic-converted.yaml TOOL_IMAGE_NAME := json-schema-to-openapi-schema @@ -17,13 +17,13 @@ all: check $(outputs) -v ${CURDIR}:/output \ $(TOOL_IMAGE_NAME) - rm -f $(depreciated_files) - .PRECIOUS: %-converted.yaml %-converted-clean.yaml:%-converted.yaml # remove the "definition" key from %-converted.yaml python scripts/remove_definitions.py $^ $@ + rm -f $^ + # target: check – Checks whether tool is installed check: @docker history $(TOOL_IMAGE_NAME) 2>/dev/null \ diff --git a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml deleted file mode 100644 index f6ddc5cc80e..00000000000 --- a/api/specs/common/schemas/node-meta-v0.0.1-pydantic-converted.yaml +++ /dev/null @@ -1,1270 +0,0 @@ -title: ServiceDockerData -description: |- - Static metadata for a service injected in the image labels - - This is one to one with node-meta-v0.0.1.json -type: object -properties: - name: - title: Name - description: short, human readable name for the node - example: Fast Counter - type: string - thumbnail: - title: Thumbnail - description: url to the thumbnail - minLength: 1 - maxLength: 2083 - format: uri - type: string - example: >- - https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png - description: - title: Description - description: human readable description of the purpose of the node - type: string - example: Our best node type - key: - title: Key - description: distinctive name for the node based on the docker registry path - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - example: simcore/services/comp/itis/sleeper - version: - title: Version - description: service version number - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - example: 1.0.0 - integration-version: - title: Integration-Version - description: integration version number - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - example: 1.0.0 - type: - description: service type - allOf: - - title: ServiceType - description: An enumeration. - enum: - - computational - - dynamic - - frontend - - backend - type: string - example: computational - badges: - title: Badges - type: array - items: - title: Badge - type: object - properties: - name: - title: Name - description: Name of the subject - type: string - example: travis-ci - image: - title: Image - description: Url to the badge - minLength: 1 - maxLength: 2083 - format: uri - type: string - example: >- - https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master - url: - title: Url - description: Link to the status - minLength: 1 - maxLength: 2083 - format: uri - type: string - example: >- - https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: - build, test and pushing images' - required: - - name - - image - - url - additionalProperties: false - authors: - title: Authors - minItems: 1 - type: array - items: - title: Author - type: object - properties: - name: - title: Name - description: Name of the author - example: Jim Knopf - type: string - email: - title: Email - description: Email address - type: string - format: email - example: sun@sense.eight - affiliation: - title: Affiliation - description: Affiliation of the author - type: string - example: Sense8 - required: - - name - - email - additionalProperties: false - contact: - title: Contact - description: email to correspond to the authors about the node - type: string - format: email - example: lab@net.flix - inputs: - title: Inputs - description: definition of the inputs of this node - type: object - x-patternProperties: - ^[-_a-zA-Z0-9]+$: - title: ServiceInput - description: Metadata on a service input port - type: object - properties: - displayOrder: - title: Displayorder - description: >- - DEPRECATED: new display order is taken from the item position. - This will be removed. - deprecated: true - type: number - label: - title: Label - description: short name for the property - example: Age - type: string - description: - title: Description - description: description of the property - example: Age in seconds since 1970 - type: string - type: - title: Type - description: >- - data type expected on this input glob matching for data type is - allowed - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - example: - - number - - boolean - - data:*/* - - data:text/* - - data:[image/jpeg,image/png] - - data:application/json - - >- - data:application/json;schema=https://my-schema/not/really/schema.json - - data:application/vnd.ms-excel - - data:text/plain - - data:application/hdf5 - - data:application/edu.ucdavis@ceclancy.xyz - type: string - contentSchema: - title: Contentschema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - title: Filetokeymap - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - type: object - patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - unit: - title: Unit - description: Units, when it refers to a physical quantity - type: string - defaultValue: - title: Defaultvalue - example: - - Dog - - true - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - widget: - title: Widget - description: >- - custom widget to use instead of the default one determined from - the data-type - allOf: - - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - exclusiveMinimum: 0 - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - required: - - label - - description - - type - additionalProperties: false - example: - - displayOrder: 1 - label: Input files - file-wo-widget - description: Files downloaded from service connected at the input - type: data:*/* - - displayOrder: 2 - label: Sleep Time - v2 - description: Time to wait before completion - type: number - defaultValue: 0 - unit: second - widget: - type: TextArea - details: - minHeight: 3 - - label: Sleep Time - latest - description: Time to wait before completion - type: number - defaultValue: 0 - unit: second - widget: - type: TextArea - details: - minHeight: 3 - - label: array_numbers - description: Some array of numbers - type: ref_contentSchema - contentSchema: - title: list[number] - type: array - items: - type: number - - label: my_object - description: Some object - type: ref_contentSchema - contentSchema: - title: an object named A - type: object - properties: - i: - title: Int - type: integer - default: 3 - b: - title: Bool - type: boolean - s: - title: Str - type: string - required: - - b - - s - additionalProperties: true - outputs: - title: Outputs - description: definition of the outputs of this node - type: object - x-patternProperties: - ^[-_a-zA-Z0-9]+$: - title: ServiceOutput - description: Base class for service input/outputs - type: object - properties: - displayOrder: - title: Displayorder - description: >- - DEPRECATED: new display order is taken from the item position. - This will be removed. - deprecated: true - type: number - label: - title: Label - description: short name for the property - example: Age - type: string - description: - title: Description - description: description of the property - example: Age in seconds since 1970 - type: string - type: - title: Type - description: >- - data type expected on this input glob matching for data type is - allowed - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - example: - - number - - boolean - - data:*/* - - data:text/* - - data:[image/jpeg,image/png] - - data:application/json - - >- - data:application/json;schema=https://my-schema/not/really/schema.json - - data:application/vnd.ms-excel - - data:text/plain - - data:application/hdf5 - - data:application/edu.ucdavis@ceclancy.xyz - type: string - contentSchema: - title: Contentschema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - title: Filetokeymap - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - type: object - patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - unit: - title: Unit - description: Units, when it refers to a physical quantity - type: string - widget: - title: Widget - description: >- - custom widget to use instead of the default one determined from - the data-type - deprecated: true - allOf: - - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - exclusiveMinimum: 0 - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - required: - - label - - description - - type - additionalProperties: false - example: - - displayOrder: 2 - label: Time Slept - description: Time the service waited before completion - type: number - - displayOrder: 2 - label: Time Slept - units - description: Time the service waited before completion - type: number - unit: second - - label: Time Slept - w/o displayorder - description: Time the service waited before completion - type: number - unit: second - - label: Output file 1 - displayOrder: 4 - description: Output file uploaded from the outputs folder - type: data:*/* - additionalProperties: true - boot-options: - title: Boot-Options - description: >- - Service defined boot options. These get injected in the service as env - variables. - type: object - x-patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - title: BootOption - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootChoice - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - example: - - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode - - label: Application theme - description: Select a theme for the application - default: b - items: - a: - label: Clear - description: Using white background - b: - label: Dark - description: Using black and gray tones - required: - - label - - description - - default - - items - example: - - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode - - label: Application theme - description: Select a theme for the application - default: b - items: - a: - label: Clear - description: Using white background - b: - label: Dark - description: Using black and gray tones - additionalProperties: true -required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs -additionalProperties: false -definitions: - ServiceType: - title: ServiceType - description: An enumeration. - enum: - - computational - - dynamic - - frontend - - backend - type: string - Badge: - title: Badge - type: object - properties: - name: - title: Name - description: Name of the subject - example: - - travis-ci - - coverals.io - - github.io - type: string - image: - title: Image - description: Url to the badge - example: - - >- - https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master - - >- - https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master - - >- - https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation - minLength: 1 - maxLength: 2083 - format: uri - type: string - url: - title: Url - description: Link to the status - example: - - >- - https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: - build, test and pushing images' - - >- - https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master - 'Test coverage' - - https://itisfoundation.github.io/ - minLength: 1 - maxLength: 2083 - format: uri - type: string - required: - - name - - image - - url - additionalProperties: false - Author: - title: Author - type: object - properties: - name: - title: Name - description: Name of the author - example: Jim Knopf - type: string - email: - title: Email - description: Email address - example: - - sun@sense.eight - - deleen@minbar.bab - type: string - format: email - affiliation: - title: Affiliation - description: Affiliation of the author - example: - - Sense8 - - Babylon 5 - type: string - required: - - name - - email - additionalProperties: false - WidgetType: - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - TextArea: - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - exclusiveMinimum: 0 - type: integer - required: - - minHeight - additionalProperties: false - Structure: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - SelectBox: - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - Widget: - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - exclusiveMinimum: 0 - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - ServiceInput: - title: ServiceInput - description: Metadata on a service input port - type: object - properties: - displayOrder: - title: Displayorder - description: >- - DEPRECATED: new display order is taken from the item position. This - will be removed. - deprecated: true - type: number - label: - title: Label - description: short name for the property - example: Age - type: string - description: - title: Description - description: description of the property - example: Age in seconds since 1970 - type: string - type: - title: Type - description: >- - data type expected on this input glob matching for data type is - allowed - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - example: - - number - - boolean - - data:*/* - - data:text/* - - data:[image/jpeg,image/png] - - data:application/json - - >- - data:application/json;schema=https://my-schema/not/really/schema.json - - data:application/vnd.ms-excel - - data:text/plain - - data:application/hdf5 - - data:application/edu.ucdavis@ceclancy.xyz - type: string - contentSchema: - title: Contentschema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - title: Filetokeymap - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - type: object - patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - unit: - title: Unit - description: Units, when it refers to a physical quantity - type: string - defaultValue: - title: Defaultvalue - example: - - Dog - - true - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - widget: - title: Widget - description: >- - custom widget to use instead of the default one determined from the - data-type - allOf: - - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - exclusiveMinimum: 0 - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - required: - - label - - description - - type - additionalProperties: false - example: - - displayOrder: 1 - label: Input files - file-wo-widget - description: Files downloaded from service connected at the input - type: data:*/* - - displayOrder: 2 - label: Sleep Time - v2 - description: Time to wait before completion - type: number - defaultValue: 0 - unit: second - widget: - type: TextArea - details: - minHeight: 3 - - label: Sleep Time - latest - description: Time to wait before completion - type: number - defaultValue: 0 - unit: second - widget: - type: TextArea - details: - minHeight: 3 - - label: array_numbers - description: Some array of numbers - type: ref_contentSchema - contentSchema: - title: list[number] - type: array - items: - type: number - - label: my_object - description: Some object - type: ref_contentSchema - contentSchema: - title: an object named A - type: object - properties: - i: - title: Int - type: integer - default: 3 - b: - title: Bool - type: boolean - s: - title: Str - type: string - required: - - b - - s - ServiceOutput: - title: ServiceOutput - description: Base class for service input/outputs - type: object - properties: - displayOrder: - title: Displayorder - description: >- - DEPRECATED: new display order is taken from the item position. This - will be removed. - deprecated: true - type: number - label: - title: Label - description: short name for the property - example: Age - type: string - description: - title: Description - description: description of the property - example: Age in seconds since 1970 - type: string - type: - title: Type - description: >- - data type expected on this input glob matching for data type is - allowed - pattern: >- - ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - example: - - number - - boolean - - data:*/* - - data:text/* - - data:[image/jpeg,image/png] - - data:application/json - - >- - data:application/json;schema=https://my-schema/not/really/schema.json - - data:application/vnd.ms-excel - - data:text/plain - - data:application/hdf5 - - data:application/edu.ucdavis@ceclancy.xyz - type: string - contentSchema: - title: Contentschema - description: >- - jsonschema of this input/output. Required when - type='ref_contentSchema' - type: object - fileToKeyMap: - title: Filetokeymap - description: Place the data associated with the named keys in files - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - type: object - patternProperties: - .+: - type: string - pattern: ^[-_a-zA-Z0-9]+$ - unit: - title: Unit - description: Units, when it refers to a physical quantity - type: string - widget: - title: Widget - description: >- - custom widget to use instead of the default one determined from the - data-type - deprecated: true - allOf: - - title: Widget - type: object - properties: - type: - description: type of the property - allOf: - - title: WidgetType - description: An enumeration. - enum: - - TextArea - - SelectBox - type: string - details: - title: Details - anyOf: - - title: TextArea - type: object - properties: - minHeight: - title: Minheight - description: minimum Height of the textarea - exclusiveMinimum: 0 - type: integer - required: - - minHeight - additionalProperties: false - - title: SelectBox - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - title: Structure - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - required: - - key - - label - additionalProperties: false - required: - - structure - additionalProperties: false - required: - - type - - details - additionalProperties: false - required: - - label - - description - - type - additionalProperties: false - example: - - displayOrder: 2 - label: Time Slept - description: Time the service waited before completion - type: number - - displayOrder: 2 - label: Time Slept - units - description: Time the service waited before completion - type: number - unit: second - - label: Time Slept - w/o displayorder - description: Time the service waited before completion - type: number - unit: second - - label: Output file 1 - displayOrder: 4 - description: Output file uploaded from the outputs folder - type: data:*/* - BootChoice: - title: BootChoice - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - example: - - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode - - label: Application theme - description: Select a theme for the application - default: b - items: - a: - label: Clear - description: Using white background - b: - label: Dark - description: Using black and gray tones - BootOption: - title: BootOption - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootChoice - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - example: - - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode - - label: Application theme - description: Select a theme for the application - default: b - items: - a: - label: Clear - description: Using white background - b: - label: Dark - description: Using black and gray tones - required: - - label - - description - - default - - items - example: - - label: Boot mode - description: Start it in web page mode - default: '0' - items: - '0': - label: Non Voila - description: Tooltip for non Voila boot mode - '1': - label: Voila - description: Tooltip for Voila boot mode - - label: Application theme - description: Select a theme for the application - default: b - items: - a: - label: Clear - description: Using white background - b: - label: Dark - description: Using black and gray tones -example: - name: oSparc Python Runner - key: simcore/services/comp/osparc-python-runner - type: computational - integration-version: 1.0.0 - version: 1.7.0 - description: oSparc Python Runner - contact: smith@company.com - authors: - - name: John Smith - email: smith@company.com - affiliation: Company - - name: Richard Brown - email: brown@uni.edu - affiliation: University - inputs: - input_1: - displayOrder: 1 - label: Input data - description: Any code, requirements or data file - type: data:*/* - outputs: - output_1: - displayOrder: 1 - label: Output data - description: All data produced by the script is zipped as output_data.zip - type: data:*/* - fileToKeyMap: - output_data.zip: output_1 diff --git a/api/specs/common/schemas/node-meta-v0.0.1.json b/api/specs/common/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/api/specs/common/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/api/specs/common/schemas/openapi-node-meta-generated.yaml b/api/specs/common/schemas/openapi-node-meta-generated.yaml deleted file mode 100644 index 46fde614c4b..00000000000 --- a/api/specs/common/schemas/openapi-node-meta-generated.yaml +++ /dev/null @@ -1,403 +0,0 @@ -paths: - ? '' - : get: - summary: Get Project Inputs - description: New in version *0.10* - operationId: get_project_inputs_get - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/ServiceDockerData' - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: {} -components: - schemas: - Author: - title: Author - required: - - name - - email - type: object - properties: - name: - title: Name - type: string - description: Name of the author - example: Jim Knopf - email: - title: Email - type: string - description: Email address - format: email - affiliation: - title: Affiliation - type: string - description: Affiliation of the author - additionalProperties: false - Badge: - title: Badge - required: - - name - - image - - url - type: object - properties: - name: - title: Name - type: string - description: Name of the subject - image: - title: Image - maxLength: 2083 - minLength: 1 - type: string - description: Url to the badge - format: uri - url: - title: Url - maxLength: 2083 - minLength: 1 - type: string - description: Link to the status - format: uri - additionalProperties: false - BootChoice: - title: BootChoice - required: - - label - - description - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - BootOption: - title: BootOption - required: - - label - - description - - default - - items - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - $ref: '#/components/schemas/BootChoice' - HTTPValidationError: - title: HTTPValidationError - type: object - properties: - detail: - title: Detail - type: array - items: - $ref: '#/components/schemas/ValidationError' - SelectBox: - title: SelectBox - required: - - structure - type: object - properties: - structure: - title: Structure - minItems: 1 - type: array - items: - $ref: '#/components/schemas/Structure' - additionalProperties: false - ServiceDockerData: - title: ServiceDockerData - required: - - name - - description - - key - - version - - type - - authors - - contact - - inputs - - outputs - type: object - properties: - name: - title: Name - type: string - description: short, human readable name for the node - example: Fast Counter - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 1 - type: string - description: url to the thumbnail - format: uri - description: - title: Description - type: string - description: human readable description of the purpose of the node - key: - title: Key - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - description: distinctive name for the node based on the docker registry - path - version: - title: Version - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - description: service version number - integration-version: - title: Integration-Version - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - description: integration version number - type: - allOf: - - $ref: '#/components/schemas/ServiceType' - description: service type - badges: - title: Badges - type: array - items: - $ref: '#/components/schemas/Badge' - authors: - title: Authors - minItems: 1 - type: array - items: - $ref: '#/components/schemas/Author' - contact: - title: Contact - type: string - description: email to correspond to the authors about the node - format: email - inputs: - title: Inputs - type: object - description: definition of the inputs of this node - outputs: - title: Outputs - type: object - description: definition of the outputs of this node - boot-options: - title: Boot-Options - type: object - description: Service defined boot options. These get injected in the service - as env variables. - additionalProperties: false - description: 'Static metadata for a service injected in the image labels - - - This is one to one with node-meta-v0.0.1.json' - ServiceInput: - title: ServiceInput - required: - - label - - description - - type - type: object - properties: - displayOrder: - title: Displayorder - type: number - description: 'DEPRECATED: new display order is taken from the item position. - This will be removed.' - deprecated: true - label: - title: Label - type: string - description: short name for the property - example: Age - description: - title: Description - type: string - description: description of the property - example: Age in seconds since 1970 - type: - title: Type - pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - type: string - description: data type expected on this input glob matching for data type - is allowed - contentSchema: - title: Contentschema - type: object - description: jsonschema of this input/output. Required when type='ref_contentSchema' - fileToKeyMap: - title: Filetokeymap - type: object - description: Place the data associated with the named keys in files - unit: - title: Unit - type: string - description: Units, when it refers to a physical quantity - defaultValue: - title: Defaultvalue - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - widget: - title: Widget - allOf: - - $ref: '#/components/schemas/Widget' - description: custom widget to use instead of the default one determined - from the data-type - additionalProperties: false - description: Metadata on a service input port - ServiceOutput: - title: ServiceOutput - required: - - label - - description - - type - type: object - properties: - displayOrder: - title: Displayorder - type: number - description: 'DEPRECATED: new display order is taken from the item position. - This will be removed.' - deprecated: true - label: - title: Label - type: string - description: short name for the property - example: Age - description: - title: Description - type: string - description: description of the property - example: Age in seconds since 1970 - type: - title: Type - pattern: ^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$ - type: string - description: data type expected on this input glob matching for data type - is allowed - contentSchema: - title: Contentschema - type: object - description: jsonschema of this input/output. Required when type='ref_contentSchema' - fileToKeyMap: - title: Filetokeymap - type: object - description: Place the data associated with the named keys in files - unit: - title: Unit - type: string - description: Units, when it refers to a physical quantity - widget: - title: Widget - allOf: - - $ref: '#/components/schemas/Widget' - description: custom widget to use instead of the default one determined - from the data-type - deprecated: true - additionalProperties: false - description: Base class for service input/outputs - ServiceType: - title: ServiceType - enum: - - computational - - dynamic - - frontend - - backend - type: string - description: An enumeration. - Structure: - title: Structure - required: - - key - - label - type: object - properties: - key: - title: Key - anyOf: - - type: string - - type: boolean - - type: number - label: - title: Label - type: string - additionalProperties: false - TextArea: - title: TextArea - required: - - minHeight - type: object - properties: - minHeight: - title: Minheight - exclusiveMinimum: true - type: integer - description: minimum Height of the textarea - minimum: 0 - additionalProperties: false - ValidationError: - title: ValidationError - required: - - loc - - msg - - type - type: object - properties: - loc: - title: Location - type: array - items: - anyOf: - - type: string - - type: integer - msg: - title: Message - type: string - type: - title: Error Type - type: string - Widget: - title: Widget - required: - - type - - details - type: object - properties: - type: - allOf: - - $ref: '#/components/schemas/WidgetType' - description: type of the property - details: - title: Details - anyOf: - - $ref: '#/components/schemas/TextArea' - - $ref: '#/components/schemas/SelectBox' - additionalProperties: false - WidgetType: - title: WidgetType - enum: - - TextArea - - SelectBox - type: string - description: An enumeration. diff --git a/api/specs/common/schemas/openapi-project-generated.yaml b/api/specs/common/schemas/openapi-project-generated.yaml deleted file mode 100644 index dbd7059a54d..00000000000 --- a/api/specs/common/schemas/openapi-project-generated.yaml +++ /dev/null @@ -1,596 +0,0 @@ -paths: - ? '' - : get: - summary: Get Project Inputs - description: New in version *0.10* - operationId: get_project_inputs_get - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/Project' - required: true - responses: - '200': - description: Successful Response - content: - application/json: - schema: {} -components: - schemas: - AccessEnum: - title: AccessEnum - enum: - - ReadAndWrite - - Invisible - - ReadOnly - type: string - description: An enumeration. - AccessRights: - title: AccessRights - required: - - read - - write - - delete - type: object - properties: - read: - title: Read - type: boolean - description: gives read access - write: - title: Write - type: boolean - description: gives write access - delete: - title: Delete - type: boolean - description: gives deletion rights - additionalProperties: false - Annotation: - title: Annotation - required: - - type - - color - - attributes - type: object - properties: - type: - title: Type - enum: - - rect - - text - type: string - color: - title: Color - type: string - format: color - attributes: - title: Attributes - type: object - description: svg attributes - additionalProperties: false - DatCoreFileLink: - title: DatCoreFileLink - required: - - store - - path - - label - - dataset - type: object - properties: - store: - title: Store - type: integer - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - path: - title: Path - anyOf: - - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - type: string - - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - type: string - description: The path to the file in the storage provider domain - label: - title: Label - type: string - description: The real file name - eTag: - title: Etag - type: string - description: Entity tag that uniquely represents the file. The method to - generate the tag is not specified (black box). - dataset: - title: Dataset - type: string - description: Unique identifier to access the dataset on datcore (REQUIRED - for datcore) - additionalProperties: false - description: I/O port type to hold a link to a file in DATCORE storage - DownloadLink: - title: DownloadLink - required: - - downloadLink - type: object - properties: - downloadLink: - title: Downloadlink - maxLength: 65536 - minLength: 1 - type: string - format: uri - label: - title: Label - type: string - additionalProperties: false - description: I/O port type to hold a generic download link to a file (e.g. S3 - pre-signed link, etc) - HTTPValidationError: - title: HTTPValidationError - type: object - properties: - detail: - title: Detail - type: array - items: - $ref: '#/components/schemas/ValidationError' - Marker: - title: Marker - required: - - color - type: object - properties: - color: - title: Color - type: string - format: color - additionalProperties: false - Node: - title: Node - required: - - key - - version - - label - type: object - properties: - key: - title: Key - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - description: distinctive name for the node based on the docker registry - path - version: - title: Version - pattern: ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - description: semantic version number of the node - label: - title: Label - type: string - description: The short name of the node - progress: - title: Progress - maximum: 100.0 - minimum: 0.0 - type: number - description: the node progress value - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 0 - type: string - description: url of the latest screenshot of the node - format: uri - runHash: - anyOf: - - type: 'null' - - title: Runhash - type: string - description: the hex digest of the resolved inputs +outputs hash at the - time when the last outputs were generated - inputs: - title: Inputs - type: object - description: values of input properties - inputsUnits: - title: Inputsunits - type: object - description: Overrides default unit (if any) defined in the service for - each port - inputAccess: - type: object - description: map with key - access level pairs - inputNodes: - title: Inputnodes - type: array - items: - type: string - format: uuid - description: node IDs of where the node is connected to - outputs: - title: Outputs - type: object - description: values of output properties - outputNode: - title: Outputnode - type: boolean - deprecated: true - outputNodes: - title: Outputnodes - type: array - items: - type: string - format: uuid - description: Used in group-nodes. Node IDs of those connected to the output - parent: - anyOf: - - type: 'null' - - title: Parent - type: string - description: Parent's (group-nodes') node ID s. Used to group - format: uuid - position: - title: Position - allOf: - - $ref: '#/components/schemas/Position' - description: Use projects_ui.WorkbenchUI.position instead - deprecated: true - state: - title: State - allOf: - - $ref: '#/components/schemas/NodeState' - description: The node's state object - bootOptions: - title: Bootoptions - type: object - description: Some services provide alternative parameters to be injected - at boot time. The user selection should be stored here, and it will overwrite - the services's defaults. - additionalProperties: false - NodeState: - title: NodeState - type: object - properties: - modified: - title: Modified - type: boolean - description: true if the node's outputs need to be re-computed - default: true - dependencies: - title: Dependencies - uniqueItems: true - type: array - items: - type: string - format: uuid - description: contains the node inputs dependencies if they need to be computed - first - currentStatus: - allOf: - - $ref: '#/components/schemas/RunningState' - description: the node's current state - default: NOT_STARTED - additionalProperties: false - Owner: - title: Owner - required: - - user_id - - first_name - - last_name - type: object - properties: - user_id: - title: User Id - type: integer - description: Owner's identifier when registered in the user's database table - first_name: - title: First Name - type: string - description: Owner first name - last_name: - title: Last Name - type: string - description: Owner last name - additionalProperties: false - PortLink: - title: PortLink - required: - - nodeUuid - - output - type: object - properties: - nodeUuid: - title: Nodeuuid - type: string - description: The node to get the port output from - format: uuid - output: - title: Output - pattern: ^[-_a-zA-Z0-9]+$ - type: string - description: The port key in the node given by nodeUuid - additionalProperties: false - description: I/O port type to reference to an output port of another node in - the same project - Position: - title: Position - required: - - x - - y - type: object - properties: - x: - title: X - type: integer - description: The x position - example: - - '12' - y: - title: Y - type: integer - description: The y position - example: - - '15' - additionalProperties: false - Project: - title: osparc-simcore project - required: - - uuid - - name - - description - - thumbnail - - creationDate - - lastChangeDate - - workbench - - prjOwner - - accessRights - type: object - properties: - uuid: - title: Uuid - type: string - description: project unique identifier - format: uuid - name: - title: Name - type: string - description: project name - description: - title: Description - type: string - description: longer one-line description about the project - thumbnail: - title: Thumbnail - maxLength: 2083 - minLength: 0 - type: string - description: url of the project thumbnail - format: uri - creationDate: - title: Creationdate - pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - description: project creation date - lastChangeDate: - title: Lastchangedate - pattern: \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - description: last save date - workbench: - title: Workbench - type: object - description: Project's pipeline - prjOwner: - title: Prjowner - type: string - description: user email - format: email - accessRights: - title: Accessrights - type: object - description: object containing the GroupID as key and read/write/execution - permissions as value - tags: - title: Tags - type: array - items: - type: integer - default: [] - classifiers: - title: Classifiers - type: array - items: - type: string - description: Contains the reference to the project classifiers - state: - anyOf: - - type: 'null' - - $ref: '#/components/schemas/ProjectState' - ui: - $ref: '#/components/schemas/StudyUI' - quality: - title: Quality - type: object - description: stores the study quality assessment - default: {} - dev: - title: Dev - type: object - description: object used for development purposes only - additionalProperties: false - ProjectLocked: - title: ProjectLocked - required: - - value - - status - type: object - properties: - value: - title: Value - type: boolean - description: True if the project is locked - owner: - title: Owner - allOf: - - $ref: '#/components/schemas/Owner' - description: If locked, the user that owns the lock - status: - allOf: - - $ref: '#/components/schemas/ProjectStatus' - description: The status of the project - additionalProperties: false - ProjectRunningState: - title: ProjectRunningState - required: - - value - type: object - properties: - value: - allOf: - - $ref: '#/components/schemas/RunningState' - description: The running state of the project - additionalProperties: false - ProjectState: - title: ProjectState - required: - - locked - - state - type: object - properties: - locked: - title: Locked - allOf: - - $ref: '#/components/schemas/ProjectLocked' - description: The project lock state - state: - title: State - allOf: - - $ref: '#/components/schemas/ProjectRunningState' - description: The project running state - additionalProperties: false - ProjectStatus: - title: ProjectStatus - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - description: An enumeration. - RunningState: - title: RunningState - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - description: 'State of execution of a project''s computational workflow - - - SEE StateType for task state' - SimCoreFileLink: - title: SimCoreFileLink - required: - - store - - path - type: object - properties: - store: - title: Store - type: integer - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - path: - title: Path - anyOf: - - pattern: ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - type: string - - pattern: ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - type: string - description: The path to the file in the storage provider domain - label: - title: Label - type: string - description: The real file name - eTag: - title: Etag - type: string - description: Entity tag that uniquely represents the file. The method to - generate the tag is not specified (black box). - dataset: - title: Dataset - type: string - deprecated: true - additionalProperties: false - description: I/O port type to hold a link to a file in simcore S3 storage - Slideshow: - title: Slideshow - required: - - position - type: object - properties: - position: - title: Position - type: integer - instructions: - title: Instructions - type: string - StudyUI: - title: StudyUI - type: object - properties: - workbench: - title: Workbench - type: object - slideshow: - title: Slideshow - type: object - currentNodeId: - title: Currentnodeid - type: string - format: uuid - annotations: - title: Annotations - type: object - ValidationError: - title: ValidationError - required: - - loc - - msg - - type - type: object - properties: - loc: - title: Location - type: array - items: - anyOf: - - type: string - - type: integer - msg: - title: Message - type: string - type: - title: Error Type - type: string - WorkbenchUI: - title: WorkbenchUI - required: - - position - type: object - properties: - position: - title: Position - allOf: - - $ref: '#/components/schemas/Position' - description: The node position in the workbench - marker: - $ref: '#/components/schemas/Marker' - additionalProperties: false diff --git a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml b/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml deleted file mode 100755 index 05e69dea54c..00000000000 --- a/api/specs/common/schemas/project-v0.0.1-pydantic-converted.yaml +++ /dev/null @@ -1,2023 +0,0 @@ -title: osparc-simcore project -type: object -properties: - uuid: - title: Uuid - description: project unique identifier - type: string - format: uuid - example: 07640335-a91f-468c-ab69-a374fa82078d - name: - title: Name - description: project name - type: string - example: Temporal Distortion Simulator - description: - title: Description - description: longer one-line description about the project - type: string - example: Dabbling in temporal transitions ... - thumbnail: - title: Thumbnail - description: url of the project thumbnail - minLength: 0 - maxLength: 2083 - format: uri - type: string - example: https://placeimg.com/171/96/tech/grayscale/?0.jpg - creationDate: - title: Creationdate - description: project creation date - pattern: >- - \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - example: '2018-07-01T11:13:43Z' - lastChangeDate: - title: Lastchangedate - description: last save date - pattern: >- - \d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\d)T(2[0-3]|1\d|0?[0-9])(:(\d|[0-5]\d)){2}(\.\d{3})?Z - type: string - example: '2018-07-01T11:13:43Z' - workbench: - title: Workbench - description: Project's pipeline - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: Node - type: object - properties: - key: - title: Key - description: distinctive name for the node based on the docker registry path - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - version: - title: Version - description: semantic version number of the node - example: - - 1.0.0 - - 0.0.1 - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - label: - title: Label - description: The short name of the node - example: - - JupyterLab - type: string - progress: - title: Progress - description: the node progress value - minimum: 0 - maximum: 100 - type: number - thumbnail: - title: Thumbnail - description: url of the latest screenshot of the node - example: - - https://placeimg.com/171/96/tech/grayscale/?0.jpg - minLength: 0 - maxLength: 2083 - format: uri - type: string - runHash: - anyOf: - - type: 'null' - - title: Runhash - description: >- - the hex digest of the resolved inputs +outputs hash at the - time when the last outputs were generated - type: string - inputs: - title: Inputs - description: values of input properties - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - format: json-string - - type: string - - title: PortLink - description: >- - I/O port type to reference to an output port of another - node in the same project - type: object - properties: - nodeUuid: - title: Nodeuuid - description: The node to get the port output from - type: string - format: uuid - output: - title: Output - description: The port key in the node given by nodeUuid - pattern: ^[-_a-zA-Z0-9]+$ - type: string - required: - - nodeUuid - - output - additionalProperties: false - example: - - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b - output: out_2 - - title: SimCoreFileLink - description: >- - I/O port type to hold a link to a file in simcore S3 - storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The - method to generate the tag is not specified (black - box). - type: string - dataset: - title: Dataset - deprecated: true - type: string - required: - - store - - path - additionalProperties: false - example: - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt - - store: '0' - path: >- - 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 - eTag: f7e4c7076761a42a871e978c8691c676 - - store: 0 - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt - - title: DatCoreFileLink - description: I/O port type to hold a link to a file in DATCORE storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The - method to generate the tag is not specified (black - box). - type: string - dataset: - title: Dataset - description: >- - Unique identifier to access the dataset on datcore - (REQUIRED for datcore) - type: string - required: - - store - - path - - label - - dataset - additionalProperties: false - example: - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - title: DownloadLink - description: >- - I/O port type to hold a generic download link to a file - (e.g. S3 pre-signed link, etc) - type: object - properties: - downloadLink: - title: Downloadlink - minLength: 1 - maxLength: 65536 - format: uri - type: string - label: - title: Label - type: string - required: - - downloadLink - additionalProperties: false - example: - - downloadLink: https://fakeimg.pl/250x100/ - - type: array - items: {} - - type: object - inputsUnits: - title: Inputsunits - description: >- - Overrides default unit (if any) defined in the service for each - port - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - type: string - inputAccess: - description: map with key - access level pairs - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - title: AccessEnum - description: An enumeration. - enum: - - ReadAndWrite - - Invisible - - ReadOnly - type: string - inputNodes: - title: Inputnodes - description: node IDs of where the node is connected to - type: array - items: - type: string - format: uuid - outputs: - title: Outputs - description: values of output properties - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - format: json-string - - type: string - - title: SimCoreFileLink - description: >- - I/O port type to hold a link to a file in simcore S3 - storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The - method to generate the tag is not specified (black - box). - type: string - dataset: - title: Dataset - deprecated: true - type: string - required: - - store - - path - additionalProperties: false - example: - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt - - store: '0' - path: >- - 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 - eTag: f7e4c7076761a42a871e978c8691c676 - - store: 0 - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt - - title: DatCoreFileLink - description: I/O port type to hold a link to a file in DATCORE storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The - method to generate the tag is not specified (black - box). - type: string - dataset: - title: Dataset - description: >- - Unique identifier to access the dataset on datcore - (REQUIRED for datcore) - type: string - required: - - store - - path - - label - - dataset - additionalProperties: false - example: - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - title: DownloadLink - description: >- - I/O port type to hold a generic download link to a file - (e.g. S3 pre-signed link, etc) - type: object - properties: - downloadLink: - title: Downloadlink - minLength: 1 - maxLength: 65536 - format: uri - type: string - label: - title: Label - type: string - required: - - downloadLink - additionalProperties: false - example: - - downloadLink: https://fakeimg.pl/250x100/ - - type: array - items: {} - - type: object - outputNode: - title: Outputnode - deprecated: true - type: boolean - outputNodes: - title: Outputnodes - description: Used in group-nodes. Node IDs of those connected to the output - type: array - items: - type: string - format: uuid - parent: - anyOf: - - type: 'null' - - title: Parent - description: Parent's (group-nodes') node ID s. Used to group - type: string - format: uuid - position: - title: Position - description: Use projects_ui.WorkbenchUI.position instead - deprecated: true - allOf: - - title: Position - type: object - properties: - x: - title: X - description: The x position - example: - - '12' - type: integer - 'y': - title: 'Y' - description: The y position - example: - - '15' - type: integer - required: - - x - - 'y' - additionalProperties: false - state: - title: State - description: The node's state object - allOf: - - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: >- - contains the node inputs dependencies if they need to be - computed first - type: array - items: - type: string - format: uuid - uniqueItems: true - currentStatus: - description: the node's current state - default: NOT_STARTED - allOf: - - title: RunningState - description: >- - State of execution of a project's computational - workflow - - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - example: - - modified: true - dependencies: [] - currentStatus: NOT_STARTED - - modified: true - dependencies: - - 42838344-03de-4ce2-8d93-589a5dcdfd05 - currentStatus: ABORTED - - modified: false - dependencies: [] - currentStatus: SUCCESS - bootOptions: - title: Bootoptions - description: >- - Some services provide alternative parameters to be injected at - boot time. The user selection should be stored here, and it will - overwrite the services's defaults. - type: object - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - required: - - key - - version - - label - additionalProperties: false - additionalProperties: true - prjOwner: - title: Prjowner - description: user email - type: string - format: email - accessRights: - title: Accessrights - description: >- - object containing the GroupID as key and read/write/execution permissions - as value - type: object - x-patternProperties: - ^\S+$: - title: AccessRights - type: object - properties: - read: - title: Read - description: gives read access - type: boolean - write: - title: Write - description: gives write access - type: boolean - delete: - title: Delete - description: gives deletion rights - type: boolean - required: - - read - - write - - delete - additionalProperties: false - additionalProperties: true - tags: - title: Tags - default: [] - type: array - items: - type: integer - classifiers: - title: Classifiers - description: Contains the reference to the project classifiers - type: array - items: - type: string - example: some:id:to:a:classifier - state: - anyOf: - - nullable: true - - title: ProjectState - type: object - properties: - locked: - title: Locked - description: The project lock state - allOf: - - title: ProjectLocked - type: object - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: If locked, the user that owns the lock - allOf: - - title: Owner - type: object - properties: - user_id: - title: User Id - description: >- - Owner's identifier when registered in the user's - database table - type: integer - example: 2 - first_name: - title: First Name - description: Owner first name - type: string - example: John - last_name: - title: Last Name - description: Owner last name - type: string - example: Smith - required: - - user_id - - first_name - - last_name - additionalProperties: false - status: - description: The status of the project - allOf: - - title: ProjectStatus - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - required: - - value - - status - additionalProperties: false - example: - value: false - status: CLOSED - state: - title: State - description: The project running state - allOf: - - title: ProjectRunningState - type: object - properties: - value: - description: The running state of the project - allOf: - - title: RunningState - description: >- - State of execution of a project's computational - workflow - - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - example: STARTED - required: - - value - additionalProperties: false - required: - - locked - - state - additionalProperties: false - ui: - title: StudyUI - type: object - properties: - workbench: - title: Workbench - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: WorkbenchUI - type: object - properties: - position: - title: Position - description: The node position in the workbench - allOf: - - title: Position - type: object - properties: - x: - title: X - description: The x position - example: - - '12' - type: integer - 'y': - title: 'Y' - description: The y position - example: - - '15' - type: integer - required: - - x - - 'y' - additionalProperties: false - marker: - title: Marker - type: object - properties: - color: - title: Color - type: string - format: color - required: - - color - additionalProperties: false - required: - - position - additionalProperties: false - additionalProperties: true - slideshow: - title: Slideshow - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: Slideshow - type: object - properties: - position: - title: Position - type: integer - instructions: - title: Instructions - type: string - required: - - position - additionalProperties: true - currentNodeId: - title: Currentnodeid - type: string - format: uuid - annotations: - title: Annotations - type: object - x-patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: Annotation - type: object - properties: - type: - title: Type - enum: - - rect - - text - type: string - color: - title: Color - type: string - format: color - attributes: - title: Attributes - description: svg attributes - type: object - required: - - type - - color - - attributes - additionalProperties: false - example: - - type: rect - color: '#FF0000' - attributes: - x: 415 - 'y': 100 - width: 117 - height: 26 - - type: text - color: '#0000FF' - attributes: - x: 415 - 'y': 100 - text: Hey! - additionalProperties: true - quality: - title: Quality - description: stores the study quality assessment - default: {} - type: object - dev: - title: Dev - description: object used for development purposes only - type: object -required: - - uuid - - name - - description - - thumbnail - - creationDate - - lastChangeDate - - workbench - - prjOwner - - accessRights -additionalProperties: false -definitions: - PortLink: - title: PortLink - description: >- - I/O port type to reference to an output port of another node in the same - project - type: object - properties: - nodeUuid: - title: Nodeuuid - description: The node to get the port output from - type: string - format: uuid - output: - title: Output - description: The port key in the node given by nodeUuid - pattern: ^[-_a-zA-Z0-9]+$ - type: string - required: - - nodeUuid - - output - additionalProperties: false - example: - - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b - output: out_2 - SimCoreFileLink: - title: SimCoreFileLink - description: I/O port type to hold a link to a file in simcore S3 storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The method to generate - the tag is not specified (black box). - type: string - dataset: - title: Dataset - deprecated: true - type: string - required: - - store - - path - additionalProperties: false - example: - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt - - store: '0' - path: >- - 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 - eTag: f7e4c7076761a42a871e978c8691c676 - - store: 0 - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt - DatCoreFileLink: - title: DatCoreFileLink - description: I/O port type to hold a link to a file in DATCORE storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The method to generate - the tag is not specified (black box). - type: string - dataset: - title: Dataset - description: >- - Unique identifier to access the dataset on datcore (REQUIRED for - datcore) - type: string - required: - - store - - path - - label - - dataset - additionalProperties: false - example: - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - DownloadLink: - title: DownloadLink - description: >- - I/O port type to hold a generic download link to a file (e.g. S3 - pre-signed link, etc) - type: object - properties: - downloadLink: - title: Downloadlink - minLength: 1 - maxLength: 65536 - format: uri - type: string - label: - title: Label - type: string - required: - - downloadLink - additionalProperties: false - example: - - downloadLink: https://fakeimg.pl/250x100/ - AccessEnum: - title: AccessEnum - description: An enumeration. - enum: - - ReadAndWrite - - Invisible - - ReadOnly - type: string - Position: - title: Position - type: object - properties: - x: - title: X - description: The x position - example: - - '12' - type: integer - 'y': - title: 'Y' - description: The y position - example: - - '15' - type: integer - required: - - x - - 'y' - additionalProperties: false - RunningState: - title: RunningState - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - NodeState: - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: >- - contains the node inputs dependencies if they need to be computed - first - type: array - items: - type: string - format: uuid - uniqueItems: true - currentStatus: - description: the node's current state - default: NOT_STARTED - allOf: - - title: RunningState - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - example: - - modified: true - dependencies: [] - currentStatus: NOT_STARTED - - modified: true - dependencies: - - 42838344-03de-4ce2-8d93-589a5dcdfd05 - currentStatus: ABORTED - - modified: false - dependencies: [] - currentStatus: SUCCESS - Node: - title: Node - type: object - properties: - key: - title: Key - description: distinctive name for the node based on the docker registry path - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - - simcore/services/frontend/file-picker - pattern: ^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$ - type: string - version: - title: Version - description: semantic version number of the node - example: - - 1.0.0 - - 0.0.1 - pattern: >- - ^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$ - type: string - label: - title: Label - description: The short name of the node - example: - - JupyterLab - type: string - progress: - title: Progress - description: the node progress value - minimum: 0 - maximum: 100 - type: number - thumbnail: - title: Thumbnail - description: url of the latest screenshot of the node - example: - - https://placeimg.com/171/96/tech/grayscale/?0.jpg - minLength: 0 - maxLength: 2083 - format: uri - type: string - runHash: - anyOf: - - type: 'null' - - title: Runhash - description: >- - the hex digest of the resolved inputs +outputs hash at the time - when the last outputs were generated - type: string - inputs: - title: Inputs - description: values of input properties - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - format: json-string - - type: string - - title: PortLink - description: >- - I/O port type to reference to an output port of another node - in the same project - type: object - properties: - nodeUuid: - title: Nodeuuid - description: The node to get the port output from - type: string - format: uuid - output: - title: Output - description: The port key in the node given by nodeUuid - pattern: ^[-_a-zA-Z0-9]+$ - type: string - required: - - nodeUuid - - output - additionalProperties: false - example: - - nodeUuid: da5068e0-8a8d-4fb9-9516-56e5ddaef15b - output: out_2 - - title: SimCoreFileLink - description: I/O port type to hold a link to a file in simcore S3 storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The method - to generate the tag is not specified (black box). - type: string - dataset: - title: Dataset - deprecated: true - type: string - required: - - store - - path - additionalProperties: false - example: - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt - - store: '0' - path: >- - 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 - eTag: f7e4c7076761a42a871e978c8691c676 - - store: 0 - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt - - title: DatCoreFileLink - description: I/O port type to hold a link to a file in DATCORE storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The method - to generate the tag is not specified (black box). - type: string - dataset: - title: Dataset - description: >- - Unique identifier to access the dataset on datcore - (REQUIRED for datcore) - type: string - required: - - store - - path - - label - - dataset - additionalProperties: false - example: - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - title: DownloadLink - description: >- - I/O port type to hold a generic download link to a file (e.g. - S3 pre-signed link, etc) - type: object - properties: - downloadLink: - title: Downloadlink - minLength: 1 - maxLength: 65536 - format: uri - type: string - label: - title: Label - type: string - required: - - downloadLink - additionalProperties: false - example: - - downloadLink: https://fakeimg.pl/250x100/ - - type: array - items: {} - - type: object - inputsUnits: - title: Inputsunits - description: Overrides default unit (if any) defined in the service for each port - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - type: string - inputAccess: - description: map with key - access level pairs - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - title: AccessEnum - description: An enumeration. - enum: - - ReadAndWrite - - Invisible - - ReadOnly - type: string - inputNodes: - title: Inputnodes - description: node IDs of where the node is connected to - type: array - items: - type: string - format: uuid - outputs: - title: Outputs - description: values of output properties - type: object - patternProperties: - ^[-_a-zA-Z0-9]+$: - anyOf: - - type: boolean - - type: integer - - type: number - - type: string - format: json-string - - type: string - - title: SimCoreFileLink - description: I/O port type to hold a link to a file in simcore S3 storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The method - to generate the tag is not specified (black box). - type: string - dataset: - title: Dataset - deprecated: true - type: string - required: - - store - - path - additionalProperties: false - example: - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - eTag: 859fda0cb82fc4acb4686510a172d9a9-1 - label: input.txt - - store: '0' - path: >- - 50339632-ee1d-11ec-a0c2-02420a0194e4/23b1522f-225f-5a4c-9158-c4c19a70d4a8/output.h5 - eTag: f7e4c7076761a42a871e978c8691c676 - - store: 0 - path: api/0a3b2c56-dbcd-4871-b93b-d454b7883f9f/input.txt - - store: 0 - path: >- - 94453a6a-c8d4-52b3-a22d-ccbf81f8d636/d4442ca4-23fd-5b6b-ba6d-0b75f711c109/y_1D.txt - - title: DatCoreFileLink - description: I/O port type to hold a link to a file in DATCORE storage - type: object - properties: - store: - title: Store - description: 'The store identifier: 0 for simcore S3, 1 for datcore' - type: integer - path: - title: Path - description: The path to the file in the storage provider domain - anyOf: - - type: string - pattern: >- - ^(api|([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}))\/([0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12})\/(.+)$ - - type: string - pattern: >- - ^N:package:[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$ - label: - title: Label - description: The real file name - type: string - eTag: - title: Etag - description: >- - Entity tag that uniquely represents the file. The method - to generate the tag is not specified (black box). - type: string - dataset: - title: Dataset - description: >- - Unique identifier to access the dataset on datcore - (REQUIRED for datcore) - type: string - required: - - store - - path - - label - - dataset - additionalProperties: false - example: - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - store: 1 - dataset: N:dataset:ea2325d8-46d7-4fbd-a644-30f6433070b4 - path: N:package:32df09ba-e8d6-46da-bd54-f696157de6ce - label: initial_WTstates - - title: DownloadLink - description: >- - I/O port type to hold a generic download link to a file (e.g. - S3 pre-signed link, etc) - type: object - properties: - downloadLink: - title: Downloadlink - minLength: 1 - maxLength: 65536 - format: uri - type: string - label: - title: Label - type: string - required: - - downloadLink - additionalProperties: false - example: - - downloadLink: https://fakeimg.pl/250x100/ - - type: array - items: {} - - type: object - outputNode: - title: Outputnode - deprecated: true - type: boolean - outputNodes: - title: Outputnodes - description: Used in group-nodes. Node IDs of those connected to the output - type: array - items: - type: string - format: uuid - parent: - anyOf: - - type: 'null' - - title: Parent - description: Parent's (group-nodes') node ID s. Used to group - type: string - format: uuid - position: - title: Position - description: Use projects_ui.WorkbenchUI.position instead - deprecated: true - allOf: - - title: Position - type: object - properties: - x: - title: X - description: The x position - example: - - '12' - type: integer - 'y': - title: 'Y' - description: The y position - example: - - '15' - type: integer - required: - - x - - 'y' - additionalProperties: false - state: - title: State - description: The node's state object - allOf: - - title: NodeState - type: object - properties: - modified: - title: Modified - description: true if the node's outputs need to be re-computed - default: true - type: boolean - dependencies: - title: Dependencies - description: >- - contains the node inputs dependencies if they need to be - computed first - type: array - items: - type: string - format: uuid - uniqueItems: true - currentStatus: - description: the node's current state - default: NOT_STARTED - allOf: - - title: RunningState - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - additionalProperties: false - example: - - modified: true - dependencies: [] - currentStatus: NOT_STARTED - - modified: true - dependencies: - - 42838344-03de-4ce2-8d93-589a5dcdfd05 - currentStatus: ABORTED - - modified: false - dependencies: [] - currentStatus: SUCCESS - bootOptions: - title: Bootoptions - description: >- - Some services provide alternative parameters to be injected at boot - time. The user selection should be stored here, and it will overwrite - the services's defaults. - type: object - patternProperties: - '[a-zA-Z][a-azA-Z0-9_]*': - type: string - required: - - key - - version - - label - additionalProperties: false - AccessRights: - title: AccessRights - type: object - properties: - read: - title: Read - description: gives read access - type: boolean - write: - title: Write - description: gives write access - type: boolean - delete: - title: Delete - description: gives deletion rights - type: boolean - required: - - read - - write - - delete - additionalProperties: false - Owner: - title: Owner - type: object - properties: - user_id: - title: User Id - description: Owner's identifier when registered in the user's database table - example: - - 2 - type: integer - first_name: - title: First Name - description: Owner first name - example: - - John - type: string - last_name: - title: Last Name - description: Owner last name - example: - - Smith - type: string - required: - - user_id - - first_name - - last_name - additionalProperties: false - ProjectStatus: - title: ProjectStatus - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - ProjectLocked: - title: ProjectLocked - type: object - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: If locked, the user that owns the lock - allOf: - - title: Owner - type: object - properties: - user_id: - title: User Id - description: >- - Owner's identifier when registered in the user's database - table - example: - - 2 - type: integer - first_name: - title: First Name - description: Owner first name - example: - - John - type: string - last_name: - title: Last Name - description: Owner last name - example: - - Smith - type: string - required: - - user_id - - first_name - - last_name - additionalProperties: false - status: - description: The status of the project - allOf: - - title: ProjectStatus - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - required: - - value - - status - additionalProperties: false - example: - - value: false - status: CLOSED - - value: true - status: OPENED - owner: - user_id: 123 - first_name: Johnny - last_name: Cash - ProjectRunningState: - title: ProjectRunningState - type: object - properties: - value: - description: The running state of the project - example: - - STARTED - allOf: - - title: RunningState - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - required: - - value - additionalProperties: false - ProjectState: - title: ProjectState - type: object - properties: - locked: - title: Locked - description: The project lock state - allOf: - - title: ProjectLocked - type: object - properties: - value: - title: Value - description: True if the project is locked - type: boolean - owner: - title: Owner - description: If locked, the user that owns the lock - allOf: - - title: Owner - type: object - properties: - user_id: - title: User Id - description: >- - Owner's identifier when registered in the user's - database table - example: - - 2 - type: integer - first_name: - title: First Name - description: Owner first name - example: - - John - type: string - last_name: - title: Last Name - description: Owner last name - example: - - Smith - type: string - required: - - user_id - - first_name - - last_name - additionalProperties: false - status: - description: The status of the project - allOf: - - title: ProjectStatus - description: An enumeration. - enum: - - CLOSED - - CLOSING - - CLONING - - EXPORTING - - OPENING - - OPENED - type: string - required: - - value - - status - additionalProperties: false - example: - - value: false - status: CLOSED - - value: true - status: OPENED - owner: - user_id: 123 - first_name: Johnny - last_name: Cash - state: - title: State - description: The project running state - allOf: - - title: ProjectRunningState - type: object - properties: - value: - description: The running state of the project - example: - - STARTED - allOf: - - title: RunningState - description: |- - State of execution of a project's computational workflow - - SEE StateType for task state - enum: - - UNKNOWN - - PUBLISHED - - NOT_STARTED - - PENDING - - STARTED - - RETRY - - SUCCESS - - FAILED - - ABORTED - type: string - required: - - value - additionalProperties: false - required: - - locked - - state - additionalProperties: false - Marker: - title: Marker - type: object - properties: - color: - title: Color - type: string - format: color - required: - - color - additionalProperties: false - WorkbenchUI: - title: WorkbenchUI - type: object - properties: - position: - title: Position - description: The node position in the workbench - allOf: - - title: Position - type: object - properties: - x: - title: X - description: The x position - example: - - '12' - type: integer - 'y': - title: 'Y' - description: The y position - example: - - '15' - type: integer - required: - - x - - 'y' - additionalProperties: false - marker: - title: Marker - type: object - properties: - color: - title: Color - type: string - format: color - required: - - color - additionalProperties: false - required: - - position - additionalProperties: false - Slideshow: - title: Slideshow - type: object - properties: - position: - title: Position - type: integer - instructions: - title: Instructions - type: string - required: - - position - Annotation: - title: Annotation - type: object - properties: - type: - title: Type - enum: - - rect - - text - type: string - color: - title: Color - type: string - format: color - attributes: - title: Attributes - description: svg attributes - type: object - required: - - type - - color - - attributes - additionalProperties: false - example: - - type: rect - color: '#FF0000' - attributes: - x: 415 - 'y': 100 - width: 117 - height: 26 - - type: text - color: '#0000FF' - attributes: - x: 415 - 'y': 100 - text: Hey! - StudyUI: - title: StudyUI - type: object - properties: - workbench: - title: Workbench - type: object - patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: WorkbenchUI - type: object - properties: - position: - title: Position - description: The node position in the workbench - allOf: - - title: Position - type: object - properties: - x: - title: X - description: The x position - example: - - '12' - type: integer - 'y': - title: 'Y' - description: The y position - example: - - '15' - type: integer - required: - - x - - 'y' - additionalProperties: false - marker: - title: Marker - type: object - properties: - color: - title: Color - type: string - format: color - required: - - color - additionalProperties: false - required: - - position - additionalProperties: false - slideshow: - title: Slideshow - type: object - patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: Slideshow - type: object - properties: - position: - title: Position - type: integer - instructions: - title: Instructions - type: string - required: - - position - currentNodeId: - title: Currentnodeid - type: string - format: uuid - annotations: - title: Annotations - type: object - patternProperties: - ^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$: - title: Annotation - type: object - properties: - type: - title: Type - enum: - - rect - - text - type: string - color: - title: Color - type: string - format: color - attributes: - title: Attributes - description: svg attributes - type: object - required: - - type - - color - - attributes - additionalProperties: false - example: - - type: rect - color: '#FF0000' - attributes: - x: 415 - 'y': 100 - width: 117 - height: 26 - - type: text - color: '#0000FF' - attributes: - x: 415 - 'y': 100 - text: Hey! diff --git a/api/specs/common/schemas/project-v0.0.1.json b/api/specs/common/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/api/specs/common/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} diff --git a/api/specs/webserver/scripts/openapi_node_meta.py b/api/specs/webserver/scripts/openapi_node_meta.py index ae51e0cbaa1..1caece817b4 100644 --- a/api/specs/webserver/scripts/openapi_node_meta.py +++ b/api/specs/webserver/scripts/openapi_node_meta.py @@ -26,15 +26,14 @@ async def get_project_inputs(project: ServiceDockerData): if __name__ == "__main__": - from _common import CURRENT_DIR, create_openapi_specs + from _common import CURRENT_DIR # Generate OAS for the Project pydantic model via the FastAPI app # NOTE: currently not used, as the generated OAS does not generate x-pattern properties # it has problem with types ex. ServiceInputsDict = dict[ServicePortKey, ServiceInput], where key is a constrained string - create_openapi_specs( - app, CURRENT_DIR.parent / "../common/schemas/openapi-node-meta-generated.yaml" - ) - + # create_openapi_specs( + # app, CURRENT_DIR.parent / "../common/schemas/openapi-node-meta-generated.yaml" + # ) # Generate dereferenced json schema from the ServiceDockerData pydantic model and save it with open( CURRENT_DIR.parent / "../common/schemas/node-meta-v0.0.1-pydantic.json", "w" diff --git a/api/specs/webserver/scripts/openapi_project.py b/api/specs/webserver/scripts/openapi_project.py index 1b201901791..74d7a2c5ee3 100644 --- a/api/specs/webserver/scripts/openapi_project.py +++ b/api/specs/webserver/scripts/openapi_project.py @@ -25,15 +25,14 @@ async def get_project_inputs(project: Project): if __name__ == "__main__": - from _common import CURRENT_DIR, create_openapi_specs + from _common import CURRENT_DIR # Generate OAS for the Project pydantic model via the FastAPI app # NOTE: currently not used, as the generated OAS does not generate x-pattern properties # it has problem with types ex. Workbench = dict[NodeIDstr, Node], where key is a constrained string - create_openapi_specs( - app, CURRENT_DIR.parent / "../common/schemas/openapi-project-generated.yaml" - ) - + # create_openapi_specs( + # app, CURRENT_DIR.parent / "../common/schemas/openapi-project-generated.yaml" + # ) # Generate dereferenced json schema from the Project pydantic model and save it with open( CURRENT_DIR.parent / "../common/schemas/project-v0.0.1-pydantic.json", "w" From 3d58a976140d7e94b4e10ac7c144e4b488458887 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 20 Mar 2023 08:47:01 +0100 Subject: [PATCH 30/34] director needs node-meta-v0.0.1.json in the api/specs --- api/specs/common/schemas/Makefile | 4 +- .../common/schemas/node-meta-v0.0.1.json | 477 ++++++++++++++++++ 2 files changed, 480 insertions(+), 1 deletion(-) create mode 100644 api/specs/common/schemas/node-meta-v0.0.1.json diff --git a/api/specs/common/schemas/Makefile b/api/specs/common/schemas/Makefile index f30fdb00a05..8383bd77cb5 100644 --- a/api/specs/common/schemas/Makefile +++ b/api/specs/common/schemas/Makefile @@ -3,7 +3,7 @@ objects = $(wildcard *-pydantic.json) outputs := $(objects:.json=-converted-clean.yaml) -helper_files = project-v0.0.1-pydantic-converted.yaml node-meta-v0.0.1-pydantic-converted.yaml +depreciated_files = node-meta-v0.0.1-converted.yaml TOOL_IMAGE_NAME := json-schema-to-openapi-schema @@ -17,6 +17,8 @@ all: check $(outputs) -v ${CURDIR}:/output \ $(TOOL_IMAGE_NAME) + rm -f ${depreciated_files} + .PRECIOUS: %-converted.yaml %-converted-clean.yaml:%-converted.yaml # remove the "definition" key from %-converted.yaml diff --git a/api/specs/common/schemas/node-meta-v0.0.1.json b/api/specs/common/schemas/node-meta-v0.0.1.json new file mode 100644 index 00000000000..a47f6c2ad3b --- /dev/null +++ b/api/specs/common/schemas/node-meta-v0.0.1.json @@ -0,0 +1,477 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "simcore node", + "description": "Description of a simcore node 'class' with input and output", + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "type", + "name", + "description", + "authors", + "contact", + "inputs", + "outputs" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/itis/sleeper", + "simcore/services/dynamic/3dviewer" + ] + }, + "integration-version": { + "type": "string", + "description": "integration version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0" + ] + }, + "version": { + "type": "string", + "description": "service version number", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "type": { + "type": "string", + "description": "service type", + "enum": [ + "frontend", + "computational", + "dynamic" + ], + "examples": [ + "computational" + ] + }, + "name": { + "type": "string", + "description": "short, human readable name for the node", + "examples": [ + "Fast Counter" + ] + }, + "thumbnail": { + "type": "string", + "description": "url to the thumbnail", + "examples": [ + "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" + ] + }, + "badges": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "image", + "url" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the subject", + "examples": [ + "travis-ci", + "coverals.io", + "github.io" + ] + }, + "image": { + "type": "string", + "description": "Url to the shield", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", + "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", + "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" + ] + }, + "url": { + "type": "string", + "description": "Link to status", + "examples": [ + "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", + "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", + "https://itisfoundation.github.io/" + ] + } + } + } + }, + "description": { + "type": "string", + "description": "human readable description of the purpose of the node", + "examples": [ + "Our best node type", + "The mother of all nodes, makes your numbers shine!" + ] + }, + "authors": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "required": [ + "name", + "email" + ], + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "description": "Name of the author", + "examples": [ + "Sun Bak", + "Delenn" + ] + }, + "email": { + "description": "Email address", + "type": "string", + "format": "email", + "examples": [ + "sun@sense.eight", + "deleen@minbar.bab" + ] + }, + "affiliation": { + "description": "Affiliation of the author", + "type": "string", + "examples": [ + "Sense8", + "Babylon 5" + ] + } + } + } + }, + "contact": { + "type": "string", + "format": "email", + "description": "email to correspond to the authors about the node", + "examples": [ + "lab@net.flix" + ] + }, + "inputs": { + "type": "object", + "description": "definition of the inputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the input configurable for this service", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", + "deprecated": true, + "type": "number" + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", + "description": "data type expected on this input glob matching for data type is allowed", + "examples": [ + "number", + "boolean", + "data:*/*", + "data:text/*", + "data:[image/jpeg,image/png]", + "data:application/json", + "data:application/json;schema=https://my-schema/not/really/schema.json", + "data:application/vnd.ms-excel", + "data:text/plain", + "data:application/hdf5", + "data:application/edu.ucdavis@ceclancy.xyz" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data associated with the named keys in files", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "defaultValue": { + "description": "initial value for this input", + "type": [ + "string", + "number", + "integer", + "boolean" + ], + "examples": [ + "Dog", + true + ] + }, + "unit": { + "title": "Unit", + "description": "Units of this input value, if a physical quantity", + "type": "string" + }, + "widget": { + "description": "custom widget to use instead of the default one determined from the data-type", + "anyOf": [ + { + "type": "object", + "additionalProperties": false, + "required": [ + "type" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "TextArea" + ] + }, + "minHeight": { + "description": "minimum Height of the textarea", + "type": "integer", + "minimum": 1 + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "structure" + ], + "properties": { + "type": { + "description": "type of the property", + "type": "string", + "enum": [ + "SelectBox" + ] + }, + "structure": { + "type": "array", + "minItems": 1, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "label" + ], + "properties": { + "key": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "label": { + "type": "string" + } + }, + "examples": [ + [ + { + "key": "rat", + "label": "The Rat" + }, + { + "key": "dog", + "label": "Bello the Dog" + } + ] + ] + } + } + } + } + ] + } + } + } + } + }, + "outputs": { + "type": "object", + "description": "definition of the outputs of this node", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "object", + "description": "all the output produced by this node", + "additionalProperties": false, + "required": [ + "displayOrder", + "label", + "description", + "type" + ], + "properties": { + "displayOrder": { + "type": "number", + "description": "use this to numerically sort the properties for display", + "examples": [ + 1, + -0.2 + ] + }, + "label": { + "type": "string", + "description": "short name for the property", + "examples": [ + "Age" + ] + }, + "description": { + "type": "string", + "description": "description of the property", + "examples": [ + "Age in seconds since 1970" + ] + }, + "type": { + "type": "string", + "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", + "description": "data type expected on this output", + "examples": [ + "number", + "integer", + "boolean", + "string", + "data:application/json", + "data:application/vnd.ms-excel ", + "data:text/plain", + "data:application/hdf5" + ] + }, + "contentSchema": { + "title": "Content Schema", + "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", + "type": "object" + }, + "fileToKeyMap": { + "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", + "type": "object", + "patternProperties": { + ".+": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + }, + "examples": [ + { + "dir/input1.txt": "key_1", + "dir33/input2.txt": "key2" + } + ] + }, + "unit": { + "title": "Unit", + "description": "Units of the output value, if a physical quantity", + "type": "string" + } + } + } + } + }, + "boot-options": { + "title": "Boot Options", + "description": "Service defined boot options. These get injected in the service as env variables.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z0-9]+$": { + "title": "BootOptionMode", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "default": { + "title": "Default", + "type": "string" + }, + "items": { + "title": "Items", + "type": "object", + "additionalProperties": { + "title": "BootOptionItem", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "label", + "description" + ] + } + } + }, + "required": [ + "label", + "description", + "default", + "items" + ] + } + } + } + } +} From 3fa8d5be5e35eed493be8543ac655db282c2693a Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 20 Mar 2023 09:34:54 +0100 Subject: [PATCH 31/34] update test comments --- .../tests/unit/isolated/test__json_schema.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/services/web/server/tests/unit/isolated/test__json_schema.py b/services/web/server/tests/unit/isolated/test__json_schema.py index 0a4a911e164..152302369d9 100644 --- a/services/web/server/tests/unit/isolated/test__json_schema.py +++ b/services/web/server/tests/unit/isolated/test__json_schema.py @@ -18,8 +18,7 @@ def test_validate_project_json_schema(): # Should be: "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" with resources.stream("api/v0/schemas/project-v0.0.1.json") as fh: old_project_schema = json.load(fh) - - jsonschema_validation.validate_instance(project, old_project_schema) + assert jsonschema_validation.validate_instance(project, old_project_schema) is None # This is new Pydantic generated json schema, that was modified # so it works as the previous one. This should be fixed in: @@ -27,9 +26,19 @@ def test_validate_project_json_schema(): with resources.stream("api/v0/schemas/project-v0.0.1-pydantic.json") as fh: new_project_schema = json.load(fh) + assert new_project_schema["properties"]["workbench"]["patternProperties"][ + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + ] + assert new_project_schema["properties"]["ui"]["properties"]["workbench"][ + "patternProperties" + ][ + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}$" + ] + + # We have to remove patternProperties from the schema, this is done + # here: setup_projects_model_schema() in projects_models.py until #3992 is fixed new_project_schema["properties"]["workbench"].pop("patternProperties") new_project_schema["properties"]["ui"]["properties"]["workbench"].pop( "patternProperties" ) - - jsonschema_validation.validate_instance(project, new_project_schema) + assert jsonschema_validation.validate_instance(project, new_project_schema) is None From 54d32806f023b274dc27856fa82219b86e224bfa Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 3 Apr 2023 08:49:48 +0200 Subject: [PATCH 32/34] removing old json schema files --- .../api/v0/schemas/node-meta-v0.0.1.json | 477 ----------- .../api/v0/schemas/project-v0.0.1.json | 768 ------------------ .../api/v0/schemas/node-meta-v0.0.1.json | 477 ----------- .../api/v0/schemas/project-v0.0.1.json | 768 ------------------ 4 files changed, 2490 deletions(-) delete mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json delete mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json b/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json b/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/services/storage/src/simcore_service_storage/api/v0/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json deleted file mode 100644 index a47f6c2ad3b..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/node-meta-v0.0.1.json +++ /dev/null @@ -1,477 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "simcore node", - "description": "Description of a simcore node 'class' with input and output", - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "type", - "name", - "description", - "authors", - "contact", - "inputs", - "outputs" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/itis/sleeper", - "simcore/services/dynamic/3dviewer" - ] - }, - "integration-version": { - "type": "string", - "description": "integration version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0" - ] - }, - "version": { - "type": "string", - "description": "service version number", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "type": { - "type": "string", - "description": "service type", - "enum": [ - "frontend", - "computational", - "dynamic" - ], - "examples": [ - "computational" - ] - }, - "name": { - "type": "string", - "description": "short, human readable name for the node", - "examples": [ - "Fast Counter" - ] - }, - "thumbnail": { - "type": "string", - "description": "url to the thumbnail", - "examples": [ - "https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png" - ] - }, - "badges": { - "type": "array", - "items": { - "type": "object", - "required": [ - "name", - "image", - "url" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the subject", - "examples": [ - "travis-ci", - "coverals.io", - "github.io" - ] - }, - "image": { - "type": "string", - "description": "Url to the shield", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master", - "https://coveralls.io/repos/github/ITISFoundation/osparc-simcore/badge.svg?branch=master", - "https://img.shields.io/website-up-down-green-red/https/itisfoundation.github.io.svg?label=documentation" - ] - }, - "url": { - "type": "string", - "description": "Link to status", - "examples": [ - "https://travis-ci.org/ITISFoundation/osparc-simcore 'State of CI: build, test and pushing images'", - "https://coveralls.io/github/ITISFoundation/osparc-simcore?branch=master 'Test coverage'", - "https://itisfoundation.github.io/" - ] - } - } - } - }, - "description": { - "type": "string", - "description": "human readable description of the purpose of the node", - "examples": [ - "Our best node type", - "The mother of all nodes, makes your numbers shine!" - ] - }, - "authors": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "name", - "email" - ], - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "description": "Name of the author", - "examples": [ - "Sun Bak", - "Delenn" - ] - }, - "email": { - "description": "Email address", - "type": "string", - "format": "email", - "examples": [ - "sun@sense.eight", - "deleen@minbar.bab" - ] - }, - "affiliation": { - "description": "Affiliation of the author", - "type": "string", - "examples": [ - "Sense8", - "Babylon 5" - ] - } - } - } - }, - "contact": { - "type": "string", - "format": "email", - "description": "email to correspond to the authors about the node", - "examples": [ - "lab@net.flix" - ] - }, - "inputs": { - "type": "object", - "description": "definition of the inputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the input configurable for this service", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "description": "DEPRECATED: new display order is taken from the item position. This property will be removed.", - "deprecated": true, - "type": "number" - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:([^/\\s,]+/[^/\\s,]+|\\[[^/\\s,]+/[^/\\s,]+(,[^/\\s]+/[^/,\\s]+)*\\]))$", - "description": "data type expected on this input glob matching for data type is allowed", - "examples": [ - "number", - "boolean", - "data:*/*", - "data:text/*", - "data:[image/jpeg,image/png]", - "data:application/json", - "data:application/json;schema=https://my-schema/not/really/schema.json", - "data:application/vnd.ms-excel", - "data:text/plain", - "data:application/hdf5", - "data:application/edu.ucdavis@ceclancy.xyz" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of the content at this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data associated with the named keys in files", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "defaultValue": { - "description": "initial value for this input", - "type": [ - "string", - "number", - "integer", - "boolean" - ], - "examples": [ - "Dog", - true - ] - }, - "unit": { - "title": "Unit", - "description": "Units of this input value, if a physical quantity", - "type": "string" - }, - "widget": { - "description": "custom widget to use instead of the default one determined from the data-type", - "anyOf": [ - { - "type": "object", - "additionalProperties": false, - "required": [ - "type" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "TextArea" - ] - }, - "minHeight": { - "description": "minimum Height of the textarea", - "type": "integer", - "minimum": 1 - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "structure" - ], - "properties": { - "type": { - "description": "type of the property", - "type": "string", - "enum": [ - "SelectBox" - ] - }, - "structure": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "label" - ], - "properties": { - "key": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "label": { - "type": "string" - } - }, - "examples": [ - [ - { - "key": "rat", - "label": "The Rat" - }, - { - "key": "dog", - "label": "Bello the Dog" - } - ] - ] - } - } - } - } - ] - } - } - } - } - }, - "outputs": { - "type": "object", - "description": "definition of the outputs of this node", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "object", - "description": "all the output produced by this node", - "additionalProperties": false, - "required": [ - "displayOrder", - "label", - "description", - "type" - ], - "properties": { - "displayOrder": { - "type": "number", - "description": "use this to numerically sort the properties for display", - "examples": [ - 1, - -0.2 - ] - }, - "label": { - "type": "string", - "description": "short name for the property", - "examples": [ - "Age" - ] - }, - "description": { - "type": "string", - "description": "description of the property", - "examples": [ - "Age in seconds since 1970" - ] - }, - "type": { - "type": "string", - "pattern": "^(number|integer|boolean|string|ref_contentSchema|data:[^/\\s,]+/[^/\\s,]+)$", - "description": "data type expected on this output", - "examples": [ - "number", - "integer", - "boolean", - "string", - "data:application/json", - "data:application/vnd.ms-excel ", - "data:text/plain", - "data:application/hdf5" - ] - }, - "contentSchema": { - "title": "Content Schema", - "description": "jsonschema of this input/output. Required when type='ref_contentSchema'", - "type": "object" - }, - "fileToKeyMap": { - "description": "Place the data stored in the named files and store it in the locations pointed to by the respective output key.", - "type": "object", - "patternProperties": { - ".+": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - }, - "examples": [ - { - "dir/input1.txt": "key_1", - "dir33/input2.txt": "key2" - } - ] - }, - "unit": { - "title": "Unit", - "description": "Units of the output value, if a physical quantity", - "type": "string" - } - } - } - } - }, - "boot-options": { - "title": "Boot Options", - "description": "Service defined boot options. These get injected in the service as env variables.", - "type": "object", - "patternProperties": { - "^[_a-zA-Z0-9]+$": { - "title": "BootOptionMode", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - }, - "default": { - "title": "Default", - "type": "string" - }, - "items": { - "title": "Items", - "type": "object", - "additionalProperties": { - "title": "BootOptionItem", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "description": { - "title": "Description", - "type": "string" - } - }, - "required": [ - "label", - "description" - ] - } - } - }, - "required": [ - "label", - "description", - "default", - "items" - ] - } - } - } - } -} diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json deleted file mode 100644 index 8c178845ccb..00000000000 --- a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json +++ /dev/null @@ -1,768 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", - "title": "simcore project", - "description": "Description of a simcore project", - "type": "object", - "additionalProperties": false, - "required": [ - "uuid", - "name", - "description", - "prjOwner", - "accessRights", - "creationDate", - "lastChangeDate", - "thumbnail", - "workbench" - ], - "properties": { - "uuid": { - "type": "string", - "format": "uuid", - "description": "project unique identifier", - "examples": [ - "07640335-a91f-468c-ab69-a374fa82078d", - "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" - ] - }, - "name": { - "type": "string", - "description": "project name", - "examples": [ - "Temporal Distortion Simulator" - ] - }, - "description": { - "type": "string", - "description": "longer one-line description about the project", - "examples": [ - "Dabbling in temporal transitions ..." - ] - }, - "prjOwner": { - "type": "string", - "format": "email", - "description": "user email" - }, - "accessRights": { - "type": "object", - "description": "object containing the GroupID as key and read/write/execution permissions as value", - "patternProperties": { - "^\\S+$": { - "type": "object", - "description": "the group id", - "additionalProperties": false, - "required": [ - "read", - "write", - "delete" - ], - "properties": { - "read": { - "type": "boolean", - "description": "gives read access" - }, - "write": { - "type": "boolean", - "description": "gives write access" - }, - "delete": { - "type": "boolean", - "description": "gives deletion rights" - } - } - } - } - }, - "creationDate": { - "type": "string", - "description": "project creation date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "lastChangeDate": { - "type": "string", - "description": "last save date", - "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", - "examples": [ - "2018-07-01T11:13:43Z" - ] - }, - "thumbnail": { - "type": "string", - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "description": "url of the latest screenshot of the project", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "key", - "version", - "label" - ], - "properties": { - "key": { - "type": "string", - "description": "distinctive name for the node based on the docker registry path", - "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", - "examples": [ - "simcore/services/comp/sleeper", - "simcore/services/dynamic/3dviewer", - "simcore/services/frontend/file-picker" - ] - }, - "version": { - "type": "string", - "description": "semantic version number of the node", - "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", - "examples": [ - "1.0.0", - "0.0.1" - ] - }, - "label": { - "type": "string", - "description": "The short name of the node", - "example": [ - "JupyterLab" - ] - }, - "progress": { - "type": "number", - "maximum": 100, - "minimum": 0, - "description": "the node progress value" - }, - "thumbnail": { - "minLength": 0, - "maxLength": 2083, - "format": "uri", - "type": "string", - "description": "url of the latest screenshot of the node", - "examples": [ - "https://placeimg.com/171/96/tech/grayscale/?0.jpg" - ] - }, - "runHash": { - "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", - "type": [ - "string", - "null" - ], - "examples": [ - "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" - ] - }, - "inputs": { - "type": "object", - "description": "values of input properties", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "nodeUuid", - "output" - ], - "properties": { - "nodeUuid": { - "type": "string", - "format": "uuid" - }, - "output": { - "type": "string", - "pattern": "^[-_a-zA-Z0-9]+$" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "inputsUnits": { - "type": "object", - "description": "values of input unit", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "examples": [ - "kilo-meter", - "milli-second", - "micro-gram", - "kelvin" - ] - } - } - }, - "inputAccess": { - "description": "map with key - access level pairs", - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "type": "string", - "enum": [ - "Invisible", - "ReadOnly", - "ReadAndWrite" - ], - "default": "ReadAndWrite", - "examples": [ - "ReadOnly" - ] - } - } - }, - "inputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "node IDs of where the node is connected to", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "outputs": { - "default": {}, - "type": "object", - "patternProperties": { - "^[-_a-zA-Z0-9]+$": { - "oneOf": [ - { - "type": [ - "integer", - "boolean", - "string", - "number", - "null" - ] - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "store", - "path" - ], - "properties": { - "store": { - "type": [ - "string", - "integer" - ] - }, - "dataset": { - "type": "string" - }, - "path": { - "type": "string" - }, - "label": { - "type": "string" - }, - "eTag": { - "type": "string" - } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": [ - "downloadLink" - ], - "properties": { - "downloadLink": { - "minLength": 1, - "maxLength": 65536, - "type": "string", - "format": "uri" - }, - "label": { - "type": "string" - } - } - }, - { - "type": "array", - "items": {} - } - ] - } - } - }, - "outputNode": { - "type": "boolean", - "deprecated": true - }, - "outputNodes": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "description": "Used in group-nodes. Node IDs of those connected to the output", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "parent": { - "type": [ - "null", - "string" - ], - "format": "uuid", - "description": "Parent's (group-nodes') node ID s.", - "examples": [ - "nodeUuid1", - "nodeUuid2" - ] - }, - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - }, - "deprecated": true - }, - "state": { - "title": "NodeState", - "type": "object", - "properties": { - "modified": { - "title": "Modified", - "description": "true if the node's outputs need to be re-computed", - "default": true, - "type": "boolean" - }, - "dependencies": { - "title": "Dependencies", - "description": "contains the node inputs dependencies if they need to be computed first", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "format": "uuid" - } - }, - "currentStatus": { - "description": "the node's current state", - "default": "NOT_STARTED", - "examples": [ - "RUNNING", - "FAILED" - ], - "enum": [ - "UNKNOWN", - "PUBLISHED", - "NOT_STARTED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "additionalProperties": false - }, - "bootOptions": { - "title": "Boot Options", - "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", - "type": "object", - "patternProperties": { - "[a-zA-Z][a-azA-Z0-9_]*": { - "type": "string" - } - } - } - } - } - } - }, - "ui": { - "type": "object", - "additionalProperties": true, - "properties": { - "workbench": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "object", - "additionalProperties": false, - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "description": "The x position", - "example": [ - "12" - ] - }, - "y": { - "type": "integer", - "description": "The y position", - "example": [ - "15" - ] - } - } - }, - "marker": { - "type": "object", - "additionalProperties": false, - "required": [ - "color" - ], - "properties": { - "color": { - "type": "string", - "description": "Marker's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - } - } - } - } - } - } - }, - "slideshow": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "position" - ], - "properties": { - "position": { - "type": "integer", - "description": "Slide's position", - "examples": [ - 0, - 2 - ] - }, - "instructions": { - "type": [ - "string", - "null" - ], - "description": "Instructions about what to do in this step", - "examples": [ - "This is a **sleeper**", - "Please, select the config file defined [in this link](asdf)" - ] - } - } - } - } - }, - "currentNodeId": { - "type": "string", - "format": "uuid" - }, - "annotations": { - "type": "object", - "patternProperties": { - "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { - "type": "object", - "additionalProperties": false, - "required": [ - "type", - "color", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "description": "Annotation type", - "examples": [ - "rect", - "text" - ] - }, - "color": { - "type": "string", - "description": "Annotation's color", - "examples": [ - "#FF0000", - "#0000FF" - ] - }, - "attributes": { - "type": "object", - "description": "svg attributes" - } - } - } - } - } - } - }, - "tags": { - "type": "array", - "items": { - "type": "integer" - } - }, - "classifiers": { - "type": "array", - "description": "Contains the reference to the project classifiers", - "examples": [ - "some:id:to:a:classifier" - ], - "items": { - "type": "string" - } - }, - "dev": { - "type": "object", - "description": "object used for development purposes only" - }, - "state": { - "title": "State", - "description": "Project state", - "anyOf": [ - { - "type": "null" - }, - { - "title": "ProjectState", - "type": "object", - "additionalProperties": false, - "properties": { - "locked": { - "title": "Locked", - "description": "The project lock state", - "allOf": [ - { - "title": "ProjectLocked", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "Value", - "description": "True if the project is locked", - "type": "boolean" - }, - "owner": { - "title": "Owner", - "description": "If locked, the user that owns the lock", - "allOf": [ - { - "title": "Owner", - "type": "object", - "additionalProperties": false, - "properties": { - "user_id": { - "title": "User Id", - "type": "integer", - "description": "Owner's identifier when registered in the user's database table", - "example": [ - 2 - ] - }, - "first_name": { - "title": "First Name", - "description": "Owner first name", - "example": [ - "John" - ], - "type": "string" - }, - "last_name": { - "title": "Last Name", - "description": "Owner last name", - "example": [ - "Smith" - ], - "type": "string" - } - }, - "required": [ - "user_id", - "first_name", - "last_name" - ] - } - ] - }, - "status": { - "title": "Status", - "description": "The status of the project", - "enum": [ - "CLOSED", - "CLOSING", - "CLONING", - "OPENING", - "EXPORTING", - "OPENED" - ], - "type": "string" - } - }, - "required": [ - "value", - "status" - ] - } - ] - }, - "state": { - "title": "State", - "description": "The project running state", - "allOf": [ - { - "title": "ProjectRunningState", - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "title": "RunningState", - "description": "An enumeration.", - "enum": [ - "UNKNOWN", - "NOT_STARTED", - "PUBLISHED", - "PENDING", - "STARTED", - "RETRY", - "SUCCESS", - "FAILED", - "ABORTED" - ], - "type": "string" - } - }, - "required": [ - "value" - ] - } - ] - } - }, - "required": [ - "locked", - "state" - ] - } - ] - }, - "quality": { - "type": "object", - "title": "Quality", - "description": "Object containing Quality Assessment related data" - } - } -} From 9b0eab5f8b514a738abc5800261f0158c2311301 Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 3 Apr 2023 08:55:06 +0200 Subject: [PATCH 33/34] removing forgotten file --- .../api/v0/opeanapi-original.yaml | 2835 ----------------- 1 file changed, 2835 deletions(-) delete mode 100644 services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml diff --git a/services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml b/services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml deleted file mode 100644 index 3e9f05493f2..00000000000 --- a/services/storage/src/simcore_service_storage/api/v0/opeanapi-original.yaml +++ /dev/null @@ -1,2835 +0,0 @@ -openapi: 3.0.0 -info: - description: This is the oSparc's director API - version: 0.1.0 - title: Director API - contact: - name: IT'IS Foundation - email: support@simcore.com - license: - name: MIT - url: 'https://github.com/ITISFoundation/osparc-simcore/blob/master/LICENSE' -servers: - - description: Development server - url: 'http://{host}:{port}/{version}' - variables: - host: - default: localhost - port: - default: '8080' - version: - default: v0 - enum: - - v0 - - description: Production server - url: 'http://director:{port}/{version}' - variables: - port: - default: '8080' - version: - default: v0 - enum: - - v0 -tags: - - name: admins - description: Secured Admin-only calls - - name: developers - description: Operations available to regular developers - - name: users - description: Operations available to regular users -paths: - /: - get: - tags: - - users - summary: Service health-check endpoint - description: Some general information on the API and state of the service behind - operationId: root_get - responses: - '200': - description: Service information - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - properties: - name: - type: string - example: director service - status: - type: string - example: SERVICE_RUNNING - api_version: - type: string - example: 1.0.0-dev - version: - type: string - example: 1dfcfdc - error: - nullable: true - default: null - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - /services: - get: - tags: - - users - summary: Lists available services in the oSparc platform - description: Lists available services in the oSparc platform - operationId: services_get - parameters: - - in: query - name: service_type - description: | - The service type: - * computational - a computational service - * interactive - an interactive service - required: false - schema: - type: string - enum: - - computational - - interactive - example: computational - responses: - '200': - description: 'Success, returns the list of available services' - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - title: simcore node - description: Description of a simcore node 'class' with input and output - type: object - additionalProperties: false - required: - - key - - version - - type - - name - - description - - authors - - contact - - inputs - - outputs - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: simcore/services/comp/itis/sleeper - integration-version: - type: string - description: integration version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - version: - type: string - description: service version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - type: - type: string - description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - badges: - type: array - items: - type: object - required: - - name - - image - - url - additionalProperties: false - properties: - name: - type: string - description: Name of the subject - example: travis-ci - image: - type: string - description: Url to the shield - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' - url: - type: string - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type - authors: - type: array - minItems: 1 - items: - type: object - required: - - name - - email - additionalProperties: false - properties: - name: - type: string - description: Name of the author - example: Sun Bak - email: - description: Email address - type: string - format: email - example: sun@sense.eight - affiliation: - description: Affiliation of the author - type: string - example: Sense8 - contact: - type: string - format: email - description: email to correspond to the authors about the node - example: lab@net.flix - inputs: - type: object - description: definition of the inputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - description: data type expected on this input glob matching for data type is allowed - example: - - number - - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' - - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' - - 'data:text/plain' - - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - contentSchema: - title: Content Schema - description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: 'Units of this input value, if a physical quantity' - type: string - widget: - description: custom widget to use instead of the default one determined from the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true - outputs: - type: object - description: definition of the outputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - 'data:application/json' - - 'data:application/vnd.ms-excel ' - - 'data:text/plain' - - 'data:application/hdf5' - contentSchema: - title: Content Schema - description: jsonschema of this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: 'Units of the output value, if a physical quantity' - type: string - additionalProperties: true - boot-options: - title: Boot Options - description: Service defined boot options. These get injected in the service as env variables. - type: object - x-patternProperties: - '^[_a-zA-Z0-9]+$': - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true - error: - nullable: true - default: null - '401': - description: Unauthorized access - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '/services/{service_key}/{service_version}': - get: - tags: - - users - summary: Returns details of the selected service if available in the oSparc platform - description: Returns details of the selected service if available in the oSparc platform - operationId: services_by_key_version_get - parameters: - - in: path - name: service_key - description: The key (url) of the service - required: true - schema: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - - in: path - name: service_version - description: The tag/version of the service - required: true - schema: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - responses: - '200': - description: 'Success, returns the details of the service' - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - title: simcore node - description: Description of a simcore node 'class' with input and output - type: object - additionalProperties: false - required: - - key - - version - - type - - name - - description - - authors - - contact - - inputs - - outputs - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: simcore/services/comp/itis/sleeper - integration-version: - type: string - description: integration version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - version: - type: string - description: service version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - type: - type: string - description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - badges: - type: array - items: - type: object - required: - - name - - image - - url - additionalProperties: false - properties: - name: - type: string - description: Name of the subject - example: travis-ci - image: - type: string - description: Url to the shield - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' - url: - type: string - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type - authors: - type: array - minItems: 1 - items: - type: object - required: - - name - - email - additionalProperties: false - properties: - name: - type: string - description: Name of the author - example: Sun Bak - email: - description: Email address - type: string - format: email - example: sun@sense.eight - affiliation: - description: Affiliation of the author - type: string - example: Sense8 - contact: - type: string - format: email - description: email to correspond to the authors about the node - example: lab@net.flix - inputs: - type: object - description: definition of the inputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - description: data type expected on this input glob matching for data type is allowed - example: - - number - - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' - - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' - - 'data:text/plain' - - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - contentSchema: - title: Content Schema - description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: 'Units of this input value, if a physical quantity' - type: string - widget: - description: custom widget to use instead of the default one determined from the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true - outputs: - type: object - description: definition of the outputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - 'data:application/json' - - 'data:application/vnd.ms-excel ' - - 'data:text/plain' - - 'data:application/hdf5' - contentSchema: - title: Content Schema - description: jsonschema of this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: 'Units of the output value, if a physical quantity' - type: string - additionalProperties: true - boot-options: - title: Boot Options - description: Service defined boot options. These get injected in the service as env variables. - type: object - x-patternProperties: - '^[_a-zA-Z0-9]+$': - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true - error: - nullable: true - default: null - '401': - description: Unauthorized access - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '404': - description: Service not found - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '/services/{service_key}/{service_version}/labels': - get: - tags: - - users - summary: Returns the list of tags attached to a service - operationId: get_service_labels - parameters: - - in: path - name: service_key - description: The key (url) of the service - required: true - schema: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - - in: path - name: service_version - description: The tag/version of the service - required: true - schema: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - responses: - '200': - description: 'Success, returns the details of the service' - content: - application/json: - schema: - type: object - additionalProperties: - type: string - '401': - description: Unauthorized access - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '404': - description: Service not found - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '/service_extras/{service_key}/{service_version}': - get: - tags: - - users - summary: Returns the service's details which should be hidden from the user defined as extras. - description: Currently returns the node_requirements an array of resoruces needed for scheduling. - operationId: service_extras_by_key_version_get - parameters: - - in: path - name: service_key - description: The key (url) of the service - required: true - schema: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - - in: path - name: service_version - description: The tag/version of the service - required: true - schema: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - responses: - '200': - description: 'Success, returns an object containing details hidden from the user' - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - node_requirements - properties: - node_requirements: - type: object - required: - - CPU - - RAM - properties: - CPU: - type: number - default: 1 - minimum: 1 - GPU: - type: integer - minimum: 0 - RAM: - type: integer - format: int64 - minimum: 1024 - MPI: - type: integer - maximum: 1 - service_build_details: - type: object - properties: - build_date: - type: string - vcs_ref: - type: string - vcs_url: - type: string - container_spec: - type: object - properties: - command: - type: array - items: - type: string - error: - nullable: true - default: null - '401': - description: Unauthorized access - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '404': - description: Service not found - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - /running_interactive_services: - get: - tags: - - users - summary: Returns a list of interactive services - operationId: running_interactive_services_list_get - parameters: - - in: query - name: user_id - required: false - schema: - type: string - - in: query - name: project_id - required: false - schema: - type: string - responses: - '200': - description: Returns the running services instances - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: array - items: - type: object - required: - - published_port - - service_uuid - - service_key - - service_version - - service_host - - service_port - - service_state - - user_id - properties: - published_port: - description: The ports where the service provides its interface - type: integer - format: int32 - minimum: 1 - example: 30000 - entry_point: - description: The entry point where the service provides its interface if specified - type: string - example: /the/entry/point/is/here - service_uuid: - description: The UUID attached to this service - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - service_key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - service_version: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - service_host: - description: service host name within the network - type: string - example: jupyter_E1O2E-LAH - service_port: - description: port to access the service within the network - type: integer - minimum: 1 - example: 8081 - service_basepath: - description: different base path where current service is mounted otherwise defaults to root - type: string - example: /x/E1O2E-LAH - default: '' - service_state: - description: | - the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start - type: string - enum: - - pending - - pulling - - starting - - running - - complete - - failed - service_message: - description: the service message - type: string - example: no suitable node (insufficient resources on 1 node) - user_id: - description: the user that started the service - type: string - example: '123' - error: - nullable: true - default: null - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - post: - tags: - - users - summary: Starts an interactive service in the oSparc platform - operationId: running_interactive_services_post - parameters: - - in: query - name: user_id - description: The ID of the user that starts the service - required: true - schema: - type: string - example: asdfgj233 - - in: query - name: project_id - description: The ID of the project in which the service starts - required: true - schema: - type: string - example: asdfgj233 - - in: query - name: service_key - description: The key (url) of the service - required: true - schema: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - - in: query - name: service_tag - description: The tag/version of the service - required: false - schema: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - - in: query - name: service_uuid - description: The uuid to assign the service with - required: true - schema: - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - - in: query - name: service_basepath - description: predefined basepath for the backend service otherwise uses root - required: false - schema: - type: string - example: /x/EycCXbU0H/ - default: '' - responses: - '201': - description: Succesfully created the service in the oSparc platform. Returns the location where the service runs. - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - published_port - - service_uuid - - service_key - - service_version - - service_host - - service_port - - service_state - - user_id - properties: - published_port: - description: The ports where the service provides its interface - type: integer - format: int32 - minimum: 1 - example: 30000 - entry_point: - description: The entry point where the service provides its interface if specified - type: string - example: /the/entry/point/is/here - service_uuid: - description: The UUID attached to this service - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - service_key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - service_version: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - service_host: - description: service host name within the network - type: string - example: jupyter_E1O2E-LAH - service_port: - description: port to access the service within the network - type: integer - minimum: 1 - example: 8081 - service_basepath: - description: different base path where current service is mounted otherwise defaults to root - type: string - example: /x/E1O2E-LAH - default: '' - service_state: - description: | - the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start - type: string - enum: - - pending - - pulling - - starting - - running - - complete - - failed - service_message: - description: the service message - type: string - example: no suitable node (insufficient resources on 1 node) - user_id: - description: the user that started the service - type: string - example: '123' - error: - nullable: true - default: null - '400': - description: 'Malformed function call, missing field' - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '401': - description: Unauthorized access - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '404': - description: Service not found - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '409': - description: A service with the same uuid already exists - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '/running_interactive_services/{service_uuid}': - get: - tags: - - users - summary: Succesfully returns if a service with the defined uuid is up and running - description: Succesfully returns if a service with the defined uuid is up and running - operationId: running_interactive_services_get - parameters: - - in: path - name: service_uuid - description: The uuid of the service - required: true - schema: - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - responses: - '200': - description: OK service exists and runs. Returns service location. - content: - application/json: - schema: - type: object - required: - - data - properties: - data: - type: object - required: - - published_port - - service_uuid - - service_key - - service_version - - service_host - - service_port - - service_state - - user_id - properties: - published_port: - description: The ports where the service provides its interface - type: integer - format: int32 - minimum: 1 - example: 30000 - entry_point: - description: The entry point where the service provides its interface if specified - type: string - example: /the/entry/point/is/here - service_uuid: - description: The UUID attached to this service - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - service_key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - service_version: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - service_host: - description: service host name within the network - type: string - example: jupyter_E1O2E-LAH - service_port: - description: port to access the service within the network - type: integer - minimum: 1 - example: 8081 - service_basepath: - description: different base path where current service is mounted otherwise defaults to root - type: string - example: /x/E1O2E-LAH - default: '' - service_state: - description: | - the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start - type: string - enum: - - pending - - pulling - - starting - - running - - complete - - failed - service_message: - description: the service message - type: string - example: no suitable node (insufficient resources on 1 node) - user_id: - description: the user that started the service - type: string - example: '123' - error: - nullable: true - default: null - '400': - description: 'Malformed function call, missing field' - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '404': - description: Service not found - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - delete: - tags: - - users - summary: Stops and removes an interactive service from the oSparc platform - description: Stops and removes an interactive service from the oSparc platform - operationId: running_interactive_services_delete - parameters: - - in: path - name: service_uuid - description: The uuid of the service - required: true - schema: - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - - in: query - name: save_state - description: Save the state prior to removing the service - required: false - schema: - type: boolean - default: true - responses: - '204': - description: Succesfully stopped and removed the service from the oSparc platform - '400': - description: 'Malformed function call, missing field' - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - '404': - description: Service not found - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - default: - description: Unexpected error - content: - application/json: - schema: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 -components: - parameters: - UserId: - in: query - name: user_id - description: The ID of the user that starts the service - required: true - schema: - type: string - example: asdfgj233 - ProjectId: - in: query - name: project_id - description: The ID of the project in which the service starts - required: true - schema: - type: string - example: asdfgj233 - AssignmentUuid: - in: query - name: service_uuid - description: The uuid to assign the service with - required: true - schema: - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - ServiceKeyPath: - in: path - name: service_key - description: The key (url) of the service - required: true - schema: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - ServiceKey: - in: query - name: service_key - description: The key (url) of the service - required: true - schema: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - ServiceType: - in: query - name: service_type - description: | - The service type: - * computational - a computational service - * interactive - an interactive service - required: false - schema: - type: string - enum: - - computational - - interactive - example: computational - ServiceBasePath: - in: query - name: service_basepath - description: predefined basepath for the backend service otherwise uses root - required: false - schema: - type: string - example: /x/EycCXbU0H/ - default: '' - ServiceUuid: - in: path - name: service_uuid - description: The uuid of the service - required: true - schema: - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - ServiceVersionPath: - in: path - name: service_version - description: The tag/version of the service - required: true - schema: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - ServiceVersion: - in: query - name: service_tag - description: The tag/version of the service - required: false - schema: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - SaveState: - in: query - name: save_state - description: Save the state prior to removing the service - required: false - schema: - type: boolean - default: true - schemas: - ErrorEnveloped: - type: object - required: - - error - properties: - data: - nullable: true - default: null - error: - type: object - required: - - status - - message - properties: - message: - description: Error message - type: string - example: Unexpected error - errors: - type: array - items: - properties: - code: - type: string - description: Server Exception - example: ServiceUUIDNotFoundError - status: - description: Error code - type: integer - example: 404 - RunningServiceEnveloped: - type: object - required: - - data - properties: - data: - type: object - required: - - published_port - - service_uuid - - service_key - - service_version - - service_host - - service_port - - service_state - - user_id - properties: - published_port: - description: The ports where the service provides its interface - type: integer - format: int32 - minimum: 1 - example: 30000 - entry_point: - description: The entry point where the service provides its interface if specified - type: string - example: /the/entry/point/is/here - service_uuid: - description: The UUID attached to this service - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - service_key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - service_version: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - service_host: - description: service host name within the network - type: string - example: jupyter_E1O2E-LAH - service_port: - description: port to access the service within the network - type: integer - minimum: 1 - example: 8081 - service_basepath: - description: different base path where current service is mounted otherwise defaults to root - type: string - example: /x/E1O2E-LAH - default: '' - service_state: - description: | - the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start - type: string - enum: - - pending - - pulling - - starting - - running - - complete - - failed - service_message: - description: the service message - type: string - example: no suitable node (insufficient resources on 1 node) - user_id: - description: the user that started the service - type: string - example: '123' - error: - nullable: true - default: null - RunningServicesEnveloped: - type: object - required: - - data - properties: - data: - type: array - items: - type: object - required: - - published_port - - service_uuid - - service_key - - service_version - - service_host - - service_port - - service_state - - user_id - properties: - published_port: - description: The ports where the service provides its interface - type: integer - format: int32 - minimum: 1 - example: 30000 - entry_point: - description: The entry point where the service provides its interface if specified - type: string - example: /the/entry/point/is/here - service_uuid: - description: The UUID attached to this service - type: string - example: 123e4567-e89b-12d3-a456-426655440000 - service_key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic)(/[\w/-]+)+$' - example: - - simcore/services/comp/itis/sleeper - - simcore/services/dynamic/3dviewer - service_version: - type: string - description: semantic version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: - - 1.0.0 - - 0.0.1 - service_host: - description: service host name within the network - type: string - example: jupyter_E1O2E-LAH - service_port: - description: port to access the service within the network - type: integer - minimum: 1 - example: 8081 - service_basepath: - description: different base path where current service is mounted otherwise defaults to root - type: string - example: /x/E1O2E-LAH - default: '' - service_state: - description: | - the service state * 'pending' - The service is waiting for resources to start * 'pulling' - The service is being pulled from the registry * 'starting' - The service is starting * 'running' - The service is running * 'complete' - The service completed * 'failed' - The service failed to start - type: string - enum: - - pending - - pulling - - starting - - running - - complete - - failed - service_message: - description: the service message - type: string - example: no suitable node (insufficient resources on 1 node) - user_id: - description: the user that started the service - type: string - example: '123' - error: - nullable: true - default: null - ServicesEnveloped: - type: object - required: - - data - properties: - data: - type: array - items: - title: simcore node - description: Description of a simcore node 'class' with input and output - type: object - additionalProperties: false - required: - - key - - version - - type - - name - - description - - authors - - contact - - inputs - - outputs - properties: - key: - type: string - description: distinctive name for the node based on the docker registry path - pattern: '^(simcore)/(services)/(comp|dynamic|frontend)(/[\w/-]+)+$' - example: simcore/services/comp/itis/sleeper - integration-version: - type: string - description: integration version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - version: - type: string - description: service version number - pattern: '^(0|[1-9]\d*)(\.(0|[1-9]\d*)){2}(-(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*)(\.(0|[1-9]\d*|\d*[-a-zA-Z][-\da-zA-Z]*))*)?(\+[-\da-zA-Z]+(\.[-\da-zA-Z-]+)*)?$' - example: 1.0.0 - type: - type: string - description: service type - enum: - - frontend - - computational - - dynamic - example: computational - name: - type: string - description: 'short, human readable name for the node' - example: Fast Counter - thumbnail: - type: string - description: url to the thumbnail - example: 'https://user-images.githubusercontent.com/32800795/61083844-ff48fb00-a42c-11e9-8e63-fa2d709c8baf.png' - badges: - type: array - items: - type: object - required: - - name - - image - - url - additionalProperties: false - properties: - name: - type: string - description: Name of the subject - example: travis-ci - image: - type: string - description: Url to the shield - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore.svg?branch=master' - url: - type: string - description: Link to status - example: 'https://travis-ci.org/ITISFoundation/osparc-simcore ''State of CI: build, test and pushing images''' - description: - type: string - description: human readable description of the purpose of the node - example: Our best node type - authors: - type: array - minItems: 1 - items: - type: object - required: - - name - - email - additionalProperties: false - properties: - name: - type: string - description: Name of the author - example: Sun Bak - email: - description: Email address - type: string - format: email - example: sun@sense.eight - affiliation: - description: Affiliation of the author - type: string - example: Sense8 - contact: - type: string - format: email - description: email to correspond to the authors about the node - example: lab@net.flix - inputs: - type: object - description: definition of the inputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the input configurable for this service - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - description: 'DEPRECATED: new display order is taken from the item position. This property will be removed.' - deprecated: true - type: number - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:([^/\s,]+/[^/\s,]+|\[[^/\s,]+/[^/\s,]+(,[^/\s]+/[^/,\s]+)*\]))$' - description: data type expected on this input glob matching for data type is allowed - example: - - number - - boolean - - 'data:*/*' - - 'data:text/*' - - 'data:[image/jpeg,image/png]' - - 'data:application/json' - - 'data:application/json;schema=https://my-schema/not/really/schema.json' - - 'data:application/vnd.ms-excel' - - 'data:text/plain' - - 'data:application/hdf5' - - 'data:application/edu.ucdavis@ceclancy.xyz' - contentSchema: - title: Content Schema - description: jsonschema of the content at this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data associated with the named keys in files - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - defaultValue: - description: initial value for this input - type: - - string - - number - - integer - - boolean - example: - - Dog - - true - unit: - title: Unit - description: 'Units of this input value, if a physical quantity' - type: string - widget: - description: custom widget to use instead of the default one determined from the data-type - anyOf: - - type: object - additionalProperties: false - required: - - type - properties: - type: - description: type of the property - type: string - enum: - - TextArea - minHeight: - description: minimum Height of the textarea - type: integer - minimum: 1 - - type: object - additionalProperties: false - required: - - type - - structure - properties: - type: - description: type of the property - type: string - enum: - - SelectBox - structure: - type: array - minItems: 1 - items: - type: object - additionalProperties: false - required: - - key - - label - properties: - key: - type: - - string - - boolean - - number - label: - type: string - example: - - - key: rat - label: The Rat - - key: dog - label: Bello the Dog - additionalProperties: true - outputs: - type: object - description: definition of the outputs of this node - x-patternProperties: - '^[-_a-zA-Z0-9]+$': - type: object - description: all the output produced by this node - additionalProperties: false - required: - - displayOrder - - label - - description - - type - properties: - displayOrder: - type: number - description: use this to numerically sort the properties for display - example: - - 1 - - -0.2 - label: - type: string - description: short name for the property - example: - - Age - description: - type: string - description: description of the property - example: - - Age in seconds since 1970 - type: - type: string - pattern: '^(number|integer|boolean|string|ref_contentSchema|data:[^/\s,]+/[^/\s,]+)$' - description: data type expected on this output - example: - - number - - integer - - boolean - - string - - 'data:application/json' - - 'data:application/vnd.ms-excel ' - - 'data:text/plain' - - 'data:application/hdf5' - contentSchema: - title: Content Schema - description: jsonschema of this input/output. Required when type='ref_contentSchema' - type: object - fileToKeyMap: - description: Place the data stored in the named files and store it in the locations pointed to by the respective output key. - type: object - patternProperties: - .+: - type: string - pattern: '^[-_a-zA-Z0-9]+$' - example: - - dir/input1.txt: key_1 - dir33/input2.txt: key2 - unit: - title: Unit - description: 'Units of the output value, if a physical quantity' - type: string - additionalProperties: true - boot-options: - title: Boot Options - description: Service defined boot options. These get injected in the service as env variables. - type: object - x-patternProperties: - '^[_a-zA-Z0-9]+$': - title: BootOptionMode - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - default: - title: Default - type: string - items: - title: Items - type: object - additionalProperties: - title: BootOptionItem - type: object - properties: - label: - title: Label - type: string - description: - title: Description - type: string - required: - - label - - description - required: - - label - - description - - default - - items - additionalProperties: true - error: - nullable: true - default: null - ServiceExtrasEnveloped: - type: object - required: - - data - properties: - data: - type: object - required: - - node_requirements - properties: - node_requirements: - type: object - required: - - CPU - - RAM - properties: - CPU: - type: number - default: 1 - minimum: 1 - GPU: - type: integer - minimum: 0 - RAM: - type: integer - format: int64 - minimum: 1024 - MPI: - type: integer - maximum: 1 - service_build_details: - type: object - properties: - build_date: - type: string - vcs_ref: - type: string - vcs_url: - type: string - container_spec: - type: object - properties: - command: - type: array - items: - type: string - error: - nullable: true - default: null - HealthCheckEnveloped: - type: object - required: - - data - properties: - data: - type: object - properties: - name: - type: string - example: director service - status: - type: string - example: SERVICE_RUNNING - api_version: - type: string - example: 1.0.0-dev - version: - type: string - example: 1dfcfdc - error: - nullable: true - default: null From e6598d6e5a21bfbfba188be52d3d4478a0f57e8f Mon Sep 17 00:00:00 2001 From: matusdrobuliak66 Date: Mon, 3 Apr 2023 09:03:31 +0200 Subject: [PATCH 34/34] we will leave the old project-v0.0.1.json - until we fix #3992 issue --- .../api/v0/schemas/project-v0.0.1.json | 768 ++++++++++++++++++ 1 file changed, 768 insertions(+) create mode 100644 services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json diff --git a/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json new file mode 100644 index 00000000000..8c178845ccb --- /dev/null +++ b/services/web/server/src/simcore_service_webserver/api/v0/schemas/project-v0.0.1.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://simcore.io/api/specs/webserver/v0/components/schemas/project-v0.0.1.json", + "title": "simcore project", + "description": "Description of a simcore project", + "type": "object", + "additionalProperties": false, + "required": [ + "uuid", + "name", + "description", + "prjOwner", + "accessRights", + "creationDate", + "lastChangeDate", + "thumbnail", + "workbench" + ], + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "description": "project unique identifier", + "examples": [ + "07640335-a91f-468c-ab69-a374fa82078d", + "9bcf8feb-c1b1-41b6-b201-639cd6ccdba8" + ] + }, + "name": { + "type": "string", + "description": "project name", + "examples": [ + "Temporal Distortion Simulator" + ] + }, + "description": { + "type": "string", + "description": "longer one-line description about the project", + "examples": [ + "Dabbling in temporal transitions ..." + ] + }, + "prjOwner": { + "type": "string", + "format": "email", + "description": "user email" + }, + "accessRights": { + "type": "object", + "description": "object containing the GroupID as key and read/write/execution permissions as value", + "patternProperties": { + "^\\S+$": { + "type": "object", + "description": "the group id", + "additionalProperties": false, + "required": [ + "read", + "write", + "delete" + ], + "properties": { + "read": { + "type": "boolean", + "description": "gives read access" + }, + "write": { + "type": "boolean", + "description": "gives write access" + }, + "delete": { + "type": "boolean", + "description": "gives deletion rights" + } + } + } + } + }, + "creationDate": { + "type": "string", + "description": "project creation date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "lastChangeDate": { + "type": "string", + "description": "last save date", + "pattern": "\\d{4}-(12|11|10|0?[1-9])-(31|30|[0-2]?\\d)T(2[0-3]|1\\d|0?[0-9])(:(\\d|[0-5]\\d)){2}(\\.\\d{3})?Z", + "examples": [ + "2018-07-01T11:13:43Z" + ] + }, + "thumbnail": { + "type": "string", + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "description": "url of the latest screenshot of the project", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "key", + "version", + "label" + ], + "properties": { + "key": { + "type": "string", + "description": "distinctive name for the node based on the docker registry path", + "pattern": "^(simcore)/(services)/(comp|dynamic|frontend)(/[\\w/-]+)+$", + "examples": [ + "simcore/services/comp/sleeper", + "simcore/services/dynamic/3dviewer", + "simcore/services/frontend/file-picker" + ] + }, + "version": { + "type": "string", + "description": "semantic version number of the node", + "pattern": "^(0|[1-9]\\d*)(\\.(0|[1-9]\\d*)){2}(-(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*)(\\.(0|[1-9]\\d*|\\d*[-a-zA-Z][-\\da-zA-Z]*))*)?(\\+[-\\da-zA-Z]+(\\.[-\\da-zA-Z-]+)*)?$", + "examples": [ + "1.0.0", + "0.0.1" + ] + }, + "label": { + "type": "string", + "description": "The short name of the node", + "example": [ + "JupyterLab" + ] + }, + "progress": { + "type": "number", + "maximum": 100, + "minimum": 0, + "description": "the node progress value" + }, + "thumbnail": { + "minLength": 0, + "maxLength": 2083, + "format": "uri", + "type": "string", + "description": "url of the latest screenshot of the node", + "examples": [ + "https://placeimg.com/171/96/tech/grayscale/?0.jpg" + ] + }, + "runHash": { + "description": "the hex digest of the resolved inputs +outputs hash at the time when the last outputs were generated", + "type": [ + "string", + "null" + ], + "examples": [ + "a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2" + ] + }, + "inputs": { + "type": "object", + "description": "values of input properties", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "nodeUuid", + "output" + ], + "properties": { + "nodeUuid": { + "type": "string", + "format": "uuid" + }, + "output": { + "type": "string", + "pattern": "^[-_a-zA-Z0-9]+$" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "inputsUnits": { + "type": "object", + "description": "values of input unit", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "examples": [ + "kilo-meter", + "milli-second", + "micro-gram", + "kelvin" + ] + } + } + }, + "inputAccess": { + "description": "map with key - access level pairs", + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "type": "string", + "enum": [ + "Invisible", + "ReadOnly", + "ReadAndWrite" + ], + "default": "ReadAndWrite", + "examples": [ + "ReadOnly" + ] + } + } + }, + "inputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "node IDs of where the node is connected to", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "outputs": { + "default": {}, + "type": "object", + "patternProperties": { + "^[-_a-zA-Z0-9]+$": { + "oneOf": [ + { + "type": [ + "integer", + "boolean", + "string", + "number", + "null" + ] + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "store", + "path" + ], + "properties": { + "store": { + "type": [ + "string", + "integer" + ] + }, + "dataset": { + "type": "string" + }, + "path": { + "type": "string" + }, + "label": { + "type": "string" + }, + "eTag": { + "type": "string" + } + } + }, + { + "type": "object", + "additionalProperties": false, + "required": [ + "downloadLink" + ], + "properties": { + "downloadLink": { + "minLength": 1, + "maxLength": 65536, + "type": "string", + "format": "uri" + }, + "label": { + "type": "string" + } + } + }, + { + "type": "array", + "items": {} + } + ] + } + } + }, + "outputNode": { + "type": "boolean", + "deprecated": true + }, + "outputNodes": { + "type": "array", + "items": { + "type": "string", + "format": "uuid" + }, + "description": "Used in group-nodes. Node IDs of those connected to the output", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "parent": { + "type": [ + "null", + "string" + ], + "format": "uuid", + "description": "Parent's (group-nodes') node ID s.", + "examples": [ + "nodeUuid1", + "nodeUuid2" + ] + }, + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + }, + "deprecated": true + }, + "state": { + "title": "NodeState", + "type": "object", + "properties": { + "modified": { + "title": "Modified", + "description": "true if the node's outputs need to be re-computed", + "default": true, + "type": "boolean" + }, + "dependencies": { + "title": "Dependencies", + "description": "contains the node inputs dependencies if they need to be computed first", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "format": "uuid" + } + }, + "currentStatus": { + "description": "the node's current state", + "default": "NOT_STARTED", + "examples": [ + "RUNNING", + "FAILED" + ], + "enum": [ + "UNKNOWN", + "PUBLISHED", + "NOT_STARTED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "additionalProperties": false + }, + "bootOptions": { + "title": "Boot Options", + "description": "Some services provide alternative parameters to be injected at boot time. The user selection should be stored here, and it will overwrite the services's defaults.", + "type": "object", + "patternProperties": { + "[a-zA-Z][a-azA-Z0-9_]*": { + "type": "string" + } + } + } + } + } + } + }, + "ui": { + "type": "object", + "additionalProperties": true, + "properties": { + "workbench": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "object", + "additionalProperties": false, + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "description": "The x position", + "example": [ + "12" + ] + }, + "y": { + "type": "integer", + "description": "The y position", + "example": [ + "15" + ] + } + } + }, + "marker": { + "type": "object", + "additionalProperties": false, + "required": [ + "color" + ], + "properties": { + "color": { + "type": "string", + "description": "Marker's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + } + } + } + } + } + } + }, + "slideshow": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "position" + ], + "properties": { + "position": { + "type": "integer", + "description": "Slide's position", + "examples": [ + 0, + 2 + ] + }, + "instructions": { + "type": [ + "string", + "null" + ], + "description": "Instructions about what to do in this step", + "examples": [ + "This is a **sleeper**", + "Please, select the config file defined [in this link](asdf)" + ] + } + } + } + } + }, + "currentNodeId": { + "type": "string", + "format": "uuid" + }, + "annotations": { + "type": "object", + "patternProperties": { + "^[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$": { + "type": "object", + "additionalProperties": false, + "required": [ + "type", + "color", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "description": "Annotation type", + "examples": [ + "rect", + "text" + ] + }, + "color": { + "type": "string", + "description": "Annotation's color", + "examples": [ + "#FF0000", + "#0000FF" + ] + }, + "attributes": { + "type": "object", + "description": "svg attributes" + } + } + } + } + } + } + }, + "tags": { + "type": "array", + "items": { + "type": "integer" + } + }, + "classifiers": { + "type": "array", + "description": "Contains the reference to the project classifiers", + "examples": [ + "some:id:to:a:classifier" + ], + "items": { + "type": "string" + } + }, + "dev": { + "type": "object", + "description": "object used for development purposes only" + }, + "state": { + "title": "State", + "description": "Project state", + "anyOf": [ + { + "type": "null" + }, + { + "title": "ProjectState", + "type": "object", + "additionalProperties": false, + "properties": { + "locked": { + "title": "Locked", + "description": "The project lock state", + "allOf": [ + { + "title": "ProjectLocked", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "Value", + "description": "True if the project is locked", + "type": "boolean" + }, + "owner": { + "title": "Owner", + "description": "If locked, the user that owns the lock", + "allOf": [ + { + "title": "Owner", + "type": "object", + "additionalProperties": false, + "properties": { + "user_id": { + "title": "User Id", + "type": "integer", + "description": "Owner's identifier when registered in the user's database table", + "example": [ + 2 + ] + }, + "first_name": { + "title": "First Name", + "description": "Owner first name", + "example": [ + "John" + ], + "type": "string" + }, + "last_name": { + "title": "Last Name", + "description": "Owner last name", + "example": [ + "Smith" + ], + "type": "string" + } + }, + "required": [ + "user_id", + "first_name", + "last_name" + ] + } + ] + }, + "status": { + "title": "Status", + "description": "The status of the project", + "enum": [ + "CLOSED", + "CLOSING", + "CLONING", + "OPENING", + "EXPORTING", + "OPENED" + ], + "type": "string" + } + }, + "required": [ + "value", + "status" + ] + } + ] + }, + "state": { + "title": "State", + "description": "The project running state", + "allOf": [ + { + "title": "ProjectRunningState", + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "title": "RunningState", + "description": "An enumeration.", + "enum": [ + "UNKNOWN", + "NOT_STARTED", + "PUBLISHED", + "PENDING", + "STARTED", + "RETRY", + "SUCCESS", + "FAILED", + "ABORTED" + ], + "type": "string" + } + }, + "required": [ + "value" + ] + } + ] + } + }, + "required": [ + "locked", + "state" + ] + } + ] + }, + "quality": { + "type": "object", + "title": "Quality", + "description": "Object containing Quality Assessment related data" + } + } +}