1818 absolute_import )
1919from builtins import object
2020
21- from future import standard_library
22- standard_library .install_aliases ()
23-
2421from copy import deepcopy
2522import re
2623import numpy as np
27- from ... import logging
24+ from future import standard_library
25+
2826from ...interfaces .base import DynamicTraitedSpec
2927from ...utils .filemanip import loadpkl , savepkl
3028
31- logger = logging . getLogger ( 'workflow' )
29+ standard_library . install_aliases ( )
3230
3331
3432class EngineBase (object ):
@@ -47,35 +45,37 @@ def __init__(self, name=None, base_dir=None):
4745 default=None, which results in the use of mkdtemp
4846
4947 """
48+ self ._hierarchy = None
49+ self ._name = None
50+
5051 self .base_dir = base_dir
5152 self .config = None
52- self ._verify_name (name )
5353 self .name = name
54- # for compatibility with node expansion using iterables
55- self ._id = self .name
56- self ._hierarchy = None
5754
5855 @property
59- def inputs (self ):
60- raise NotImplementedError
56+ def name (self ):
57+ return self . _name
6158
62- @property
63- def outputs (self ):
64- raise NotImplementedError
59+ @name .setter
60+ def name (self , name ):
61+ if name and bool (re .match (r'^[\w_]+$' , name )):
62+ self ._name = name
63+ else :
64+ raise ValueError ('[Workflow|Node] name "%s" is not valid.' % name )
6565
6666 @property
6767 def fullname (self ):
68- fullname = self .name
6968 if self ._hierarchy :
70- fullname = self . _hierarchy + '.' + self .name
71- return fullname
69+ return '%s.%s' % ( self ._hierarchy , self . name )
70+ return self . name
7271
7372 @property
74- def itername (self ):
75- itername = self ._id
76- if self ._hierarchy :
77- itername = self ._hierarchy + '.' + self ._id
78- return itername
73+ def inputs (self ):
74+ raise NotImplementedError
75+
76+ @property
77+ def outputs (self ):
78+ raise NotImplementedError
7979
8080 def clone (self , name ):
8181 """Clone an EngineBase object
@@ -86,13 +86,10 @@ def clone(self, name):
8686 name : string (mandatory)
8787 A clone of node or workflow must have a new name
8888 """
89- if (name is None ) or (name == self .name ):
90- raise Exception ('Cloning requires a new name' )
91- self ._verify_name (name )
89+ if name == self .name :
90+ raise ValueError ('Cloning requires a new name, "%s" is in use.' % name )
9291 clone = deepcopy (self )
9392 clone .name = name
94- clone ._id = name
95- clone ._hierarchy = None
9693 return clone
9794
9895 def _check_outputs (self , parameter ):
@@ -103,17 +100,8 @@ def _check_inputs(self, parameter):
103100 return True
104101 return hasattr (self .inputs , parameter )
105102
106- def _verify_name (self , name ):
107- valid_name = bool (re .match ('^[\w-]+$' , name ))
108- if not valid_name :
109- raise ValueError ('[Workflow|Node] name \' %s\' contains'
110- ' special characters' % name )
111-
112- def __repr__ (self ):
113- if self ._hierarchy :
114- return '.' .join ((self ._hierarchy , self ._id ))
115- else :
116- return '{}' .format (self ._id )
103+ def __str__ (self ):
104+ return self .fullname
117105
118106 def save (self , filename = None ):
119107 if filename is None :
0 commit comments