Source code for statham.schema.validation.numeric
from typing import Any
from statham.schema.exceptions import ValidationError
from statham.schema.validation.base import Validator
[docs]class Minimum(Validator):
"""Validate that numeric values conform to a minimum."""
types = (int, float)
keywords = ("minimum",)
message = "Must be greater than or equal to {minimum}."
def _validate(self, value: Any):
if value < self.params["minimum"]:
raise ValidationError
[docs]class Maximum(Validator):
"""Validate that numeric values conform to a maximum."""
types = (int, float)
keywords = ("maximum",)
message = "Must be less than or equal to {maximum}."
def _validate(self, value: Any):
if value > self.params["maximum"]:
raise ValidationError
[docs]class ExclusiveMinimum(Validator):
"""Validate that numeric values conform to an exclusive minimum."""
types = (int, float)
keywords = ("exclusiveMinimum",)
message = "Must be strictly greater than {exclusiveMinimum}."
def _validate(self, value: Any):
if value <= self.params["exclusiveMinimum"]:
raise ValidationError
[docs]class ExclusiveMaximum(Validator):
"""Validate that numeric values conform to an exclusive maximum."""
types = (int, float)
keywords = ("exclusiveMaximum",)
message = "Must be strictly less than {exclusiveMaximum}."
def _validate(self, value: Any):
if value >= self.params["exclusiveMaximum"]:
raise ValidationError
[docs]class MultipleOf(Validator):
"""Validate that numeric values are a multiple of a given number."""
types = (int, float)
keywords = ("multipleOf",)
message = "Must be a multiple of {multipleOf}."
def _validate(self, value: Any):
multiple_of = self.params["multipleOf"]
if isinstance(multiple_of, float):
quotient = value / multiple_of
if int(quotient) != quotient:
raise ValidationError
return
if value % multiple_of:
raise ValidationError