mirror of https://github.com/tiangolo/fastapi.git
parent
a5cfee434d
commit
577c5a84db
|
|
@ -9,8 +9,8 @@ from uuid import UUID
|
|||
from fastapi import params
|
||||
from fastapi.dependencies.models import Dependant, SecurityRequirement
|
||||
from fastapi.security.base import SecurityBase
|
||||
from fastapi.utils import get_path_param_names
|
||||
from pydantic import BaseConfig, Schema, create_model
|
||||
from fastapi.utils import UnconstrainedConfig, get_path_param_names
|
||||
from pydantic import Schema, create_model
|
||||
from pydantic.error_wrappers import ErrorWrapper
|
||||
from pydantic.errors import MissingError
|
||||
from pydantic.fields import Field, Required, Shape
|
||||
|
|
@ -163,7 +163,7 @@ def add_param_to_fields(
|
|||
default=None if required else default_value,
|
||||
alias=alias,
|
||||
required=required,
|
||||
model_config=BaseConfig(),
|
||||
model_config=UnconstrainedConfig,
|
||||
class_validators=[],
|
||||
schema=schema,
|
||||
)
|
||||
|
|
@ -197,7 +197,7 @@ def add_param_to_body_fields(*, param: inspect.Parameter, dependant: Dependant)
|
|||
default=None if required else default_value,
|
||||
alias=schema.alias or param.name,
|
||||
required=required,
|
||||
model_config=BaseConfig,
|
||||
model_config=UnconstrainedConfig,
|
||||
class_validators=[],
|
||||
schema=schema,
|
||||
)
|
||||
|
|
@ -281,7 +281,7 @@ def request_params_to_args(
|
|||
ErrorWrapper(
|
||||
MissingError(),
|
||||
loc=(schema.in_.value, field.alias),
|
||||
config=BaseConfig,
|
||||
config=UnconstrainedConfig,
|
||||
)
|
||||
)
|
||||
else:
|
||||
|
|
@ -315,7 +315,9 @@ async def request_body_to_args(
|
|||
if field.required:
|
||||
errors.append(
|
||||
ErrorWrapper(
|
||||
MissingError(), loc=("body", field.alias), config=BaseConfig
|
||||
MissingError(),
|
||||
loc=("body", field.alias),
|
||||
config=UnconstrainedConfig,
|
||||
)
|
||||
)
|
||||
else:
|
||||
|
|
@ -356,7 +358,7 @@ def get_body_field(*, dependant: Dependant, name: str) -> Field:
|
|||
type_=BodyModel,
|
||||
default=None,
|
||||
required=required,
|
||||
model_config=BaseConfig,
|
||||
model_config=UnconstrainedConfig,
|
||||
class_validators=[],
|
||||
alias="body",
|
||||
schema=BodySchema(None),
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ from fastapi import params
|
|||
from fastapi.dependencies.models import Dependant
|
||||
from fastapi.dependencies.utils import get_body_field, get_dependant, solve_dependencies
|
||||
from fastapi.encoders import jsonable_encoder
|
||||
from pydantic import BaseConfig, BaseModel, Schema
|
||||
from fastapi.utils import UnconstrainedConfig
|
||||
from pydantic import BaseModel, Schema
|
||||
from pydantic.error_wrappers import ErrorWrapper, ValidationError
|
||||
from pydantic.fields import Field
|
||||
from pydantic.utils import lenient_issubclass
|
||||
|
|
@ -130,7 +131,7 @@ class APIRoute(routing.Route):
|
|||
class_validators=[],
|
||||
default=None,
|
||||
required=False,
|
||||
model_config=BaseConfig(),
|
||||
model_config=UnconstrainedConfig,
|
||||
schema=Schema(None),
|
||||
)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -3,12 +3,17 @@ from typing import Any, Dict, List, Sequence, Set, Type
|
|||
|
||||
from fastapi import routing
|
||||
from fastapi.openapi.constants import REF_PREFIX
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseConfig, BaseModel
|
||||
from pydantic.fields import Field
|
||||
from pydantic.schema import get_flat_models_from_fields, model_process_schema
|
||||
from starlette.routing import BaseRoute
|
||||
|
||||
|
||||
class UnconstrainedConfig(BaseConfig):
|
||||
min_anystr_length = None
|
||||
max_anystr_length = None
|
||||
|
||||
|
||||
def get_flat_models_from_routes(
|
||||
routes: Sequence[Type[BaseRoute]]
|
||||
) -> Set[Type[BaseModel]]:
|
||||
|
|
|
|||
|
|
@ -119,3 +119,15 @@ def test_post_file(tmpdir):
|
|||
response = client.post("/files/", files={"file": open(path, "rb")})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"file_size": 14}
|
||||
|
||||
|
||||
def test_post_large_file(tmpdir):
|
||||
default_pydantic_max_size = 2 ** 16
|
||||
path = os.path.join(tmpdir, "test.txt")
|
||||
with open(path, "wb") as file:
|
||||
file.write(b"x" * (default_pydantic_max_size + 1))
|
||||
|
||||
client = TestClient(app)
|
||||
response = client.post("/files/", files={"file": open(path, "rb")})
|
||||
assert response.status_code == 200
|
||||
assert response.json() == {"file_size": default_pydantic_max_size + 1}
|
||||
|
|
|
|||
Loading…
Reference in New Issue