Skip to content

Commit 4ca1f4f

Browse files
authored
Merge pull request #58 from nipype/latest-auto-conv
updated syntax of specs to match latest nipype2pydra version
2 parents 6baadcc + 557b4f6 commit 4ca1f4f

File tree

212 files changed

+11
-81
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+11
-81
lines changed

nipype-auto-conv/generate

Lines changed: 3 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,3 @@
1-
#!/usr/bin/env python3
2-
import sys
3-
import os.path
4-
from warnings import warn
5-
from pathlib import Path
6-
import shutil
7-
from importlib import import_module
8-
import yaml
9-
from tqdm import tqdm
10-
import nipype
11-
import nipype2pydra.utils
12-
from nipype2pydra.task import get_converter
13-
14-
15-
SPECS_DIR = Path(__file__).parent / "specs"
16-
PKG_ROOT = Path(__file__).parent.parent
17-
PKG_NAME = "fsl"
18-
19-
if ".dev" in nipype.__version__:
20-
raise RuntimeError(
21-
f"Cannot use a development version of Nipype {nipype.__version__}"
22-
)
23-
24-
if ".dev" in nipype2pydra.__version__:
25-
warn(
26-
f"using development version of nipype2pydra ({nipype2pydra.__version__}), "
27-
f"development component will be dropped in {PKG_NAME} package version"
28-
)
29-
30-
# Insert specs dir into path so we can load callables modules
31-
sys.path.insert(0, str(SPECS_DIR))
32-
33-
auto_init = f"# Auto-generated by {__file__}, do not edit as it will be overwritten\n\n"
34-
35-
auto_dir = PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto"
36-
if auto_dir.exists():
37-
shutil.rmtree(auto_dir)
38-
39-
all_interfaces = []
40-
for fspath in tqdm(
41-
sorted(SPECS_DIR.glob("**/*.yaml")), "converting interfaces from Nipype to Pydra"
42-
):
43-
with open(fspath) as f:
44-
spec = yaml.load(f, Loader=yaml.SafeLoader)
45-
46-
rel_pkg_path = str(fspath.parent.relative_to(SPECS_DIR)).replace(os.path.sep, ".")
47-
if rel_pkg_path == ".":
48-
rel_pkg_path = fspath.stem
49-
else:
50-
rel_pkg_path += "." + fspath.stem
51-
52-
callables = import_module(rel_pkg_path + "_callables")
53-
54-
module_name = nipype2pydra.utils.to_snake_case(spec["task_name"])
55-
56-
converter = get_converter(
57-
output_module=f"pydra.tasks.{PKG_NAME}.auto.{module_name}",
58-
callables_module=callables, # type: ignore
59-
**spec,
60-
)
61-
converter.generate(PKG_ROOT)
62-
auto_init += f"from .{module_name} import {converter.task_name}\n"
63-
all_interfaces.append(converter.task_name)
64-
65-
66-
with open(PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto" / "_version.py", "w") as f:
67-
f.write(
68-
f"""# Auto-generated by {__file__}, do not edit as it will be overwritten
69-
70-
nipype_version = "{nipype.__version__.split('.dev')[0]}"
71-
nipype2pydra_version = "{nipype2pydra.__version__.split('.dev')[0]}"
72-
post_release = (nipype_version + nipype2pydra_version).replace(".", "")
73-
"""
74-
)
75-
76-
auto_init += (
77-
"\n\n__all__ = [\n" + "\n".join(f' "{i}",' for i in all_interfaces) + "\n]\n"
78-
)
79-
80-
with open(PKG_ROOT / "pydra" / "tasks" / PKG_NAME / "auto" / "__init__.py", "w") as f:
81-
f.write(auto_init)
1+
#!/usr/bin/env bash
2+
conv_dir=$(dirname $0)
3+
nipype2pydra convert $conv_dir/specs $conv_dir/..

nipype-auto-conv/specs/package.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# name of the package to generate, e.g. pydra.tasks.mriqc
2+
name: pydra.tasks.fsl
3+
# name of the nipype package to generate from (e.g. mriqc)
4+
nipype_name: nipype.interfaces.fsl
5+
# The name of the global struct/dict that contains workflow inputs that are to be converted to inputs of the function along with the type of the struct, either "dict" or "class"
6+
config_params: null
7+
# Mappings between nipype packages and their pydra equivalents. Regular expressions are supported
8+
import_translations: null

0 commit comments

Comments
 (0)