Merge pull request #334 from yozachar/workshop · python-validators/validators@2fb85bb

@@ -57,42 +57,25 @@ def between(

5757

If `value` is not in between the given conditions.

58585959

Raises:

60-

ValueError: If both `min_val` and `max_val` are `None`,

61-

or if `min_val` is greater than `max_val`.

62-

TypeError: If there's a type mismatch before comparison.

60+

(ValueError): If `min_val` is greater than `max_val`.

61+

(TypeError): If there's a type mismatch during comparison.

63626463

Note:

6564

- `PossibleValueTypes` = `TypeVar("PossibleValueTypes", int, float, str, datetime)`

66-

- Either one of `min_val` or `max_val` must be provided.

67-68-

> *New in version 0.2.0*.

65+

- If neither `min_val` nor `max_val` is provided, result will always be `True`.

6966

"""

7067

if value is None:

7168

return False

726973-

if min_val is max_val is None:

74-

raise ValueError("At least one of either `min_val` or `max_val` must be specified")

75-7670

if max_val is None:

7771

max_val = AbsMax()

7872

if min_val is None:

7973

min_val = AbsMin()

807481-

if isinstance(min_val, AbsMin):

82-

if type(value) is type(max_val):

83-

return min_val <= value <= max_val

84-

raise TypeError("`value` and `max_val` must be of same type")

85-86-

if isinstance(max_val, AbsMax):

87-

if type(value) is type(min_val):

88-

return min_val <= value <= max_val

89-

raise TypeError("`value` and `min_val` must be of same type")

90-91-

if type(min_val) is type(max_val):

75+

try:

9276

if min_val > max_val:

93-

raise ValueError("`min_val` cannot be more than `max_val`")

94-

if type(value) is type(min_val): # or is type(max_val)

95-

return min_val <= value <= max_val

96-

raise TypeError("`value` and (`min_val` or `max_val`) must be of same type")

77+

raise ValueError("`min_val` cannot be greater than `max_val`")

78+

except TypeError as err:

79+

raise TypeError("Comparison type mismatch") from err

978098-

raise TypeError("`value` and `min_val` and `max_val` must be of same type")

81+

return min_val <= value <= max_val