@@ -167,7 +167,7 @@ def to_netjson_loop(self, block, result, index):
167167
168168 def __netjson_rule (self , rule ):
169169 if "enabled" in rule :
170- rule ["enabled" ] = rule . pop ( "enabled" ) == "1"
170+ rule ["enabled" ] = self . __netjson_generic_boolean ( rule [ "enabled" ])
171171
172172 if "proto" in rule :
173173 rule ["proto" ] = self .__netjson_generic_proto (rule ["proto" ])
@@ -182,11 +182,9 @@ def __netjson_zone(self, zone):
182182 if not isinstance (network , list ):
183183 zone ["network" ] = network .split ()
184184
185- if "mtu_fix" in zone :
186- zone ["mtu_fix" ] = zone .pop ("mtu_fix" ) == "1"
187-
188- if "masq" in zone :
189- zone ["masq" ] = zone .pop ("masq" ) == "1"
185+ for param in ["mtu_fix" , "masq" ]:
186+ if param in zone :
187+ zone [param ] = self .__netjson_generic_boolean (zone [param ])
190188
191189 return self .type_cast (zone )
192190
@@ -207,20 +205,22 @@ def __netjson_redirect(self, redirect):
207205 redirect ["monthdays" ]
208206 )
209207
210- if "utc_time" in redirect :
211- redirect ["utc_time" ] = redirect ["utc_time" ] == "1"
212-
213- if "reflection" in redirect :
214- redirect ["reflection" ] = redirect ["reflection" ] == "1"
208+ for param in ["utc_time" , "reflection" , "enabled" ]:
209+ if param in redirect :
210+ redirect [param ] = self .__netjson_generic_boolean (redirect [param ])
215211
216212 if "limit_burst" in redirect :
217213 redirect ["limit_burst" ] = int (redirect ["limit_burst" ])
218214
219- if "enabled" in redirect :
220- redirect ["enabled" ] = redirect ["enabled" ] == "1"
221-
222215 return self .type_cast (redirect )
223216
217+ def __netjson_generic_boolean (self , boolean ):
218+ # Per convention, boolean options may have one of the values '0', 'no', 'off',
219+ # 'false' or 'disabled' to specify a false value or '1' , 'yes', 'on', 'true' or
220+ # 'enabled' to specify a true value.
221+ # https://openwrt.org/docs/guide-user/base-system/uci
222+ return boolean in ["1" , "yes" , "on" , "true" , "enabled" ]
223+
224224 def __netjson_generic_proto (self , proto ):
225225 if isinstance (proto , list ):
226226 return proto .copy ()
0 commit comments