@@ -321,27 +321,6 @@ def nullable(self):
321321 return False
322322
323323
324- class Float (ConfigurationField ):
325- """Floating point field"""
326-
327- __slots__ = ()
328-
329- _holds : float
330-
331- def __get__ (self , instance , owner ) -> float :
332- return super ().__get__ (instance , owner )
333-
334- def __set__ (self , instance , value : float ):
335- super ().__set__ (instance , value )
336-
337- def _validate_value (self , value : Any , name : str | None = None , / ):
338- super ()._validate_value (value )
339- if not isinstance (value , (float , int )):
340- raise ValueError (
341- f"Field: { name or self ._name } \n Value was not a valid number: { repr (value )} "
342- )
343-
344-
345324class List [T ](ConfigurationField ):
346325 """List field"""
347326
@@ -583,6 +562,27 @@ def _validate_value(self, value: Any, name: str | None = None, /):
583562 self .inner_type ._validate_value (item , f"{ name or self ._name } [{ c } ]" )
584563
585564
565+ class Boolean (ConfigurationField ):
566+ """Boolean (true/false) field"""
567+
568+ __slots__ = ()
569+
570+ _holds : bool
571+
572+ def __get__ (self , instance , owner ) -> bool :
573+ return super ().__get__ (instance , owner )
574+
575+ def __set__ (self , instance , value : bool ):
576+ super ().__set__ (instance , value )
577+
578+ def _validate_value (self , value : Any , name : str | None = None , / ):
579+ super ()._validate_value (value )
580+ if not isinstance (value , bool ):
581+ raise ValueError (
582+ f"Field: { name or self ._name } \n Value was not a valid boolean: { repr (value )} "
583+ )
584+
585+
586586class Float (ConfigurationField ):
587587 """Floating point field"""
588588
@@ -840,6 +840,7 @@ def _validate_value(self, value: Any, name: str | None = None, /):
840840 "NoDefaultValue" ,
841841 "_NoDefaultValueT" ,
842842 "Section" ,
843+ "Boolean" ,
843844 "Float" ,
844845 "Integer" ,
845846 "Number" ,
0 commit comments