From dbc51668cfb166af25ea3b3f1eeac6daebb2e2a7 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Thu, 26 Jun 2025 15:18:31 +0200 Subject: [PATCH 1/2] more checks --- .../class/osparc/dashboard/ResourceDetails.js | 2 +- .../client/source/class/osparc/study/Utils.js | 28 +++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js b/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js index bd5f1785227..6cf4645d34c 100644 --- a/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js +++ b/services/static-webserver/client/source/class/osparc/dashboard/ResourceDetails.js @@ -886,7 +886,7 @@ qx.Class.define("osparc.dashboard.ResourceDetails", { return null; } - if (!osparc.study.Utils.canCreateFunction(this.__resourceData["workbench"])) { + if (!osparc.study.Utils.isPotentialFunction(this.__resourceData["workbench"])) { return null; } diff --git a/services/static-webserver/client/source/class/osparc/study/Utils.js b/services/static-webserver/client/source/class/osparc/study/Utils.js index 710bb5d3805..1d11e245f07 100644 --- a/services/static-webserver/client/source/class/osparc/study/Utils.js +++ b/services/static-webserver/client/source/class/osparc/study/Utils.js @@ -250,6 +250,16 @@ qx.Class.define("osparc.study.Utils", { return Array.from(services); }, + extractComputationalServices: function(workbench) { + const computationals = Object.values(workbench).filter(srv => osparc.data.model.Node.isComputational(srv)); + return computationals; + }, + + extractDynamicServices: function(workbench) { + const dynamics = Object.values(workbench).filter(srv => osparc.data.model.Node.isDynamic(srv)); + return dynamics; + }, + extractFilePickers: function(workbench) { const parameters = Object.values(workbench).filter(srv => srv["key"].includes("simcore/services/frontend/file-picker")); return parameters; @@ -277,20 +287,28 @@ qx.Class.define("osparc.study.Utils", { return parameters; }, - canCreateFunction: function(workbench) { + isPotentialFunction: function(workbench) { // in order to create a function, the pipeline needs: - // - at least one parameter (or file-picker (file type parameter)) - // - at least one probe + // - at least one parameter or one probe + // - for now, only float types are allowed + // - at least one computational service + // - no dynamic services // const filePickers = osparc.study.Utils.extractFilePickers(workbench); // const parameters = osparc.study.Utils.extractParameters(workbench); // const probes = osparc.study.Utils.extractProbes(workbench); // return (filePickers.length + parameters.length) && probes.length; - // - for now, only float types are allowed const parameters = osparc.study.Utils.extractFunctionableParameters(workbench); const probes = osparc.study.Utils.extractFunctionableProbes(workbench); - return parameters.length && probes.length; + const computationals = osparc.study.Utils.extractComputationalServices(workbench); + const dynamics = osparc.study.Utils.extractDynamicServices(workbench); + + return ( + (parameters.length || probes.length) && + computationals.length > 0 && + dynamics.length === 0 + ); }, getCantReadServices: function(studyServices = []) { From a9022557e50e8cc9161e254c6601b4e46b734ad1 Mon Sep 17 00:00:00 2001 From: odeimaiz Date: Thu, 26 Jun 2025 15:34:03 +0200 Subject: [PATCH 2/2] getMetadata --- .../client/source/class/osparc/study/Utils.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/static-webserver/client/source/class/osparc/study/Utils.js b/services/static-webserver/client/source/class/osparc/study/Utils.js index 1d11e245f07..a592cd4cf89 100644 --- a/services/static-webserver/client/source/class/osparc/study/Utils.js +++ b/services/static-webserver/client/source/class/osparc/study/Utils.js @@ -251,12 +251,18 @@ qx.Class.define("osparc.study.Utils", { }, extractComputationalServices: function(workbench) { - const computationals = Object.values(workbench).filter(srv => osparc.data.model.Node.isComputational(srv)); + const computationals = Object.values(workbench).filter(node => { + const metadata = osparc.store.Services.getMetadata(node["key"], node["version"]); + return metadata && osparc.data.model.Node.isComputational(metadata); + }); return computationals; }, extractDynamicServices: function(workbench) { - const dynamics = Object.values(workbench).filter(srv => osparc.data.model.Node.isDynamic(srv)); + const dynamics = Object.values(workbench).filter(node => { + const metadata = osparc.store.Services.getMetadata(node["key"], node["version"]); + return metadata && osparc.data.model.Node.isDynamic(metadata); + }); return dynamics; },