@@ -36,9 +36,9 @@ def __init__(self, default: Any):
3636 def validate (self , name , new , current ):
3737 raise NotImplementedError ()
3838
39- @property
40- def value_type (self ):
41- return type (self .default )
39+ # @property
40+ # def value_type(self):
41+ # return type(self.default)
4242
4343
4444class RangeValidator (Validator ):
@@ -69,9 +69,9 @@ def validate(self, name, new, current):
6969 log .debug (f'{ name } set to validated: { new } .' )
7070 return new
7171
72- @property
73- def value_type (self ):
74- return float
72+ # @property
73+ # def value_type(self):
74+ # return float
7575
7676
7777class ListValidator (Validator ):
@@ -80,28 +80,52 @@ def __init__(
8080 allowed_values ,
8181 default = None ,
8282 ):
83- self .allowed_values = allowed_values () if callable (allowed_values ) else allowed_values
84- if default is None :
85- default = self .allowed_values [0 ] if self .allowed_values else None
83+ self ._allowed_values = allowed_values
84+ self ._default = default
8685 super ().__init__ (default )
8786
87+ @property
88+ def allowed_values (self ):
89+ return self ._allowed_values () if callable (self ._allowed_values ) else self ._allowed_values
90+
91+ @allowed_values .setter
92+ def allowed_values (self , value ):
93+ self ._allowed_values = value
94+
95+ @property
96+ def default (self ):
97+ return self ._default () if callable (self ._default ) else self ._default
98+
99+ @default .setter
100+ def default (self , value ):
101+ self ._default = value
102+
88103 def validate (self , name , new , current ):
104+ allowed = self .allowed_values
89105 if current is None and new is None :
106+ # log.debug(f"{name} set to default: '{self.default}'.")
107+ # return self.default
90108 log .debug (f"{ name } set to default: '{ self .default } '." )
91- return self .default
92- if new not in self .allowed_values :
93- new = f"'{ new } '" if isinstance (new , str ) else new
94- message = f'{ new } is not allowed for { name } .'
95- log .warning (message , exc_type = UserWarning )
96- return current if current is not None else self .default
109+ return self .default or (allowed [0 ] if allowed else None )
110+ if new not in allowed :
111+ # new = f"'{new}'" if isinstance(new, str) else new
112+ # message = f'{new} is not allowed for {name}.'
113+ # log.warning(message, exc_type=UserWarning)
114+ # return current if current is not None else self.default
115+ log .warning (f'{ new !r} is not allowed for { name } .' , exc_type = UserWarning )
116+ return (
117+ current
118+ if current is not None
119+ else (self .default or (allowed [0 ] if allowed else None ))
120+ )
97121 log .debug (f"{ name } set to validated: '{ new } '." )
98122 return new
99123
100- @property
101- def value_type (self ):
102- if self .allowed_values :
103- return type (self .allowed_values [0 ])
104- return str
124+ # @property
125+ # def value_type(self):
126+ # if self.allowed_values:
127+ # return type(self.allowed_values[0])
128+ # return str
105129
106130
107131class RegexValidator (Validator ):
0 commit comments