diff --git a/flask_restful/inputs.py b/flask_restful/inputs.py index 230a2e4e..c9dac103 100644 --- a/flask_restful/inputs.py +++ b/flask_restful/inputs.py @@ -215,15 +215,21 @@ def positive(value, argument='argument'): return value -def int_range(low, high, value, argument='argument'): +class int_range(object): """ Restrict input to an integer in a range (inclusive) """ - value = _get_integer(value) - if value < low or value > high: - error = ('Invalid {arg}: {val}. {arg} must be within the range {lo} - {hi}' - .format(arg=argument, val=value, lo=low, hi=high)) - raise ValueError(error) + def __init__(self, low, high, argument='argument'): + self.low = low + self.high = high + self.argument = argument - return value + def __call__(self, value): + value = _get_integer(value) + if value < self.low or value > self.high: + error = ('Invalid {arg}: {val}. {arg} must be within the range {lo} - {hi}' + .format(arg=self.argument, val=value, lo=self.low, hi=self.high)) + raise ValueError(error) + + return value def boolean(value): diff --git a/tests/test_inputs.py b/tests/test_inputs.py index eb8b5d8e..dfd34e80 100644 --- a/tests/test_inputs.py +++ b/tests/test_inputs.py @@ -199,16 +199,20 @@ def test_positive_negative_input(self): assert_raises(ValueError, lambda: inputs.positive(-1)) def test_int_range_good(self): - assert_equal(3, inputs.int_range(1, 5, 3, 'my_arg')) + int_range = inputs.int_range(1, 5) + assert_equal(3, int_range(3)) def test_int_range_inclusive(self): - assert_equal(5, inputs.int_range(1, 5, 5, 'my_arg')) + int_range = inputs.int_range(1, 5) + assert_equal(5, int_range(5)) def test_int_range_low(self): - assert_raises(ValueError, lambda: inputs.int_range(0, 5, -1, 'my_arg')) + int_range = inputs.int_range(0, 5) + assert_raises(ValueError, lambda: int_range(-1)) def test_int_range_high(self): - assert_raises(ValueError, lambda: inputs.int_range(0, 5, 6, 'my_arg')) + int_range = inputs.int_range(0, 5) + assert_raises(ValueError, lambda: int_range(6)) def test_isointerval():