custom validators in schema (#375)

* Test NoneType directly in Field.include_in_schema and add test for validator

fix #363

* Update History
This commit is contained in:
Sebastián Ramírez
2019-01-30 14:31:45 +04:00
committed by Samuel Colvin
parent 987449a922
commit 725e86a8f0
3 changed files with 19 additions and 3 deletions
+1
View File
@@ -6,6 +6,7 @@ History
v0.19.0 (unreleased)
....................
* Support ``Callable`` type hint, fix #279 by @proofit404
* Fix schema for fields with ``validator`` decorator, fix #375 by @tiangolo
v0.18.2 (2019-01-22)
....................
+2 -2
View File
@@ -7,7 +7,7 @@ from .class_validators import Validator, ValidatorSignature, get_validator_signa
from .error_wrappers import ErrorWrapper
from .types import Json, JsonWrapper
from .utils import Callable, ForwardRef, display_as_type, lenient_issubclass, list_like
from .validators import NoneType, dict_validator, find_validators, is_none_validator
from .validators import NoneType, dict_validator, find_validators
Required: Any = Ellipsis
@@ -358,7 +358,7 @@ class Field:
"""
False if this is a simple field just allowing None as used in Unions/Optional.
"""
return len(self.validators) != 1 or self.validators[0][1] != is_none_validator
return self.type_ != NoneType
def is_complex(self):
"""
+16 -1
View File
@@ -10,7 +10,7 @@ from uuid import UUID
import pytest
from pydantic import BaseModel, Schema, ValidationError
from pydantic import BaseModel, Schema, ValidationError, validator
from pydantic.schema import get_flat_models_from_model, get_flat_models_from_models, get_model_name_map, schema
from pydantic.types import (
DSN,
@@ -1104,3 +1104,18 @@ def test_optional_dict():
assert Model().dict() == {'something': None}
assert Model(something={'foo': 'Bar'}).dict() == {'something': {'foo': 'Bar'}}
def test_field_with_validator():
class Model(BaseModel):
something: Optional[int] = None
@validator('something')
def check_field(cls, v, *, values, config, field):
return v
assert Model.schema() == {
'title': 'Model',
'type': 'object',
'properties': {'something': {'type': 'integer', 'title': 'Something'}},
}