Skip to content

Upgrading fastapi 0.111 to 0.112

Breaking0.111.1 → 0.112.4Breaking1Security1New1Changed6Fixed3Other120

BreakingUpgrade verdict

1 breaking change and a security fix.

  • Installing fastapi no longer brings Uvicorn and the CLI automatically. You now need to install the standard extra to get them.
  • Updates permissions for the deploy-docs action.
2 items need code or config changes

Drops email-validator, fastapi-cli, httpx, jinja2, python-multipart, uvicorn.

Installs 8 packages in all (was 34).

Breaking1
Moves standard dependencies (Uvicorn, fastapi-cli) out of the default install; they now require the standard extra.
fastapi[standard]fastapi-cli[standard]python -m fastapi
Security1
Updates permissions for the deploy-docs action.

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • changed: method FastAPI.add_api_route(path: str, endpoint: Callable[..., Coroutine[Any, Any, Response]], *, response_model: Any=…, status_code: Optional[int]=…, tags: Optional[List[Union[str, Enum]]]=…, dependencies: Optional[Sequence[Depends]]=…, summary: Optional[str]=…, description: Optional[str]=…, response_description: str=…, responses: Optional[Dict[Union[int, str], Dict[str, Any]]]=…, deprecated: O… → method FastAPI.add_api_route(path: str, endpoint: Callable[..., Any], *, response_model: Any=…, status_code: Optional[int]=…, tags: Optional[List[Union[str, Enum]]]=…, dependencies: Optional[Sequence[Depends]]=…, summary: Optional[str]=…, description: Optional[str]=…, response_description: str=…, responses: Optional[Dict[Union[int, str], Dict[str, Any]]]=…, deprecated: Optional[bool]=…, methods:…
  • added: function main() -> None
  • added: variable cli_main
  • removed: constructor Dependant(*, path_params: Optional[List[ModelField]]=…, query_params: Optional[List[ModelField]]=…, header_params: Optional[List[ModelField]]=…, cookie_params: Optional[List[ModelField]]=…, body_params: Optional[List[ModelField]]=…, dependencies: Optional[List[Dependant]]=…, security_schemes: Optional[List[SecurityRequirement]]=…, name: Optional[str]=…, call: Optional[Callable[..., An…
  • removed: constructor SecurityRequirement(security_scheme: SecurityBase, scopes: Optional[Sequence[str]]=…)
  • added: field Dependant.background_tasks_param_name: Optional[str]
  • added: field Dependant.body_params: List[ModelField]
  • added: field Dependant.cache_key: Tuple[Optional[Callable[..., Any]], Tuple[str, ...]]
  • added: field Dependant.call: Optional[Callable[..., Any]]
  • added: field Dependant.cookie_params: List[ModelField]
  • added: field Dependant.dependencies: List[Dependant]
  • added: field Dependant.header_params: List[ModelField]
  • added: field Dependant.http_connection_param_name: Optional[str]
  • added: field Dependant.name: Optional[str]
  • added: field Dependant.path: Optional[str]
  • added: field Dependant.path_params: List[ModelField]
  • added: field Dependant.query_params: List[ModelField]
  • added: field Dependant.request_param_name: Optional[str]
  • added: field Dependant.response_param_name: Optional[str]
  • added: field Dependant.security_requirements: List[SecurityRequirement]
  • added: field Dependant.security_scopes: Optional[List[str]]
  • added: field Dependant.security_scopes_param_name: Optional[str]
  • added: field Dependant.use_cache: bool
  • added: field Dependant.websocket_param_name: Optional[str]
  • added: field SecurityRequirement.scopes: Optional[Sequence[str]]
  • added: field SecurityRequirement.security_scheme: SecurityBase
  • removed: function check_file_field(field: ModelField) -> None
  • removed: function is_body_param(*, param_field: ModelField, is_path_param: bool) -> bool
  • changed: async function request_body_to_args(required_params: List[ModelField], received_body: Optional[Union[Dict[str, Any], FormData]]) -> Tuple[Dict[str, Any], List[Dict[str, Any]]] → async function request_body_to_args(body_fields: List[ModelField], received_body: Optional[Union[Dict[str, Any], FormData]], embed_body_fields: bool) -> Tuple[Dict[str, Any], List[Dict[str, Any]]]
  • changed: async function solve_dependencies(*, request: Union[Request, WebSocket], dependant: Dependant, body: Optional[Union[Dict[str, Any], FormData]]=…, background_tasks: Optional[StarletteBackgroundTasks]=…, response: Optional[Response]=…, dependency_overrides_provider: Optional[Any]=…, dependency_cache: Optional[Dict[Tuple[Callable[..., Any], Tuple[str]], Any]]=…, async_exit_stack: AsyncExitStack) ->… → async function solve_dependencies(*, request: Union[Request, WebSocket], dependant: Dependant, body: Optional[Union[Dict[str, Any], FormData]]=…, background_tasks: Optional[StarletteBackgroundTasks]=…, response: Optional[Response]=…, dependency_overrides_provider: Optional[Any]=…, dependency_cache: Optional[Dict[Tuple[Callable[..., Any], Tuple[str]], Any]]=…, async_exit_stack: AsyncExitStack, emb…
  • changed: function analyze_param(*, param_name: str, annotation: Any, value: Any, is_path_param: bool) -> Tuple[Any, Optional[params.Depends], Optional[ModelField]] → function analyze_param(*, param_name: str, annotation: Any, value: Any, is_path_param: bool) -> ParamDetails
  • changed: function get_body_field(*, dependant: Dependant, name: str) -> Optional[ModelField] → function get_body_field(*, flat_dependant: Dependant, name: str, embed_body_fields: bool) -> Optional[ModelField]
  • changed: function request_params_to_args(required_params: Sequence[ModelField], received_params: Union[Mapping[str, Any], QueryParams, Headers]) -> Tuple[Dict[str, Any], List[Any]] → function request_params_to_args(fields: Sequence[ModelField], received_params: Union[Mapping[str, Any], QueryParams, Headers]) -> Tuple[Dict[str, Any], List[Any]]
  • added: class ParamDetails
  • added: class SolvedDependency
  • added: field ParamDetails.depends: Optional[params.Depends]
  • added: field ParamDetails.field: Optional[ModelField]
  • added: field ParamDetails.type_annotation: Any
  • added: field SolvedDependency.background_tasks: Optional[StarletteBackgroundTasks]
  • added: field SolvedDependency.dependency_cache: Dict[Tuple[Callable[..., Any], Tuple[str]], Any]
  • added: field SolvedDependency.errors: List[Any]
  • added: field SolvedDependency.response: Response
  • added: field SolvedDependency.values: Dict[str, Any]
  • added: function ensure_multipart_is_installed() -> None
  • changed: constructor Body(default: Any=…, *, default_factory: Union[Callable[[], Any], None]=…, annotation: Optional[Any]=…, embed: bool=…, media_type: str=…, alias: Optional[str]=…, alias_priority: Union[int, None]=…, validation_alias: Union[str, None]=…, serialization_alias: Union[str, None]=…, title: Optional[str]=…, description: Optional[str]=…, gt: Optional[float]=…, ge: Optional[float]=…, lt: Option… → constructor Body(default: Any=…, *, default_factory: Union[Callable[[], Any], None]=…, annotation: Optional[Any]=…, embed: Union[bool, None]=…, media_type: str=…, alias: Optional[str]=…, alias_priority: Union[int, None]=…, validation_alias: Union[str, None]=…, serialization_alias: Union[str, None]=…, title: Optional[str]=…, description: Optional[str]=…, gt: Optional[float]=…, ge: Optional[float]=…
  • changed: function get_websocket_app(dependant: Dependant, dependency_overrides_provider: Optional[Any]=…) -> Callable[[WebSocket], Coroutine[Any, Any, Any]] → function get_websocket_app(dependant: Dependant, dependency_overrides_provider: Optional[Any]=…, embed_body_fields: bool=…) -> Callable[[WebSocket], Coroutine[Any, Any, Any]]
  • removed: function create_response_field(name: str, type_: Type[Any], class_validators: Optional[Dict[str, Validator]]=…, default: Optional[Any]=…, required: Union[bool, UndefinedType]=…, model_config: Type[BaseConfig]=…, field_info: Optional[FieldInfo]=…, alias: Optional[str]=…, mode: Literal['validation', 'serialization']=…) -> ModelField
  • added: function create_model_field(name: str, type_: Any, class_validators: Optional[Dict[str, Validator]]=…, default: Optional[Any]=…, required: Union[bool, UndefinedType]=…, model_config: Type[BaseConfig]=…, field_info: Optional[FieldInfo]=…, alias: Optional[str]=…, mode: Literal['validation', 'serialization']=…) -> ModelField