]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commit
✨ Add support for OpenAPI 3.1.0 (#9770)
authorSebastián Ramírez <tiangolo@gmail.com>
Fri, 30 Jun 2023 18:25:16 +0000 (20:25 +0200)
committerGitHub <noreply@github.com>
Fri, 30 Jun 2023 18:25:16 +0000 (20:25 +0200)
commit7dad5a820bfe99e49a6cfaefde537e09644c2c2b
tree630a026cfa0d3c2c984e27b20758fe0567915c8c
parent02fc9e8a63361fa25e8787d5a0da069890da62c6
✨ Add support for OpenAPI 3.1.0 (#9770)

* ✨ Update OpenAPI models for JSON Schema 2020-12 and OpenAPI 3.1.0

* ✨ Add support for summary and webhooks

* ✨ Update JSON Schema for UploadFiles

* ⏪️ Revert making paths optional, to ensure always correctness

* ⏪️ Keep UploadFile as format: binary for compatibility with the rest of Pydantic bytes fields in v1

* ✨ Update version of OpenAPI generated to 3.1.0

* ✨ Update the version of Swagger UI

* 📝 Update docs about extending OpenAPI

* 📝 Update docs and links to refer to OpenAPI 3.1.0

* ✨ Update logic for handling webhooks

* ♻️ Update parameter functions and classes, deprecate example and make examples the main field

* ✅ Update tests for OpenAPI 3.1.0

* 📝 Update examples for OpenAPI metadata

* ✅ Add and update tests for OpenAPI metadata

* 📝 Add source example for webhooks

* 📝 Update docs for metadata

* 📝 Update docs for Schema extra

* 📝 Add docs for webhooks

* 🔧 Add webhooks docs to MkDocs

* ✅ Update tests for extending OpenAPI

* ✅ Add tests for webhooks

* ♻️ Refactor generation of OpenAPI and JSON Schema with params

* 📝 Update source examples for field examples

* ✅ Update tests for examples

* ➕ Make sure the minimum version of typing-extensions installed has deprecated() (already a dependency of Pydantic)

* ✏️ Fix typo in Webhooks example code

* 🔥 Remove commented out code of removed nullable field

* 🗑️ Add deprecation warnings for example argument

* ✅ Update tests to check for deprecation warnings

* ✅ Add test for webhooks with security schemes, for coverage

* 🍱 Update image for metadata, with new summary

* 🍱 Add docs image for Webhooks

* 📝 Update docs for webhooks, add docs UI image
335 files changed:
docs/en/docs/advanced/additional-responses.md
docs/en/docs/advanced/behind-a-proxy.md
docs/en/docs/advanced/extending-openapi.md
docs/en/docs/advanced/openapi-callbacks.md
docs/en/docs/advanced/openapi-webhooks.md [new file with mode: 0644]
docs/en/docs/advanced/path-operation-advanced-configuration.md
docs/en/docs/img/tutorial/metadata/image01.png
docs/en/docs/img/tutorial/openapi-webhooks/image01.png [new file with mode: 0644]
docs/en/docs/tutorial/first-steps.md
docs/en/docs/tutorial/metadata.md
docs/en/docs/tutorial/path-params.md
docs/en/docs/tutorial/schema-extra-example.md
docs/en/mkdocs.yml
docs_src/extending_openapi/tutorial001.py
docs_src/metadata/tutorial001.py
docs_src/metadata/tutorial001_1.py [new file with mode: 0644]
docs_src/openapi_webhooks/tutorial001.py [new file with mode: 0644]
docs_src/schema_extra_example/tutorial001.py
docs_src/schema_extra_example/tutorial001_py310.py
docs_src/schema_extra_example/tutorial002.py
docs_src/schema_extra_example/tutorial002_py310.py
docs_src/schema_extra_example/tutorial003.py
docs_src/schema_extra_example/tutorial003_an.py
docs_src/schema_extra_example/tutorial003_an_py310.py
docs_src/schema_extra_example/tutorial003_an_py39.py
docs_src/schema_extra_example/tutorial003_py310.py
docs_src/schema_extra_example/tutorial004.py
docs_src/schema_extra_example/tutorial004_an.py
docs_src/schema_extra_example/tutorial004_an_py310.py
docs_src/schema_extra_example/tutorial004_an_py39.py
docs_src/schema_extra_example/tutorial004_py310.py
fastapi/applications.py
fastapi/openapi/docs.py
fastapi/openapi/models.py
fastapi/openapi/utils.py
fastapi/param_functions.py
fastapi/params.py
pyproject.toml
tests/test_additional_properties.py
tests/test_additional_response_extra.py
tests/test_additional_responses_bad.py
tests/test_additional_responses_custom_model_in_callback.py
tests/test_additional_responses_custom_validationerror.py
tests/test_additional_responses_default_validationerror.py
tests/test_additional_responses_response_class.py
tests/test_additional_responses_router.py
tests/test_annotated.py
tests/test_application.py
tests/test_custom_route_class.py
tests/test_dependency_duplicates.py
tests/test_deprecated_openapi_prefix.py
tests/test_duplicate_models_openapi.py
tests/test_enforce_once_required_parameter.py
tests/test_extra_routes.py
tests/test_filter_pydantic_sub_model.py
tests/test_generate_unique_id_function.py
tests/test_get_request_body.py
tests/test_include_router_defaults_overrides.py
tests/test_modules_same_name_body/test_main.py
tests/test_multi_body_errors.py
tests/test_multi_query_errors.py
tests/test_openapi_query_parameter_extension.py
tests/test_openapi_route_extensions.py
tests/test_openapi_servers.py
tests/test_param_in_path_and_dependency.py
tests/test_param_include_in_schema.py
tests/test_put_no_body.py
tests/test_repeated_dependency_schema.py
tests/test_repeated_parameter_alias.py
tests/test_reponse_set_reponse_code_empty.py
tests/test_request_body_parameters_media_type.py
tests/test_response_by_alias.py
tests/test_response_class_no_mediatype.py
tests/test_response_code_no_body.py
tests/test_response_model_as_return_annotation.py
tests/test_response_model_sub_types.py
tests/test_schema_extra_examples.py
tests/test_security_api_key_cookie.py
tests/test_security_api_key_cookie_description.py
tests/test_security_api_key_cookie_optional.py
tests/test_security_api_key_header.py
tests/test_security_api_key_header_description.py
tests/test_security_api_key_header_optional.py
tests/test_security_api_key_query.py
tests/test_security_api_key_query_description.py
tests/test_security_api_key_query_optional.py
tests/test_security_http_base.py
tests/test_security_http_base_description.py
tests/test_security_http_base_optional.py
tests/test_security_http_basic_optional.py
tests/test_security_http_basic_realm.py
tests/test_security_http_basic_realm_description.py
tests/test_security_http_bearer.py
tests/test_security_http_bearer_description.py
tests/test_security_http_bearer_optional.py
tests/test_security_http_digest.py
tests/test_security_http_digest_description.py
tests/test_security_http_digest_optional.py
tests/test_security_oauth2.py
tests/test_security_oauth2_authorization_code_bearer.py
tests/test_security_oauth2_authorization_code_bearer_description.py
tests/test_security_oauth2_optional.py
tests/test_security_oauth2_optional_description.py
tests/test_security_oauth2_password_bearer_optional.py
tests/test_security_oauth2_password_bearer_optional_description.py
tests/test_security_openid_connect.py
tests/test_security_openid_connect_description.py
tests/test_security_openid_connect_optional.py
tests/test_starlette_exception.py
tests/test_sub_callbacks.py
tests/test_tuples.py
tests/test_tutorial/test_additional_responses/test_tutorial001.py
tests/test_tutorial/test_additional_responses/test_tutorial002.py
tests/test_tutorial/test_additional_responses/test_tutorial003.py
tests/test_tutorial/test_additional_responses/test_tutorial004.py
tests/test_tutorial/test_async_sql_databases/test_tutorial001.py
tests/test_tutorial/test_behind_a_proxy/test_tutorial001.py
tests/test_tutorial/test_behind_a_proxy/test_tutorial002.py
tests/test_tutorial/test_behind_a_proxy/test_tutorial003.py
tests/test_tutorial/test_behind_a_proxy/test_tutorial004.py
tests/test_tutorial/test_bigger_applications/test_main.py
tests/test_tutorial/test_bigger_applications/test_main_an.py
tests/test_tutorial/test_bigger_applications/test_main_an_py39.py
tests/test_tutorial/test_body/test_tutorial001.py
tests/test_tutorial/test_body/test_tutorial001_py310.py
tests/test_tutorial/test_body_fields/test_tutorial001.py
tests/test_tutorial/test_body_fields/test_tutorial001_an.py
tests/test_tutorial/test_body_fields/test_tutorial001_an_py310.py
tests/test_tutorial/test_body_fields/test_tutorial001_an_py39.py
tests/test_tutorial/test_body_fields/test_tutorial001_py310.py
tests/test_tutorial/test_body_multiple_params/test_tutorial001.py
tests/test_tutorial/test_body_multiple_params/test_tutorial001_an.py
tests/test_tutorial/test_body_multiple_params/test_tutorial001_an_py310.py
tests/test_tutorial/test_body_multiple_params/test_tutorial001_an_py39.py
tests/test_tutorial/test_body_multiple_params/test_tutorial001_py310.py
tests/test_tutorial/test_body_multiple_params/test_tutorial003.py
tests/test_tutorial/test_body_multiple_params/test_tutorial003_an.py
tests/test_tutorial/test_body_multiple_params/test_tutorial003_an_py310.py
tests/test_tutorial/test_body_multiple_params/test_tutorial003_an_py39.py
tests/test_tutorial/test_body_multiple_params/test_tutorial003_py310.py
tests/test_tutorial/test_body_nested_models/test_tutorial009.py
tests/test_tutorial/test_body_nested_models/test_tutorial009_py39.py
tests/test_tutorial/test_body_updates/test_tutorial001.py
tests/test_tutorial/test_body_updates/test_tutorial001_py310.py
tests/test_tutorial/test_body_updates/test_tutorial001_py39.py
tests/test_tutorial/test_conditional_openapi/test_tutorial001.py
tests/test_tutorial/test_cookie_params/test_tutorial001.py
tests/test_tutorial/test_cookie_params/test_tutorial001_an.py
tests/test_tutorial/test_cookie_params/test_tutorial001_an_py310.py
tests/test_tutorial/test_cookie_params/test_tutorial001_an_py39.py
tests/test_tutorial/test_cookie_params/test_tutorial001_py310.py
tests/test_tutorial/test_custom_response/test_tutorial001.py
tests/test_tutorial/test_custom_response/test_tutorial001b.py
tests/test_tutorial/test_custom_response/test_tutorial004.py
tests/test_tutorial/test_custom_response/test_tutorial005.py
tests/test_tutorial/test_custom_response/test_tutorial006.py
tests/test_tutorial/test_custom_response/test_tutorial006b.py
tests/test_tutorial/test_custom_response/test_tutorial006c.py
tests/test_tutorial/test_dataclasses/test_tutorial001.py
tests/test_tutorial/test_dataclasses/test_tutorial002.py
tests/test_tutorial/test_dataclasses/test_tutorial003.py
tests/test_tutorial/test_dependencies/test_tutorial001.py
tests/test_tutorial/test_dependencies/test_tutorial001_an.py
tests/test_tutorial/test_dependencies/test_tutorial001_an_py310.py
tests/test_tutorial/test_dependencies/test_tutorial001_an_py39.py
tests/test_tutorial/test_dependencies/test_tutorial001_py310.py
tests/test_tutorial/test_dependencies/test_tutorial004.py
tests/test_tutorial/test_dependencies/test_tutorial004_an.py
tests/test_tutorial/test_dependencies/test_tutorial004_an_py310.py
tests/test_tutorial/test_dependencies/test_tutorial004_an_py39.py
tests/test_tutorial/test_dependencies/test_tutorial004_py310.py
tests/test_tutorial/test_dependencies/test_tutorial006.py
tests/test_tutorial/test_dependencies/test_tutorial006_an.py
tests/test_tutorial/test_dependencies/test_tutorial006_an_py39.py
tests/test_tutorial/test_dependencies/test_tutorial012.py
tests/test_tutorial/test_dependencies/test_tutorial012_an.py
tests/test_tutorial/test_dependencies/test_tutorial012_an_py39.py
tests/test_tutorial/test_events/test_tutorial001.py
tests/test_tutorial/test_events/test_tutorial002.py
tests/test_tutorial/test_events/test_tutorial003.py
tests/test_tutorial/test_extending_openapi/test_tutorial001.py
tests/test_tutorial/test_extra_data_types/test_tutorial001.py
tests/test_tutorial/test_extra_data_types/test_tutorial001_an.py
tests/test_tutorial/test_extra_data_types/test_tutorial001_an_py310.py
tests/test_tutorial/test_extra_data_types/test_tutorial001_an_py39.py
tests/test_tutorial/test_extra_data_types/test_tutorial001_py310.py
tests/test_tutorial/test_extra_models/test_tutorial003.py
tests/test_tutorial/test_extra_models/test_tutorial003_py310.py
tests/test_tutorial/test_extra_models/test_tutorial004.py
tests/test_tutorial/test_extra_models/test_tutorial004_py39.py
tests/test_tutorial/test_extra_models/test_tutorial005.py
tests/test_tutorial/test_extra_models/test_tutorial005_py39.py
tests/test_tutorial/test_first_steps/test_tutorial001.py
tests/test_tutorial/test_generate_clients/test_tutorial003.py
tests/test_tutorial/test_handling_errors/test_tutorial001.py
tests/test_tutorial/test_handling_errors/test_tutorial002.py
tests/test_tutorial/test_handling_errors/test_tutorial003.py
tests/test_tutorial/test_handling_errors/test_tutorial004.py
tests/test_tutorial/test_handling_errors/test_tutorial005.py
tests/test_tutorial/test_handling_errors/test_tutorial006.py
tests/test_tutorial/test_header_params/test_tutorial001.py
tests/test_tutorial/test_header_params/test_tutorial001_an.py
tests/test_tutorial/test_header_params/test_tutorial001_an_py310.py
tests/test_tutorial/test_header_params/test_tutorial001_py310.py
tests/test_tutorial/test_header_params/test_tutorial002.py
tests/test_tutorial/test_header_params/test_tutorial002_an.py
tests/test_tutorial/test_header_params/test_tutorial002_an_py310.py
tests/test_tutorial/test_header_params/test_tutorial002_an_py39.py
tests/test_tutorial/test_header_params/test_tutorial002_py310.py
tests/test_tutorial/test_header_params/test_tutorial003.py
tests/test_tutorial/test_header_params/test_tutorial003_an.py
tests/test_tutorial/test_header_params/test_tutorial003_an_py310.py
tests/test_tutorial/test_header_params/test_tutorial003_an_py39.py
tests/test_tutorial/test_header_params/test_tutorial003_py310.py
tests/test_tutorial/test_metadata/test_tutorial001.py
tests/test_tutorial/test_metadata/test_tutorial001_1.py [new file with mode: 0644]
tests/test_tutorial/test_metadata/test_tutorial004.py
tests/test_tutorial/test_openapi_callbacks/test_tutorial001.py
tests/test_tutorial/test_openapi_webhooks/__init__.py [new file with mode: 0644]
tests/test_tutorial/test_openapi_webhooks/test_tutorial001.py [new file with mode: 0644]
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial001.py
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial002.py
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial003.py
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial004.py
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial005.py
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial006.py
tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial007.py
tests/test_tutorial/test_path_operation_configurations/test_tutorial002b.py
tests/test_tutorial/test_path_operation_configurations/test_tutorial005.py
tests/test_tutorial/test_path_operation_configurations/test_tutorial005_py310.py
tests/test_tutorial/test_path_operation_configurations/test_tutorial005_py39.py
tests/test_tutorial/test_path_operation_configurations/test_tutorial006.py
tests/test_tutorial/test_path_params/test_tutorial004.py
tests/test_tutorial/test_path_params/test_tutorial005.py
tests/test_tutorial/test_query_params/test_tutorial005.py
tests/test_tutorial/test_query_params/test_tutorial006.py
tests/test_tutorial/test_query_params/test_tutorial006_py310.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial010.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py310.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_an_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial010_py310.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py310.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_an_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py310.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial011_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial012.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial012_an_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial012_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial013.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial013_an_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial014.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py310.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_an_py39.py
tests/test_tutorial/test_query_params_str_validations/test_tutorial014_py310.py
tests/test_tutorial/test_request_files/test_tutorial001.py
tests/test_tutorial/test_request_files/test_tutorial001_02.py
tests/test_tutorial/test_request_files/test_tutorial001_02_an.py
tests/test_tutorial/test_request_files/test_tutorial001_02_an_py310.py
tests/test_tutorial/test_request_files/test_tutorial001_02_an_py39.py
tests/test_tutorial/test_request_files/test_tutorial001_02_py310.py
tests/test_tutorial/test_request_files/test_tutorial001_03.py
tests/test_tutorial/test_request_files/test_tutorial001_03_an.py
tests/test_tutorial/test_request_files/test_tutorial001_03_an_py39.py
tests/test_tutorial/test_request_files/test_tutorial001_an.py
tests/test_tutorial/test_request_files/test_tutorial001_an_py39.py
tests/test_tutorial/test_request_files/test_tutorial002.py
tests/test_tutorial/test_request_files/test_tutorial002_an.py
tests/test_tutorial/test_request_files/test_tutorial002_an_py39.py
tests/test_tutorial/test_request_files/test_tutorial002_py39.py
tests/test_tutorial/test_request_files/test_tutorial003.py
tests/test_tutorial/test_request_files/test_tutorial003_an.py
tests/test_tutorial/test_request_files/test_tutorial003_an_py39.py
tests/test_tutorial/test_request_files/test_tutorial003_py39.py
tests/test_tutorial/test_request_forms/test_tutorial001.py
tests/test_tutorial/test_request_forms/test_tutorial001_an.py
tests/test_tutorial/test_request_forms/test_tutorial001_an_py39.py
tests/test_tutorial/test_request_forms_and_files/test_tutorial001.py
tests/test_tutorial/test_request_forms_and_files/test_tutorial001_an.py
tests/test_tutorial/test_request_forms_and_files/test_tutorial001_an_py39.py
tests/test_tutorial/test_response_model/test_tutorial003.py
tests/test_tutorial/test_response_model/test_tutorial003_01.py
tests/test_tutorial/test_response_model/test_tutorial003_01_py310.py
tests/test_tutorial/test_response_model/test_tutorial003_02.py
tests/test_tutorial/test_response_model/test_tutorial003_03.py
tests/test_tutorial/test_response_model/test_tutorial003_05.py
tests/test_tutorial/test_response_model/test_tutorial003_05_py310.py
tests/test_tutorial/test_response_model/test_tutorial003_py310.py
tests/test_tutorial/test_response_model/test_tutorial004.py
tests/test_tutorial/test_response_model/test_tutorial004_py310.py
tests/test_tutorial/test_response_model/test_tutorial004_py39.py
tests/test_tutorial/test_response_model/test_tutorial005.py
tests/test_tutorial/test_response_model/test_tutorial005_py310.py
tests/test_tutorial/test_response_model/test_tutorial006.py
tests/test_tutorial/test_response_model/test_tutorial006_py310.py
tests/test_tutorial/test_schema_extra_example/test_tutorial004.py
tests/test_tutorial/test_schema_extra_example/test_tutorial004_an.py
tests/test_tutorial/test_schema_extra_example/test_tutorial004_an_py310.py
tests/test_tutorial/test_schema_extra_example/test_tutorial004_an_py39.py
tests/test_tutorial/test_schema_extra_example/test_tutorial004_py310.py
tests/test_tutorial/test_security/test_tutorial001.py
tests/test_tutorial/test_security/test_tutorial001_an.py
tests/test_tutorial/test_security/test_tutorial001_an_py39.py
tests/test_tutorial/test_security/test_tutorial003.py
tests/test_tutorial/test_security/test_tutorial003_an.py
tests/test_tutorial/test_security/test_tutorial003_an_py310.py
tests/test_tutorial/test_security/test_tutorial003_an_py39.py
tests/test_tutorial/test_security/test_tutorial003_py310.py
tests/test_tutorial/test_security/test_tutorial005.py
tests/test_tutorial/test_security/test_tutorial005_an.py
tests/test_tutorial/test_security/test_tutorial005_an_py310.py
tests/test_tutorial/test_security/test_tutorial005_an_py39.py
tests/test_tutorial/test_security/test_tutorial005_py310.py
tests/test_tutorial/test_security/test_tutorial005_py39.py
tests/test_tutorial/test_security/test_tutorial006.py
tests/test_tutorial/test_security/test_tutorial006_an.py
tests/test_tutorial/test_security/test_tutorial006_an_py39.py
tests/test_tutorial/test_sql_databases/test_sql_databases.py
tests/test_tutorial/test_sql_databases/test_sql_databases_middleware.py
tests/test_tutorial/test_sql_databases/test_sql_databases_middleware_py310.py
tests/test_tutorial/test_sql_databases/test_sql_databases_middleware_py39.py
tests/test_tutorial/test_sql_databases/test_sql_databases_py310.py
tests/test_tutorial/test_sql_databases/test_sql_databases_py39.py
tests/test_tutorial/test_sql_databases_peewee/test_sql_databases_peewee.py
tests/test_tutorial/test_sub_applications/test_tutorial001.py
tests/test_tutorial/test_testing/test_main.py
tests/test_tutorial/test_testing/test_tutorial001.py
tests/test_union_body.py
tests/test_union_inherited_body.py
tests/test_webhooks_security.py [new file with mode: 0644]