From ef934c15a59ccebd64caec5db3d23e0a42e8c6e8 Mon Sep 17 00:00:00 2001 From: LanderOtto Date: Tue, 28 Apr 2026 17:00:13 +0200 Subject: [PATCH] Fix source port resolution in CWL translator --- CHANGELOG.md | 1 + streamflow/cwl/translator.py | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9da3133d8..8ecfa3c2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fix source port resolution in CWL translator - Fix shell reuse collision across execution locations ([#1045](https://github.com/alpha-unito/streamflow/pull/1045)) - Fix operators in `Hardware` and `Storage` ([#1044](https://github.com/alpha-unito/streamflow/pull/1044)) - Fix Docker Compose NDJSON location parsing ([#1043](https://github.com/alpha-unito/streamflow/pull/1043)) diff --git a/streamflow/cwl/translator.py b/streamflow/cwl/translator.py index 01f690ba8..08b257a5d 100644 --- a/streamflow/cwl/translator.py +++ b/streamflow/cwl/translator.py @@ -1780,13 +1780,19 @@ def _get_input_port( return input_port def _get_source_port(self, workflow: Workflow, source_name: str) -> Port: - if source_name in self.output_ports: + # Return the output port of a previous step. + # If the port has no input step, it means it is the output of the workflow + if ( + source_name in self.output_ports + and self.output_ports[source_name].get_input_steps() + ): return self.output_ports[source_name] if source_name not in self.input_ports: if source_name not in self.output_ports: self.output_ports[source_name] = workflow.create_port() return self.output_ports[source_name] else: + # The `source_port` is an input of the workflow return self.input_ports[source_name] def _handle_default_port(