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
default=None if required else default_value,
alias=alias,
required=required,
- model_config=BaseConfig(),
+ model_config=UnconstrainedConfig,
class_validators=[],
schema=schema,
)
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,
)
ErrorWrapper(
MissingError(),
loc=(schema.in_.value, field.alias),
- config=BaseConfig,
+ config=UnconstrainedConfig,
)
)
else:
if field.required:
errors.append(
ErrorWrapper(
- MissingError(), loc=("body", field.alias), config=BaseConfig
+ MissingError(),
+ loc=("body", field.alias),
+ config=UnconstrainedConfig,
)
)
else:
type_=BodyModel,
default=None,
required=required,
- model_config=BaseConfig,
+ model_config=UnconstrainedConfig,
class_validators=[],
alias="body",
schema=BodySchema(None),
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
class_validators=[],
default=None,
required=False,
- model_config=BaseConfig(),
+ model_config=UnconstrainedConfig,
schema=Schema(None),
)
else:
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]]:
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}