mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-09 10:56:10 +00:00
Add validators to models fields (#9668)
* [python-fastapi] Apply constraints to models Signed-off-by: Nikita Vakula <programmistov.programmist@gmail.com> * [python-fastapi] Use pydantic types to validate models fields Some data formats can be validated by annotating fields with some special pydantic data types (EmailStr, forr example). Signed-off-by: Nikita Vakula <programmistov.programmist@gmail.com> * [python-fastapi] Updated samples Signed-off-by: Nikita Vakula <programmistov.programmist@gmail.com>
This commit is contained in:
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
{{#models}}
|
||||
{{#model}}
|
||||
{{#pyImports}}
|
||||
@@ -29,7 +30,44 @@ class {{classname}}(BaseModel):
|
||||
"""
|
||||
|
||||
{{#vars}}
|
||||
{{name}}: {{#required}}{{dataType}}{{/required}}{{^required}}Optional[{{dataType}}] = None{{/required}}
|
||||
{{name}}: {{#required}}{{>model_field_type}}{{/required}}{{^required}}Optional[{{>model_field_type}}] = None{{/required}}
|
||||
{{/vars}}
|
||||
{{#vars}}
|
||||
{{#maximum}}
|
||||
|
||||
@validator("{{name}}")
|
||||
def {{name}}_max(cls, value):
|
||||
assert value <= {{maximum}}
|
||||
return value
|
||||
{{/maximum}}
|
||||
{{#minimum}}
|
||||
|
||||
@validator("{{name}}")
|
||||
def {{name}}_min(cls, value):
|
||||
assert value >= {{minimum}}
|
||||
return value
|
||||
{{/minimum}}
|
||||
{{#minLength}}
|
||||
|
||||
@validator("{{name}}")
|
||||
def {{name}}_min_length(cls, value):
|
||||
assert len(value) >= {{minLength}}
|
||||
return value
|
||||
{{/minLength}}
|
||||
{{#maxLength}}
|
||||
|
||||
@validator("{{name}}")
|
||||
def {{name}}_max_length(cls, value):
|
||||
assert len(value) <= {{maxLength}}
|
||||
return value
|
||||
{{/maxLength}}
|
||||
{{#pattern}}
|
||||
|
||||
@validator("{{name}}")
|
||||
def {{name}}_pattern(cls, value):
|
||||
assert value is not None and re.match(r"{{pattern}}", value)
|
||||
return value
|
||||
{{/pattern}}
|
||||
{{/vars}}
|
||||
{{/model}}
|
||||
{{/models}}
|
||||
|
||||
1
modules/openapi-generator/src/main/resources/python-fastapi/model_field_type.mustache
vendored
Normal file
1
modules/openapi-generator/src/main/resources/python-fastapi/model_field_type.mustache
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{{#isEmail}}EmailStr{{/isEmail}}{{#isUri}}AnyUrl{{/isUri}}{{^isEmail}}{{^isUri}}{{dataType}}{{/isUri}}{{/isEmail}}
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
|
||||
|
||||
class ApiResponse(BaseModel):
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
|
||||
|
||||
class Category(BaseModel):
|
||||
@@ -20,3 +21,8 @@ class Category(BaseModel):
|
||||
|
||||
id: Optional[int] = None
|
||||
name: Optional[str] = None
|
||||
|
||||
@validator("name")
|
||||
def name_pattern(cls, value):
|
||||
assert value is not None and re.match(r"^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$", value)
|
||||
return value
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
|
||||
|
||||
class Order(BaseModel):
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
from openapi_server.models.category import Category
|
||||
from openapi_server.models.tag import Tag
|
||||
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
|
||||
|
||||
class Tag(BaseModel):
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
from datetime import date, datetime # noqa: F401
|
||||
|
||||
import re # noqa: F401
|
||||
from typing import Dict, List, Optional # noqa: F401
|
||||
|
||||
from pydantic import BaseModel, EmailStr, validator # noqa: F401
|
||||
from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user