2525
2626class Option (BaseNode ):
2727
28- def __init__ (self , name , description , default = None , dependencies = None , validate = None ,
28+ def __init__ (self , name , description , default = None ,
29+ dependencies = None , validate = None , transform = None ,
2930 convert_input = None , convert_output = None ):
3031 BaseNode .__init__ (self , name , BaseNode .Type .OPTION )
3132 self ._dependency_handler = dependencies
@@ -36,6 +37,7 @@ def __init__(self, name, description, default=None, dependencies=None, validate=
3637 self ._output = None
3738 self ._default = None
3839 self ._validate = validate
40+ self ._transform = transform
3941 self ._filename = os .path .join (os .getcwd (), "dummy" )
4042 self ._set_default (default )
4143
@@ -93,9 +95,10 @@ def format_values(self):
9395
9496class StringOption (Option ):
9597
96- def __init__ (self , name , description , default = None , dependencies = None , validate = None ):
97- Option .__init__ (self , name , description , None , dependencies , validate ,
98- convert_input = self ._validate_string )
98+ def __init__ (self , name , description , default = None , dependencies = None , validate = None , transform = None ):
99+ Option .__init__ (self , name , description , None , dependencies , validate , transform ,
100+ convert_input = self ._validate_string ,
101+ convert_output = self ._transform_string )
99102 self ._set_default (default )
100103
101104 def _validate_string (self , value ):
@@ -104,6 +107,12 @@ def _validate_string(self, value):
104107 self ._validate (value )
105108 return value
106109
110+ def _transform_string (self , value ):
111+ value = str (value )
112+ if self ._transform is not None :
113+ value = self ._transform (value )
114+ return value
115+
107116
108117class PathOption (Option ):
109118
@@ -163,29 +172,36 @@ def format_values(self):
163172
164173class BooleanOption (Option ):
165174
166- def __init__ (self , name , description , default = False , dependencies = None ):
167- Option .__init__ (self , name , description , default , dependencies ,
168- convert_input = self .as_boolean ,
169- convert_output = self .as_boolean )
175+ def __init__ (self , name , description , default = False , dependencies = None , transform = None ):
176+ self ._transform = transform
177+ Option .__init__ (self , name , description , default , dependencies , transform = transform ,
178+ convert_input = self .input_boolean ,
179+ convert_output = self .output_boolean )
170180
171181 @property
172182 def values (self ):
173- return ["True " , "False " ]
183+ return ["yes " , "no " ]
174184
175185 def format_values (self ):
176- if self ._default :
177- return _cw ("True " ).wrap ("underlined" ) + _cw (", False " )
178- return _cw ("True , " ) + _cw ("False " ).wrap ("underlined" )
186+ if self .output_boolean ( self . _default ) :
187+ return _cw ("yes " ).wrap ("underlined" ) + _cw (", no " )
188+ return _cw ("yes , " ) + _cw ("no " ).wrap ("underlined" )
179189
180- @staticmethod
181- def as_boolean (value ):
190+ def input_boolean (self , value ):
191+ if isinstance (value , bool ):
192+ value = "yes" if value else "no"
193+ return str (value ).lower ()
194+
195+ def output_boolean (self , value ):
182196 if value is None :
183197 return value
198+ if self ._transform is not None :
199+ value = self ._transform (value )
184200 if isinstance (value , bool ):
185201 return value
186- if str (value ).lower () in ['true' , 'yes' , '1' ]:
202+ if str (value ).strip (). lower () in ['true' , 'yes' , '1' , 'enable' , 'enabled ' ]:
187203 return True
188- if str (value ).lower () in ['false' , 'no' , '0' ]:
204+ if str (value ).strip (). lower () in ['false' , 'no' , '0' , 'disable' , 'disabled ' ]:
189205 return False
190206
191207 raise TypeError ("Input must be boolean!" )
@@ -196,7 +212,6 @@ class NumericOption(Option):
196212 def __init__ (self , name , description , minimum = None , maximum = None ,
197213 default = None , dependencies = None , validate = None ):
198214 Option .__init__ (self , name , description , default , dependencies , validate ,
199- convert_input = str ,
200215 convert_output = self .as_numeric_value )
201216 self .minimum_input = str (minimum )
202217 self .maximum_input = str (maximum )
@@ -263,8 +278,7 @@ def format_values(self):
263278
264279 return default
265280
266- @staticmethod
267- def as_numeric_value (value ):
281+ def as_numeric_value (self , value ):
268282 if value is None :
269283 return value
270284 if isinstance (value , (int , float )):
0 commit comments