Skip to content

Commit 981fb94

Browse files
committed
Pass explicitly defined output file inputs to the additional outputs collected by ShellOutSpec.collect_additional_outputs
1 parent 9053ba7 commit 981fb94

File tree

1 file changed

+22
-15
lines changed

1 file changed

+22
-15
lines changed

pydra/engine/specs.py

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ def collect_additional_outputs(self, inputs, output_dir, outputs):
450450
File,
451451
MultiOutputFile,
452452
Directory,
453+
Path,
453454
int,
454455
float,
455456
bool,
@@ -458,23 +459,29 @@ def collect_additional_outputs(self, inputs, output_dir, outputs):
458459
]:
459460
raise Exception("not implemented (collect_additional_output)")
460461
# assuming that field should have either default or metadata, but not both
461-
if (
462-
fld.default is None or fld.default == attr.NOTHING
463-
) and not fld.metadata: # TODO: is it right?
464-
raise AttributeError("File has to have default value or metadata")
465-
elif fld.default != attr.NOTHING:
466-
additional_out[fld.name] = self._field_defaultvalue(fld, output_dir)
467-
elif fld.metadata:
462+
try:
463+
additional_out[fld.name] = getattr(inputs, fld.name)
464+
except AttributeError:
468465
if (
469-
fld.type in [int, float, bool, str, list]
470-
and "callable" not in fld.metadata
471-
):
472-
raise AttributeError(
473-
f"{fld.type} has to have a callable in metadata"
466+
fld.default is None or fld.default == attr.NOTHING
467+
) and not fld.metadata: # TODO: is it right?
468+
raise AttributeError("File has to have default value or metadata")
469+
elif fld.default != attr.NOTHING:
470+
additional_out[fld.name] = self._field_defaultvalue(fld, output_dir)
471+
elif fld.metadata:
472+
if (
473+
fld.type in [int, float, bool, str, list]
474+
and "callable" not in fld.metadata
475+
):
476+
raise AttributeError(
477+
f"{fld.type} has to have a callable in metadata"
478+
)
479+
additional_out[fld.name] = self._field_metadata(
480+
fld, inputs, output_dir, outputs
474481
)
475-
additional_out[fld.name] = self._field_metadata(
476-
fld, inputs, output_dir, outputs
477-
)
482+
else:
483+
if fld.type in (File, MultiOutputFile, Directory, Path):
484+
additional_out[fld.name] = Path(additional_out[fld.name]).absolute()
478485
return additional_out
479486

480487
def generated_output_names(self, inputs, output_dir):

0 commit comments

Comments
 (0)