Numeric validators like the IntegerValidator or DecimalValidator currently have the parameters min_value and max_value, which both default to None, meaning there are no limits for the input numbers.
An easy mistake to make is to forget setting min_value when using max_value.
For example, an IntegerValidator(max_value=100) would only allow values smaller or equal to 100. However, this includes all negative numbers as well, so -9999 would be allowed.
I can't think of any usecase where this behaviour would be wanted. If you set max_value=100, you probably also want min_value=0 or maybe even min_value=-100.
To avoid this mistake (I've done it in multiple places, which is why I'm opening this ticket), I'd suggest to either raise a warning when a numeric validator is defined with max_value but without min_value, or even raise an error to forbid it completely.
If you really want a "-Infinity to 100" validator, you would have to set min_value=None explicitly (or rather min_value=IntegerValidator.DEFAULT_MIN_VALUE, since the default limit is not infinity).
This could be considered a breaking change as it technically changes the default behaviour of the min_value parameter. However, in all potentially affected cases, the code probably is wrong in the first place and should be fixed. :)
I'm not 100% sure about whether to raise a warning or an actual error. A warning wouldn't break existing code, so probably we should use a warning for now. (Maybe change it to a real error in version 1.0?)
NOTE: Setting min_value without max_value however should be fine! E.g. IntegerValidator(min_value=0) for only positive numbers makes total sense.
Numeric validators like the
IntegerValidatororDecimalValidatorcurrently have the parametersmin_valueandmax_value, which both default toNone, meaning there are no limits for the input numbers.An easy mistake to make is to forget setting
min_valuewhen usingmax_value.For example, an
IntegerValidator(max_value=100)would only allow values smaller or equal to 100. However, this includes all negative numbers as well, so -9999 would be allowed.I can't think of any usecase where this behaviour would be wanted. If you set
max_value=100, you probably also wantmin_value=0or maybe evenmin_value=-100.To avoid this mistake (I've done it in multiple places, which is why I'm opening this ticket), I'd suggest to either raise a warning when a numeric validator is defined with
max_valuebut withoutmin_value, or even raise an error to forbid it completely.If you really want a "-Infinity to 100" validator, you would have to set
min_value=Noneexplicitly (or rathermin_value=IntegerValidator.DEFAULT_MIN_VALUE, since the default limit is not infinity).This could be considered a breaking change as it technically changes the default behaviour of the
min_valueparameter. However, in all potentially affected cases, the code probably is wrong in the first place and should be fixed. :)I'm not 100% sure about whether to raise a warning or an actual error. A warning wouldn't break existing code, so probably we should use a warning for now. (Maybe change it to a real error in version 1.0?)
NOTE: Setting
min_valuewithoutmax_valuehowever should be fine! E.g.IntegerValidator(min_value=0)for only positive numbers makes total sense.