diff --git a/gui/src/components/entry/properties/WorkflowCard.js b/gui/src/components/entry/properties/WorkflowCard.js index 2e8eb39577051491cb924da00216ea305d582fdf..4af8bfd82bc0e4e5d8d845c0ca405e78e87f8d2e 100644 --- a/gui/src/components/entry/properties/WorkflowCard.js +++ b/gui/src/components/entry/properties/WorkflowCard.js @@ -203,6 +203,15 @@ const getLinks = async (source, query) => { const isLinked = (source, target) => { if (source.url === target.url) return false + const inputs = [] + if (target.type === 'tasks' && target.nodes) { + inputs.push(...target.nodes.filter(node => node.type && node.type.startsWith('inputs')).map(node => node.url)) + } else { + inputs.push(target.url) + } + + if (inputs.includes(source.url)) return true + const outputs = [] if (source.type === 'tasks' && source.nodes) { outputs.push(...source.nodes.filter(node => node.type === 'outputs').map(node => node.url)) @@ -210,12 +219,7 @@ const getLinks = async (source, query) => { outputs.push(source.url) } - const inputs = [] - if (target.type === 'tasks' && target.nodes) { - inputs.push(...target.nodes.filter(node => node.type && node.type.startsWith('inputs')).map(node => node.url)) - } else { - inputs.push(target.url) - } + if (outputs.includes(target.url)) return true let linked = false for (const output of outputs) { diff --git a/nomad/datamodel/metainfo/workflow.py b/nomad/datamodel/metainfo/workflow.py index a77f0af398ff271e2fae073b16230995a311bfd1..2f446ebaeec2da83ff31e47e2809bf03d0dc5971 100644 --- a/nomad/datamodel/metainfo/workflow.py +++ b/nomad/datamodel/metainfo/workflow.py @@ -98,9 +98,18 @@ class TaskReference(Task): def normalize(self, archive, logger): super().normalize(archive, logger) - if not self.name and self.task: + if self.task is None: + return + + if not self.name: self.name = self.task.name + # add task inputs/outputs to inputs/outputs + self.inputs.extend([inp for inp in self.task.inputs if inp not in self.inputs]) + self.outputs.extend( + [out for out in self.task.outputs if out not in self.outputs] + ) + class Workflow(Task, EntryData): """