2525
2626class Option (BaseNode ):
2727
28- def __init__ (self , name , description , default = None , dependencies = None ,
28+ def __init__ (self , name , description , default = None , dependencies = None , validate = None ,
2929 convert_input = None , convert_output = None ):
3030 BaseNode .__init__ (self , name , BaseNode .Type .OPTION )
3131 self ._dependency_handler = dependencies
@@ -35,6 +35,7 @@ def __init__(self, name, description, default=None, dependencies=None,
3535 self ._input = None
3636 self ._output = None
3737 self ._default = None
38+ self ._validate = validate
3839 self ._filename = os .path .join (os .getcwd (), "dummy" )
3940 self ._set_default (default )
4041
@@ -93,24 +94,24 @@ def format_values(self):
9394class StringOption (Option ):
9495
9596 def __init__ (self , name , description , default = None , dependencies = None , validate = None ):
96- Option .__init__ (self , name , description , None , dependencies ,
97+ Option .__init__ (self , name , description , None , dependencies , validate ,
9798 convert_input = self ._validate_string )
98- self ._validate = validate
9999 self ._set_default (default )
100100
101101 def _validate_string (self , value ):
102102 value = str (value )
103- if self ._validate :
103+ if self ._validate is not None :
104104 self ._validate (value )
105105 return value
106106
107107
108108class PathOption (Option ):
109109
110- def __init__ (self , name , description , default = None , dependencies = None , empty_ok = False , absolute = False ):
110+ def __init__ (self , name , description , default = None , empty_ok = False ,
111+ absolute = False , dependencies = None , validate = None ):
111112 self ._empty_ok = empty_ok
112113 self ._absolute = absolute
113- Option .__init__ (self , name , description , default , dependencies ,
114+ Option .__init__ (self , name , description , default , dependencies , validate ,
114115 convert_input = self ._validate_path ,
115116 convert_output = self ._relocate_path )
116117
@@ -132,6 +133,8 @@ def _validate_path(self, path):
132133 # Relocate path to be relative to the user's perspective
133134 if self ._relocate (path ):
134135 path = os .path .relpath (self ._relocate_path (path ))
136+ if self ._validate is not None :
137+ self ._validate (path )
135138 return path
136139
137140 @staticmethod
@@ -191,8 +194,8 @@ def as_boolean(value):
191194class NumericOption (Option ):
192195
193196 def __init__ (self , name , description , minimum = None , maximum = None ,
194- default = None , dependencies = None ):
195- Option .__init__ (self , name , description , default , dependencies ,
197+ default = None , dependencies = None , validate = None ):
198+ Option .__init__ (self , name , description , default , dependencies , validate ,
196199 convert_input = str ,
197200 convert_output = self .as_numeric_value )
198201 self .minimum_input = str (minimum )
@@ -227,6 +230,8 @@ def value(self, value):
227230 raise ValueError ("Input must be greater or equal to '{}'" .format (self .minimum ))
228231 if self .maximum is not None and numeric_value > self .maximum :
229232 raise ValueError ("Input must be smaller or equal to '{}'" .format (self .maximum ))
233+ if self ._validate is not None :
234+ self ._validate (numeric_value )
230235 except (TypeError , ValueError ) as error :
231236 raise le .LbuildOptionInputException (self , value , error )
232237 self ._set_value (value )
0 commit comments