Skip to content

Commit 91c2899

Browse files
committed
detect directory input/output types in create_packages script
1 parent 0ee39df commit 91c2899

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

scripts/pkg_gen/create_packages.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import yaml
1616
import fileformats.core.utils
1717
import fileformats.core.mixin
18-
from fileformats.generic import File
18+
from fileformats.generic import File, Directory
1919
from fileformats.medimage import Nifti1, NiftiGz, Bval, Bvec
2020
from fileformats.application import Dicom, Xml
2121
from fileformats.text import TextFile
@@ -59,6 +59,7 @@ def escape_leading_digits(name: str) -> str:
5959
"9": "nine",
6060
}
6161

62+
6263
def download_tasks_template(output_path: Path):
6364
"""Downloads the latest pydra-template to the output path"""
6465

@@ -161,6 +162,8 @@ def generate_packages(
161162
file_outputs,
162163
genfile_outputs,
163164
multi_inputs,
165+
dir_inputs,
166+
dir_outputs,
164167
) = parse_nipype_interface(nipype_interface)
165168

166169
# Create "stubs" for each of the available fields
@@ -188,7 +191,9 @@ def fields_stub(name, category_class, values=None):
188191
return dct
189192

190193
input_types = {i: File for i in file_inputs}
194+
input_types.update({i: Directory for i in dir_inputs})
191195
output_types = {o: File for o in file_outputs}
196+
output_types.update({o: Directory for o in dir_outputs})
192197
output_templates = {}
193198

194199
# Attempt to parse doctest to pull out sensible defaults for input/output
@@ -574,6 +579,7 @@ def parse_nipype_interface(
574579
"""Generate preamble comments at start of file with args and doc strings"""
575580
input_helps = {}
576581
file_inputs = []
582+
dir_inputs = []
577583
genfile_outputs = []
578584
multi_inputs = []
579585
if nipype_interface.input_spec:
@@ -589,16 +595,25 @@ def parse_nipype_interface(
589595
genfile_outputs.append(inpt_name)
590596
elif type(inpt.trait_type).__name__ == "File":
591597
file_inputs.append(inpt_name)
598+
elif type(inpt.trait_type).__name__ == "Directory":
599+
dir_inputs.append(inpt_name)
592600
elif type(inpt.trait_type).__name__ == "InputMultiObject":
593-
file_inputs.append(inpt_name)
601+
if inpt.trait_type.item_trait and inpt.trait_type.item_trait.trait_type._is_dir:
602+
dir_inputs.append(inpt_name)
603+
else:
604+
file_inputs.append(inpt_name)
594605
multi_inputs.append(inpt_name)
595606
elif (
596607
type(inpt.trait_type).__name__ == "List"
597-
and type(inpt.trait_type.inner_traits()[0].handler).__name__ == "File"
608+
and type(inpt.trait_type.inner_traits()[0].handler).__name__ in ("File", "Directory")
598609
):
599-
file_inputs.append(inpt_name)
610+
if type(inpt.trait_type.inner_traits()[0].handler).__name__ == "File":
611+
file_inputs.append(inpt_name)
612+
else:
613+
dir_inputs.append(inpt_name)
600614
multi_inputs.append(inpt_name)
601615
file_outputs = []
616+
dir_outputs = []
602617
output_helps = {}
603618
if nipype_interface.output_spec:
604619
for outpt_name, outpt in nipype_interface.output_spec().traits().items():
@@ -610,6 +625,8 @@ def parse_nipype_interface(
610625
] = f"type={type(outpt.trait_type).__name__.lower()}: {outpt_desc}"
611626
if type(outpt.trait_type).__name__ == "File":
612627
file_outputs.append(outpt_name)
628+
elif type(outpt.trait_type).__name__ == "Directory":
629+
dir_outputs.append(outpt_name)
613630
doc_string = nipype_interface.__doc__ if nipype_interface.__doc__ else ""
614631
doc_string = doc_string.replace("\n", "\n# ")
615632
# Create a preamble at the top of the specificaiton explaining what to do
@@ -631,6 +648,8 @@ def parse_nipype_interface(
631648
file_outputs,
632649
genfile_outputs,
633650
multi_inputs,
651+
dir_inputs,
652+
dir_outputs,
634653
)
635654

636655

scripts/pkg_gen/fsl-only.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
packages:
2+
- fsl
3+
interfaces:
4+
fsl:
5+
- AccuracyTester
6+

0 commit comments

Comments
 (0)