2
2
from pathlib import Path
3
3
import typing as ty
4
4
from types import ModuleType
5
+ import re
5
6
import inspect
6
7
import black
7
8
import traits
12
13
from pydra .engine .helpers import ensure_list
13
14
from .utils import import_module_from_path
14
15
15
-
16
16
@attrs .define
17
17
class TaskConverter :
18
18
19
19
task_name : str
20
20
nipype_module : ModuleType = attrs .field (converter = import_module_from_path )
21
21
output_requirements : dict = attrs .field (factory = dict )
22
22
inputs_metadata : dict = attrs .field (factory = dict )
23
- inputs_drop : dict = attrs .field (factory = list )
23
+ inputs_drop : dict = attrs .field (factory = dict )
24
24
output_templates : dict = attrs .field (factory = dict )
25
25
output_callables : dict = attrs .field (factory = dict )
26
26
doctest : dict = attrs .field (factory = dict )
@@ -304,8 +304,12 @@ def types_to_names(spec_fields):
304
304
el = list (el )
305
305
try :
306
306
el [1 ] = el [1 ].__name__
307
+ # add 'TYPE_' to the beginning of the name
308
+ el [1 ] = "TYPE_" + el [1 ]
307
309
except (AttributeError ):
308
310
el [1 ] = el [1 ]._name
311
+ # add 'TYPE_' to the beginning of the name
312
+ el [1 ] = "TYPE_" + el [1 ]
309
313
spec_fields_str .append (tuple (el ))
310
314
return spec_fields_str
311
315
@@ -321,16 +325,15 @@ def types_to_names(spec_fields):
321
325
spec_str += f"{ self .task_name } _input_spec = specs.SpecInfo(name='Input', fields=input_fields, bases=(specs.ShellSpec,))\n \n "
322
326
spec_str += f"output_fields = { output_fields_str } \n "
323
327
spec_str += f"{ self .task_name } _output_spec = specs.SpecInfo(name='Output', fields=output_fields, bases=(specs.ShellOutSpec,))\n \n "
324
-
325
328
spec_str += f"class { self .task_name } (ShellCommandTask):\n "
326
329
if self .doctest :
327
330
spec_str += self .create_doctest ()
328
331
spec_str += f" input_spec = { self .task_name } _input_spec\n "
329
332
spec_str += f" output_spec = { self .task_name } _output_spec\n "
330
333
spec_str += f" executable='{ self .nipype_interface ._cmd } '\n "
331
334
332
- # for tp_repl in self.TYPE_REPLACE:
333
- # spec_str = spec_str.replace(*tp_repl)
335
+ for tp_repl in self .TYPE_REPLACE :
336
+ spec_str = spec_str .replace (* tp_repl )
334
337
335
338
spec_str_black = black .format_file_contents (
336
339
spec_str , fast = False , mode = black .FileMode ()
@@ -410,7 +413,6 @@ def write_test_error(self, input_error):
410
413
spec_str += f" task = { self .task_name } (in_file=in_file, **inputs)\n "
411
414
spec_str += " with pytest.raises(eval(error)):\n "
412
415
spec_str += " task.generated_output_names\n "
413
-
414
416
return spec_str
415
417
416
418
def create_doctest (self ):
@@ -454,16 +456,16 @@ def create_doctest(self):
454
456
]
455
457
456
458
TYPE_REPLACE = [
457
- ("'File '" , "specs.File" ),
458
- ("'bool '" , "bool" ),
459
- ("'str '" , "str" ),
460
- ("'Any '" , "ty.Any" ),
461
- ("'int '" , "int" ),
462
- ("'float '" , "float" ),
463
- ("'list '" , "list" ),
464
- ("'dict '" , "dict" ),
465
- ("'MultiInputObj '" , "specs.MultiInputObj" ),
466
- ("'MultiOutputObj '" , "specs.MultiOutputObj" ),
467
- ("'MultiInputFile '" , "specs.MultiInputFile" ),
468
- ("'MultiOutputFile '" , "specs.MultiOutputFile" ),
469
- ]
459
+ ("'TYPE_File '" , "specs.File" ),
460
+ ("'TYPE_bool '" , "bool" ),
461
+ ("'TYPE_str '" , "str" ),
462
+ ("'TYPE_Any '" , "ty.Any" ),
463
+ ("'TYPE_int '" , "int" ),
464
+ ("'TYPE_float '" , "float" ),
465
+ ("'TYPE_list '" , "list" ),
466
+ ("'TYPE_dict '" , "dict" ),
467
+ ("'TYPE_MultiInputObj '" , "specs.MultiInputObj" ),
468
+ ("'TYPE_MultiOutputObj '" , "specs.MultiOutputObj" ),
469
+ ("'TYPE_MultiInputFile '" , "specs.MultiInputFile" ),
470
+ ("'TYPE_MultiOutputFile '" , "specs.MultiOutputFile" ),
471
+ ]
0 commit comments