def test_IntegerValidator_valid(): field = number_field() validator = IntegerValidator(min_value=-10, max_value=10) assert validator(field, 10) == 10 assert validator(field, 0) == 0 assert validator(field, -10) == -10 assert validator(field, "-5") == -5
def test_NumberValidator_valid(): field = number_field() validator = NumberValidator(min_value=-10, max_value=10, precision=2) assert validator(field, 10) == 10 assert validator(field, -10) == -10 assert validator(field, 5.55) == 5.55 assert validator(field, 5.555) == 5.55
class MyClass: str_field: str = field(metadata={ "format": "uuid", "description": "String field" }) int_field: int = number_field(min_value=0, max_value=100, description="Int field")
def test_NumberValidator_invalid(): field = number_field() validator = NumberValidator(min_value=-10, max_value=10, precision=2) with pytest.raises(ValidationError): validator(field, 11) with pytest.raises(ValidationError): validator(field, -11) with pytest.raises(ValidationError): validator(field, "foo") with pytest.raises(ValidationError): validator(field, None) with pytest.raises(ValidationError): validator(field, object())
class MyClass: """Test data""" str_field: str = data_field(required=True, format="uuid", description="String field") int_field: int = data_field(format="uint64", description="Int field") float_field: float = number_field(description="Float field") boolean_field: bool = bool_field(description="Bool field") map_field: Dict[str, int] = data_field(description="Dict field") free_field: Dict[str, str] = data_field(description="Free field") datetime_field: datetime = date_time_field( description="Datetime field") ref_field: OtherClass = field(metadata={ "required": True, "description": "Ref field" }, default=None) list_ref_field: List[OtherClass] = data_field(description="List field")
def test_number_validator_string(): field = number_field() validator = field.metadata.get(VALIDATOR) assert validator(field, "2") == 2
class Foo2: text: str = fields.str_field(min_length=3, description="Just some text") param: Union[str, int] = fields.integer_field( description="String accepted but convert to int") done: bool = fields.bool_field(description="Is Foo done?") value: float = fields.number_field()