1- from typing import TYPE_CHECKING , Any
1+ from typing import TYPE_CHECKING , Any , Optional
22
33from easydata .parsers .base import BaseData
44from easydata .parsers .price import BaseNum , BasePriceFloat
55from easydata .utils import mix
66
77__all__ = (
8+ "SFloat" ,
9+ "SInt" ,
810 "Float" ,
911 "Int" ,
1012 "FloatText" ,
@@ -60,11 +62,48 @@ def _max_value_config(self):
6062 return self .config .get ("ED_NUMBER_MAX_VALUE" )
6163
6264
65+ class SFloat (BaseData ):
66+ def __init__ (
67+ self ,
68+ * args ,
69+ decimals : Optional [int ] = None ,
70+ ** kwargs ,
71+ ):
72+
73+ self ._decimals = decimals
74+
75+ super ().__init__ (* args , ** kwargs )
76+
77+ def parse_value (
78+ self ,
79+ value : Any ,
80+ data : Any ,
81+ ):
82+
83+ if value is None :
84+ return None
85+
86+ return mix .parse_float (
87+ value = value ,
88+ decimals = self ._decimals ,
89+ )
90+
91+
92+ class SInt (BaseData ):
93+ def parse_value (
94+ self ,
95+ value : Any ,
96+ data : Any ,
97+ ):
98+
99+ return mix .parse_int (value )
100+
101+
63102class Float (DefaultNumConfigMixin , BaseNum ):
64103 def __init__ (
65104 self ,
66105 * args ,
67- parse_bool : bool = False ,
106+ parse_bool : bool = True ,
68107 ** kwargs ,
69108 ):
70109
@@ -81,8 +120,8 @@ def parse_value(
81120 data : Any ,
82121 ):
83122
84- if self . _parse_bool and isinstance (value , bool ):
85- value = float (value )
123+ if isinstance (value , bool ):
124+ return float (value ) if self . _parse_bool else None
86125
87126 return super ().parse_value (value , data )
88127
@@ -93,18 +132,35 @@ def _parse_num_value(self, value: Any):
93132 )
94133
95134
96- class Int (NumToIntMixin , Float ):
135+ class Int (BaseNum ):
136+ def __init__ (
137+ self ,
138+ * args ,
139+ parse_bool : bool = False ,
140+ ** kwargs ,
141+ ):
142+
143+ self ._parse_bool = parse_bool
144+
145+ super ().__init__ (
146+ * args ,
147+ ** kwargs ,
148+ )
149+
97150 def parse_value (
98151 self ,
99152 value : Any ,
100153 data : Any ,
101154 ):
102155
103- if self . _parse_bool and isinstance (value , bool ):
104- return int (value )
156+ if isinstance (value , bool ):
157+ return int (value ) if self . _parse_bool else None
105158
106159 return super ().parse_value (value , data )
107160
161+ def _parse_num_value (self , value : Any ):
162+ return mix .parse_int (value = value )
163+
108164
109165class FloatText (NumToStrMixin , Float ):
110166 pass
0 commit comments