notslowapi 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- notslowapi-0.1.0/LICENSE +21 -0
- notslowapi-0.1.0/PKG-INFO +163 -0
- notslowapi-0.1.0/README.md +94 -0
- notslowapi-0.1.0/docs/en/docs/img/favicon.png +0 -0
- notslowapi-0.1.0/docs_src/additional_responses/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/additional_responses/tutorial001_py310.py +22 -0
- notslowapi-0.1.0/docs_src/additional_responses/tutorial002_py310.py +28 -0
- notslowapi-0.1.0/docs_src/additional_responses/tutorial003_py310.py +37 -0
- notslowapi-0.1.0/docs_src/additional_responses/tutorial004_py310.py +30 -0
- notslowapi-0.1.0/docs_src/additional_status_codes/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/additional_status_codes/tutorial001_an_py310.py +25 -0
- notslowapi-0.1.0/docs_src/additional_status_codes/tutorial001_py310.py +23 -0
- notslowapi-0.1.0/docs_src/advanced_middleware/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/advanced_middleware/tutorial001_py310.py +11 -0
- notslowapi-0.1.0/docs_src/advanced_middleware/tutorial002_py310.py +13 -0
- notslowapi-0.1.0/docs_src/advanced_middleware/tutorial003_py310.py +11 -0
- notslowapi-0.1.0/docs_src/app_testing/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/app_testing/app_a_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/app_testing/app_a_py310/main.py +8 -0
- notslowapi-0.1.0/docs_src/app_testing/app_a_py310/test_main.py +11 -0
- notslowapi-0.1.0/docs_src/app_testing/app_b_an_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/app_testing/app_b_an_py310/main.py +38 -0
- notslowapi-0.1.0/docs_src/app_testing/app_b_an_py310/test_main.py +65 -0
- notslowapi-0.1.0/docs_src/app_testing/app_b_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/app_testing/app_b_py310/main.py +36 -0
- notslowapi-0.1.0/docs_src/app_testing/app_b_py310/test_main.py +65 -0
- notslowapi-0.1.0/docs_src/app_testing/tutorial001_py310.py +18 -0
- notslowapi-0.1.0/docs_src/app_testing/tutorial002_py310.py +31 -0
- notslowapi-0.1.0/docs_src/app_testing/tutorial003_py310.py +24 -0
- notslowapi-0.1.0/docs_src/app_testing/tutorial004_py310.py +43 -0
- notslowapi-0.1.0/docs_src/async_tests/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/async_tests/app_a_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/async_tests/app_a_py310/main.py +8 -0
- notslowapi-0.1.0/docs_src/async_tests/app_a_py310/test_main.py +14 -0
- notslowapi-0.1.0/docs_src/authentication_error_status_code/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/authentication_error_status_code/tutorial001_an_py310.py +21 -0
- notslowapi-0.1.0/docs_src/background_tasks/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/background_tasks/tutorial001_py310.py +15 -0
- notslowapi-0.1.0/docs_src/background_tasks/tutorial002_an_py310.py +26 -0
- notslowapi-0.1.0/docs_src/background_tasks/tutorial002_py310.py +24 -0
- notslowapi-0.1.0/docs_src/behind_a_proxy/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial001_01_py310.py +8 -0
- notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial002_py310.py +8 -0
- notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial003_py310.py +14 -0
- notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial004_py310.py +15 -0
- notslowapi-0.1.0/docs_src/bigger_applications/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/dependencies.py +13 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/internal/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/internal/admin.py +8 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/main.py +23 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/routers/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/routers/items.py +38 -0
- notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/routers/users.py +18 -0
- notslowapi-0.1.0/docs_src/body/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/body/tutorial001_py310.py +17 -0
- notslowapi-0.1.0/docs_src/body/tutorial002_py310.py +21 -0
- notslowapi-0.1.0/docs_src/body/tutorial003_py310.py +17 -0
- notslowapi-0.1.0/docs_src/body/tutorial004_py310.py +20 -0
- notslowapi-0.1.0/docs_src/body_fields/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/body_fields/tutorial001_an_py310.py +21 -0
- notslowapi-0.1.0/docs_src/body_fields/tutorial001_py310.py +19 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial001_an_py310.py +27 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial001_py310.py +26 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial002_py310.py +22 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial003_an_py310.py +26 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial003_py310.py +22 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial004_an_py310.py +33 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial004_py310.py +31 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial005_an_py310.py +19 -0
- notslowapi-0.1.0/docs_src/body_multiple_params/tutorial005_py310.py +17 -0
- notslowapi-0.1.0/docs_src/body_nested_models/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial001_py310.py +18 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial002_py310.py +18 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial003_py310.py +18 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial004_py310.py +24 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial005_py310.py +24 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial006_py310.py +24 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial007_py310.py +30 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial008_py310.py +14 -0
- notslowapi-0.1.0/docs_src/body_nested_models/tutorial009_py310.py +8 -0
- notslowapi-0.1.0/docs_src/body_updates/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/body_updates/tutorial001_py310.py +32 -0
- notslowapi-0.1.0/docs_src/body_updates/tutorial002_py310.py +35 -0
- notslowapi-0.1.0/docs_src/conditional_openapi/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/conditional_openapi/tutorial001_py310.py +16 -0
- notslowapi-0.1.0/docs_src/configure_swagger_ui/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/configure_swagger_ui/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/configure_swagger_ui/tutorial002_py310.py +8 -0
- notslowapi-0.1.0/docs_src/configure_swagger_ui/tutorial003_py310.py +8 -0
- notslowapi-0.1.0/docs_src/cookie_param_models/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/cookie_param_models/tutorial001_an_py310.py +17 -0
- notslowapi-0.1.0/docs_src/cookie_param_models/tutorial001_py310.py +15 -0
- notslowapi-0.1.0/docs_src/cookie_param_models/tutorial002_an_py310.py +19 -0
- notslowapi-0.1.0/docs_src/cookie_param_models/tutorial002_py310.py +17 -0
- notslowapi-0.1.0/docs_src/cookie_params/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/cookie_params/tutorial001_an_py310.py +10 -0
- notslowapi-0.1.0/docs_src/cookie_params/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/cors/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/cors/tutorial001_py310.py +24 -0
- notslowapi-0.1.0/docs_src/custom_docs_ui/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/custom_docs_ui/tutorial001_py310.py +38 -0
- notslowapi-0.1.0/docs_src/custom_docs_ui/tutorial002_py310.py +41 -0
- notslowapi-0.1.0/docs_src/custom_request_and_route/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial001_an_py310.py +36 -0
- notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial001_py310.py +35 -0
- notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial002_an_py310.py +30 -0
- notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial002_py310.py +29 -0
- notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial003_py310.py +39 -0
- notslowapi-0.1.0/docs_src/custom_response/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial001_py310.py +9 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial001b_py310.py +9 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial002_py310.py +18 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial003_py310.py +19 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial004_py310.py +23 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial005_py310.py +9 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial006_py310.py +9 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial006b_py310.py +9 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial006c_py310.py +9 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial007_py310.py +16 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial008_py310.py +14 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial009_py310.py +10 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial009b_py310.py +10 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial009c_py310.py +19 -0
- notslowapi-0.1.0/docs_src/custom_response/tutorial010_py310.py +9 -0
- notslowapi-0.1.0/docs_src/dataclasses_/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/dataclasses_/tutorial001_py310.py +19 -0
- notslowapi-0.1.0/docs_src/dataclasses_/tutorial002_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dataclasses_/tutorial003_py310.py +54 -0
- notslowapi-0.1.0/docs_src/debugging/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/debugging/tutorial001_py310.py +15 -0
- notslowapi-0.1.0/docs_src/dependencies/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial001_02_an_py310.py +22 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial001_an_py310.py +19 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial001_py310.py +17 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial002_an_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial002_py310.py +23 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial003_an_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial003_py310.py +23 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial004_an_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial004_py310.py +23 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial005_an_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial005_py310.py +20 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial006_an_py310.py +21 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial006_py310.py +19 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial007_py310.py +6 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008_an_py310.py +27 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008b_an_py310.py +32 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008b_py310.py +30 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008c_an_py310.py +29 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008c_py310.py +27 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008d_an_py310.py +30 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008d_py310.py +28 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008e_an_py310.py +17 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial008e_py310.py +15 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial010_py310.py +14 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial011_an_py310.py +23 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial011_py310.py +21 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial012_an_py310.py +27 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial012_py310.py +25 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial013_an_py310.py +38 -0
- notslowapi-0.1.0/docs_src/dependencies/tutorial014_an_py310.py +39 -0
- notslowapi-0.1.0/docs_src/dependency_testing/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/dependency_testing/tutorial001_an_py310.py +57 -0
- notslowapi-0.1.0/docs_src/dependency_testing/tutorial001_py310.py +55 -0
- notslowapi-0.1.0/docs_src/encoder/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/encoder/tutorial001_py310.py +22 -0
- notslowapi-0.1.0/docs_src/events/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/events/tutorial001_py310.py +16 -0
- notslowapi-0.1.0/docs_src/events/tutorial002_py310.py +14 -0
- notslowapi-0.1.0/docs_src/events/tutorial003_py310.py +28 -0
- notslowapi-0.1.0/docs_src/extending_openapi/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/extending_openapi/tutorial001_py310.py +29 -0
- notslowapi-0.1.0/docs_src/extra_data_types/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/extra_data_types/tutorial001_an_py310.py +28 -0
- notslowapi-0.1.0/docs_src/extra_data_types/tutorial001_py310.py +27 -0
- notslowapi-0.1.0/docs_src/extra_models/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/extra_models/tutorial001_py310.py +41 -0
- notslowapi-0.1.0/docs_src/extra_models/tutorial002_py310.py +39 -0
- notslowapi-0.1.0/docs_src/extra_models/tutorial003_py310.py +33 -0
- notslowapi-0.1.0/docs_src/extra_models/tutorial004_py310.py +20 -0
- notslowapi-0.1.0/docs_src/extra_models/tutorial005_py310.py +8 -0
- notslowapi-0.1.0/docs_src/first_steps/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/first_steps/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/first_steps/tutorial003_py310.py +8 -0
- notslowapi-0.1.0/docs_src/frontend/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/frontend/tutorial001_py310.py +5 -0
- notslowapi-0.1.0/docs_src/frontend/tutorial002_py310.py +5 -0
- notslowapi-0.1.0/docs_src/frontend/tutorial003_py310.py +5 -0
- notslowapi-0.1.0/docs_src/frontend/tutorial004_py310.py +7 -0
- notslowapi-0.1.0/docs_src/frontend/tutorial005_py310.py +5 -0
- notslowapi-0.1.0/docs_src/frontend/tutorial006_py310.py +5 -0
- notslowapi-0.1.0/docs_src/generate_clients/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/generate_clients/tutorial001_py310.py +26 -0
- notslowapi-0.1.0/docs_src/generate_clients/tutorial002_py310.py +36 -0
- notslowapi-0.1.0/docs_src/generate_clients/tutorial003_py310.py +42 -0
- notslowapi-0.1.0/docs_src/generate_clients/tutorial004.js +36 -0
- notslowapi-0.1.0/docs_src/generate_clients/tutorial004_py310.py +15 -0
- notslowapi-0.1.0/docs_src/graphql_/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/graphql_/tutorial001_py310.py +25 -0
- notslowapi-0.1.0/docs_src/handling_errors/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/handling_errors/tutorial001_py310.py +12 -0
- notslowapi-0.1.0/docs_src/handling_errors/tutorial002_py310.py +16 -0
- notslowapi-0.1.0/docs_src/handling_errors/tutorial003_py310.py +25 -0
- notslowapi-0.1.0/docs_src/handling_errors/tutorial004_py310.py +26 -0
- notslowapi-0.1.0/docs_src/handling_errors/tutorial005_py310.py +25 -0
- notslowapi-0.1.0/docs_src/handling_errors/tutorial006_py310.py +28 -0
- notslowapi-0.1.0/docs_src/header_param_models/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/header_param_models/tutorial001_an_py310.py +19 -0
- notslowapi-0.1.0/docs_src/header_param_models/tutorial001_py310.py +17 -0
- notslowapi-0.1.0/docs_src/header_param_models/tutorial002_an_py310.py +21 -0
- notslowapi-0.1.0/docs_src/header_param_models/tutorial002_py310.py +19 -0
- notslowapi-0.1.0/docs_src/header_param_models/tutorial003_an_py310.py +21 -0
- notslowapi-0.1.0/docs_src/header_param_models/tutorial003_py310.py +17 -0
- notslowapi-0.1.0/docs_src/header_params/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/header_params/tutorial001_an_py310.py +10 -0
- notslowapi-0.1.0/docs_src/header_params/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/header_params/tutorial002_an_py310.py +12 -0
- notslowapi-0.1.0/docs_src/header_params/tutorial002_py310.py +10 -0
- notslowapi-0.1.0/docs_src/header_params/tutorial003_an_py310.py +10 -0
- notslowapi-0.1.0/docs_src/header_params/tutorial003_py310.py +8 -0
- notslowapi-0.1.0/docs_src/json_base64_bytes/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/json_base64_bytes/tutorial001_py310.py +46 -0
- notslowapi-0.1.0/docs_src/metadata/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/metadata/tutorial001_1_py310.py +38 -0
- notslowapi-0.1.0/docs_src/metadata/tutorial001_py310.py +38 -0
- notslowapi-0.1.0/docs_src/metadata/tutorial002_py310.py +8 -0
- notslowapi-0.1.0/docs_src/metadata/tutorial003_py310.py +8 -0
- notslowapi-0.1.0/docs_src/metadata/tutorial004_py310.py +28 -0
- notslowapi-0.1.0/docs_src/middleware/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/middleware/tutorial001_py310.py +14 -0
- notslowapi-0.1.0/docs_src/openapi_callbacks/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/openapi_callbacks/tutorial001_py310.py +51 -0
- notslowapi-0.1.0/docs_src/openapi_webhooks/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/openapi_webhooks/tutorial001_py310.py +25 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial002_py310.py +14 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial003_py310.py +8 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial004_py310.py +28 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial005_py310.py +8 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial006_py310.py +41 -0
- notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial007_py310.py +32 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial001_py310.py +17 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial002_py310.py +27 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial002b_py310.py +20 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial003_py310.py +21 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial004_py310.py +26 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial005_py310.py +30 -0
- notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial006_py310.py +18 -0
- notslowapi-0.1.0/docs_src/path_params/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/path_params/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/path_params/tutorial002_py310.py +8 -0
- notslowapi-0.1.0/docs_src/path_params/tutorial003_py310.py +13 -0
- notslowapi-0.1.0/docs_src/path_params/tutorial003b_py310.py +13 -0
- notslowapi-0.1.0/docs_src/path_params/tutorial004_py310.py +8 -0
- notslowapi-0.1.0/docs_src/path_params/tutorial005_py310.py +23 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial001_an_py310.py +16 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial001_py310.py +14 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial002_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial002_py310.py +11 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial003_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial003_py310.py +11 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial004_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial004_py310.py +13 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial005_an_py310.py +16 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial005_py310.py +15 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial006_an_py310.py +20 -0
- notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial006_py310.py +18 -0
- notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial001_an_py310.py +7 -0
- notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial002_an_py310.py +16 -0
- notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py +23 -0
- notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial004_an_py310.py +19 -0
- notslowapi-0.1.0/docs_src/python_types/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial001_py310.py +6 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial002_py310.py +6 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial003_py310.py +3 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial004_py310.py +3 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial005_py310.py +2 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial006_py310.py +3 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial007_py310.py +2 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial008_py310.py +4 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial008b_py310.py +2 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial009_py310.py +5 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial010_py310.py +7 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial011_py310.py +22 -0
- notslowapi-0.1.0/docs_src/python_types/tutorial013_py310.py +5 -0
- notslowapi-0.1.0/docs_src/query_param_models/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/query_param_models/tutorial001_an_py310.py +18 -0
- notslowapi-0.1.0/docs_src/query_param_models/tutorial001_py310.py +18 -0
- notslowapi-0.1.0/docs_src/query_param_models/tutorial002_an_py310.py +20 -0
- notslowapi-0.1.0/docs_src/query_param_models/tutorial002_py310.py +20 -0
- notslowapi-0.1.0/docs_src/query_params/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/query_params/tutorial001_py310.py +10 -0
- notslowapi-0.1.0/docs_src/query_params/tutorial002_py310.py +10 -0
- notslowapi-0.1.0/docs_src/query_params/tutorial003_py310.py +15 -0
- notslowapi-0.1.0/docs_src/query_params/tutorial004_py310.py +17 -0
- notslowapi-0.1.0/docs_src/query_params/tutorial005_py310.py +9 -0
- notslowapi-0.1.0/docs_src/query_params/tutorial006_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial001_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial002_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial002_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial003_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial003_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial004_an_py310.py +17 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial004_py310.py +15 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial005_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial005_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006c_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006c_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial007_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial007_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial008_an_py310.py +22 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial008_py310.py +18 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial009_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial009_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial010_an_py310.py +26 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial010_py310.py +22 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial011_an_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial011_py310.py +9 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial012_an_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial012_py310.py +9 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial013_an_py310.py +11 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial013_py310.py +9 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial014_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial014_py310.py +13 -0
- notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial015_an_py310.py +30 -0
- notslowapi-0.1.0/docs_src/request_files/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial001_02_an_py310.py +21 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial001_02_py310.py +19 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial001_03_an_py310.py +17 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial001_03_py310.py +15 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial001_an_py310.py +15 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial001_py310.py +13 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial002_an_py310.py +33 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial002_py310.py +31 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial003_an_py310.py +39 -0
- notslowapi-0.1.0/docs_src/request_files/tutorial003_py310.py +35 -0
- notslowapi-0.1.0/docs_src/request_form_models/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/request_form_models/tutorial001_an_py310.py +16 -0
- notslowapi-0.1.0/docs_src/request_form_models/tutorial001_py310.py +14 -0
- notslowapi-0.1.0/docs_src/request_form_models/tutorial002_an_py310.py +17 -0
- notslowapi-0.1.0/docs_src/request_form_models/tutorial002_py310.py +15 -0
- notslowapi-0.1.0/docs_src/request_forms/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/request_forms/tutorial001_an_py310.py +10 -0
- notslowapi-0.1.0/docs_src/request_forms/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/request_forms_and_files/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/request_forms_and_files/tutorial001_an_py310.py +18 -0
- notslowapi-0.1.0/docs_src/request_forms_and_files/tutorial001_py310.py +14 -0
- notslowapi-0.1.0/docs_src/response_change_status_code/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/response_change_status_code/tutorial001_py310.py +13 -0
- notslowapi-0.1.0/docs_src/response_cookies/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/response_cookies/tutorial001_py310.py +12 -0
- notslowapi-0.1.0/docs_src/response_cookies/tutorial002_py310.py +9 -0
- notslowapi-0.1.0/docs_src/response_directly/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/response_directly/tutorial001_py310.py +21 -0
- notslowapi-0.1.0/docs_src/response_directly/tutorial002_py310.py +18 -0
- notslowapi-0.1.0/docs_src/response_headers/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/response_headers/tutorial001_py310.py +11 -0
- notslowapi-0.1.0/docs_src/response_headers/tutorial002_py310.py +9 -0
- notslowapi-0.1.0/docs_src/response_model/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial001_01_py310.py +25 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial001_py310.py +27 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial002_py310.py +17 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial003_01_py310.py +19 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial003_02_py310.py +11 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial003_03_py310.py +9 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial003_04_py310.py +11 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial003_05_py310.py +11 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial003_py310.py +24 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial004_py310.py +24 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial005_py310.py +37 -0
- notslowapi-0.1.0/docs_src/response_model/tutorial006_py310.py +37 -0
- notslowapi-0.1.0/docs_src/response_status_code/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/response_status_code/tutorial001_py310.py +8 -0
- notslowapi-0.1.0/docs_src/response_status_code/tutorial002_py310.py +8 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial001_py310.py +30 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial002_py310.py +17 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial003_an_py310.py +34 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial003_py310.py +29 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial004_an_py310.py +43 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial004_py310.py +38 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial005_an_py310.py +54 -0
- notslowapi-0.1.0/docs_src/schema_extra_example/tutorial005_py310.py +49 -0
- notslowapi-0.1.0/docs_src/security/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/security/tutorial001_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/security/tutorial001_py310.py +11 -0
- notslowapi-0.1.0/docs_src/security/tutorial002_an_py310.py +32 -0
- notslowapi-0.1.0/docs_src/security/tutorial002_py310.py +30 -0
- notslowapi-0.1.0/docs_src/security/tutorial003_an_py310.py +94 -0
- notslowapi-0.1.0/docs_src/security/tutorial003_py310.py +88 -0
- notslowapi-0.1.0/docs_src/security/tutorial004_an_py310.py +150 -0
- notslowapi-0.1.0/docs_src/security/tutorial004_py310.py +143 -0
- notslowapi-0.1.0/docs_src/security/tutorial005_an_py310.py +182 -0
- notslowapi-0.1.0/docs_src/security/tutorial005_py310.py +179 -0
- notslowapi-0.1.0/docs_src/security/tutorial006_an_py310.py +13 -0
- notslowapi-0.1.0/docs_src/security/tutorial006_py310.py +11 -0
- notslowapi-0.1.0/docs_src/security/tutorial007_an_py310.py +36 -0
- notslowapi-0.1.0/docs_src/security/tutorial007_py310.py +33 -0
- notslowapi-0.1.0/docs_src/separate_openapi_schemas/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/separate_openapi_schemas/tutorial001_py310.py +26 -0
- notslowapi-0.1.0/docs_src/separate_openapi_schemas/tutorial002_py310.py +26 -0
- notslowapi-0.1.0/docs_src/server_sent_events/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/server_sent_events/tutorial001_py310.py +43 -0
- notslowapi-0.1.0/docs_src/server_sent_events/tutorial002_py310.py +26 -0
- notslowapi-0.1.0/docs_src/server_sent_events/tutorial003_py310.py +17 -0
- notslowapi-0.1.0/docs_src/server_sent_events/tutorial004_py310.py +31 -0
- notslowapi-0.1.0/docs_src/server_sent_events/tutorial005_py310.py +19 -0
- notslowapi-0.1.0/docs_src/settings/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/settings/app01_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/settings/app01_py310/config.py +10 -0
- notslowapi-0.1.0/docs_src/settings/app01_py310/main.py +14 -0
- notslowapi-0.1.0/docs_src/settings/app02_an_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/settings/app02_an_py310/config.py +7 -0
- notslowapi-0.1.0/docs_src/settings/app02_an_py310/main.py +22 -0
- notslowapi-0.1.0/docs_src/settings/app02_an_py310/test_main.py +23 -0
- notslowapi-0.1.0/docs_src/settings/app02_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/settings/app02_py310/config.py +7 -0
- notslowapi-0.1.0/docs_src/settings/app02_py310/main.py +21 -0
- notslowapi-0.1.0/docs_src/settings/app02_py310/test_main.py +23 -0
- notslowapi-0.1.0/docs_src/settings/app03_an_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/settings/app03_an_py310/config.py +9 -0
- notslowapi-0.1.0/docs_src/settings/app03_an_py310/main.py +22 -0
- notslowapi-0.1.0/docs_src/settings/app03_py310/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/settings/app03_py310/config.py +9 -0
- notslowapi-0.1.0/docs_src/settings/app03_py310/main.py +21 -0
- notslowapi-0.1.0/docs_src/settings/tutorial001_py310.py +21 -0
- notslowapi-0.1.0/docs_src/sql_databases/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/sql_databases/tutorial001_an_py310.py +73 -0
- notslowapi-0.1.0/docs_src/sql_databases/tutorial001_py310.py +69 -0
- notslowapi-0.1.0/docs_src/sql_databases/tutorial002_an_py310.py +103 -0
- notslowapi-0.1.0/docs_src/sql_databases/tutorial002_py310.py +102 -0
- notslowapi-0.1.0/docs_src/static_files/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/static_files/tutorial001_py310.py +6 -0
- notslowapi-0.1.0/docs_src/stream_data/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/stream_data/tutorial001_py310.py +65 -0
- notslowapi-0.1.0/docs_src/stream_data/tutorial002_py310.py +54 -0
- notslowapi-0.1.0/docs_src/stream_json_lines/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/stream_json_lines/tutorial001_py310.py +42 -0
- notslowapi-0.1.0/docs_src/strict_content_type/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/strict_content_type/tutorial001_py310.py +14 -0
- notslowapi-0.1.0/docs_src/sub_applications/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/sub_applications/tutorial001_py310.py +19 -0
- notslowapi-0.1.0/docs_src/templates/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/templates/static/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/templates/static/styles.css +3 -0
- notslowapi-0.1.0/docs_src/templates/templates/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/templates/templates/item.html +9 -0
- notslowapi-0.1.0/docs_src/templates/tutorial001_py310.py +18 -0
- notslowapi-0.1.0/docs_src/using_request_directly/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/using_request_directly/tutorial001_py310.py +9 -0
- notslowapi-0.1.0/docs_src/websockets_/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/websockets_/tutorial001_py310.py +51 -0
- notslowapi-0.1.0/docs_src/websockets_/tutorial002_an_py310.py +92 -0
- notslowapi-0.1.0/docs_src/websockets_/tutorial002_py310.py +89 -0
- notslowapi-0.1.0/docs_src/websockets_/tutorial003_py310.py +81 -0
- notslowapi-0.1.0/docs_src/wsgi/__init__.py +0 -0
- notslowapi-0.1.0/docs_src/wsgi/tutorial001_py310.py +23 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/SKILL.md +321 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/dependencies.md +142 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/other-tools.md +76 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/path-operations.md +93 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/pydantic.md +93 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/responses.md +79 -0
- notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/streaming.md +105 -0
- notslowapi-0.1.0/notslowapi/__init__.py +27 -0
- notslowapi-0.1.0/notslowapi/__main__.py +3 -0
- notslowapi-0.1.0/notslowapi/_compat/__init__.py +40 -0
- notslowapi-0.1.0/notslowapi/_compat/shared.py +222 -0
- notslowapi-0.1.0/notslowapi/_compat/v2.py +504 -0
- notslowapi-0.1.0/notslowapi/applications.py +4778 -0
- notslowapi-0.1.0/notslowapi/background.py +61 -0
- notslowapi-0.1.0/notslowapi/cli.py +13 -0
- notslowapi-0.1.0/notslowapi/concurrency.py +45 -0
- notslowapi-0.1.0/notslowapi/datastructures.py +186 -0
- notslowapi-0.1.0/notslowapi/dependencies/__init__.py +0 -0
- notslowapi-0.1.0/notslowapi/dependencies/models.py +234 -0
- notslowapi-0.1.0/notslowapi/dependencies/utils.py +1057 -0
- notslowapi-0.1.0/notslowapi/encoders.py +394 -0
- notslowapi-0.1.0/notslowapi/exception_handlers.py +37 -0
- notslowapi-0.1.0/notslowapi/exceptions.py +258 -0
- notslowapi-0.1.0/notslowapi/logger.py +3 -0
- notslowapi-0.1.0/notslowapi/middleware/__init__.py +1 -0
- notslowapi-0.1.0/notslowapi/middleware/asyncexitstack.py +18 -0
- notslowapi-0.1.0/notslowapi/middleware/cors.py +1 -0
- notslowapi-0.1.0/notslowapi/middleware/exceptions.py +5 -0
- notslowapi-0.1.0/notslowapi/middleware/gzip.py +1 -0
- notslowapi-0.1.0/notslowapi/middleware/httpsredirect.py +3 -0
- notslowapi-0.1.0/notslowapi/middleware/trustedhost.py +3 -0
- notslowapi-0.1.0/notslowapi/middleware/wsgi.py +3 -0
- notslowapi-0.1.0/notslowapi/openapi/__init__.py +0 -0
- notslowapi-0.1.0/notslowapi/openapi/constants.py +3 -0
- notslowapi-0.1.0/notslowapi/openapi/docs.py +389 -0
- notslowapi-0.1.0/notslowapi/openapi/models.py +435 -0
- notslowapi-0.1.0/notslowapi/openapi/utils.py +679 -0
- notslowapi-0.1.0/notslowapi/param_functions.py +2460 -0
- notslowapi-0.1.0/notslowapi/params.py +754 -0
- notslowapi-0.1.0/notslowapi/py.typed +0 -0
- notslowapi-0.1.0/notslowapi/requests.py +2 -0
- notslowapi-0.1.0/notslowapi/responses.py +102 -0
- notslowapi-0.1.0/notslowapi/routing.py +6879 -0
- notslowapi-0.1.0/notslowapi/security/__init__.py +15 -0
- notslowapi-0.1.0/notslowapi/security/api_key.py +320 -0
- notslowapi-0.1.0/notslowapi/security/base.py +6 -0
- notslowapi-0.1.0/notslowapi/security/http.py +417 -0
- notslowapi-0.1.0/notslowapi/security/oauth2.py +693 -0
- notslowapi-0.1.0/notslowapi/security/open_id_connect_url.py +94 -0
- notslowapi-0.1.0/notslowapi/security/utils.py +7 -0
- notslowapi-0.1.0/notslowapi/sse.py +241 -0
- notslowapi-0.1.0/notslowapi/starlette/LICENSE.md +27 -0
- notslowapi-0.1.0/notslowapi/starlette/__init__.py +1 -0
- notslowapi-0.1.0/notslowapi/starlette/_exception_handler.py +105 -0
- notslowapi-0.1.0/notslowapi/starlette/_utils.py +160 -0
- notslowapi-0.1.0/notslowapi/starlette/applications.py +133 -0
- notslowapi-0.1.0/notslowapi/starlette/authentication.py +149 -0
- notslowapi-0.1.0/notslowapi/starlette/background.py +36 -0
- notslowapi-0.1.0/notslowapi/starlette/concurrency.py +59 -0
- notslowapi-0.1.0/notslowapi/starlette/config.py +140 -0
- notslowapi-0.1.0/notslowapi/starlette/convertors.py +89 -0
- notslowapi-0.1.0/notslowapi/starlette/datastructures.py +726 -0
- notslowapi-0.1.0/notslowapi/starlette/endpoints.py +127 -0
- notslowapi-0.1.0/notslowapi/starlette/exceptions.py +43 -0
- notslowapi-0.1.0/notslowapi/starlette/formparsers.py +301 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/__init__.py +37 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/authentication.py +52 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/base.py +244 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/body_limit.py +132 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/cors.py +179 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/errors.py +255 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/exception_handling.py +76 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/exceptions.py +67 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/gzip.py +222 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/httpsredirect.py +22 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/opentelemetry.py +116 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/sessions.py +134 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/trustedhost.py +66 -0
- notslowapi-0.1.0/notslowapi/starlette/middleware/wsgi.py +156 -0
- notslowapi-0.1.0/notslowapi/starlette/py.typed +0 -0
- notslowapi-0.1.0/notslowapi/starlette/requests.py +360 -0
- notslowapi-0.1.0/notslowapi/starlette/responses.py +593 -0
- notslowapi-0.1.0/notslowapi/starlette/routing.py +886 -0
- notslowapi-0.1.0/notslowapi/starlette/schemas.py +152 -0
- notslowapi-0.1.0/notslowapi/starlette/staticfiles.py +223 -0
- notslowapi-0.1.0/notslowapi/starlette/status.py +211 -0
- notslowapi-0.1.0/notslowapi/starlette/templating.py +156 -0
- notslowapi-0.1.0/notslowapi/starlette/testclient.py +558 -0
- notslowapi-0.1.0/notslowapi/starlette/types.py +26 -0
- notslowapi-0.1.0/notslowapi/starlette/websockets.py +202 -0
- notslowapi-0.1.0/notslowapi/staticfiles.py +1 -0
- notslowapi-0.1.0/notslowapi/templating.py +1 -0
- notslowapi-0.1.0/notslowapi/testclient.py +1 -0
- notslowapi-0.1.0/notslowapi/types.py +12 -0
- notslowapi-0.1.0/notslowapi/utils.py +136 -0
- notslowapi-0.1.0/notslowapi/websockets.py +3 -0
- notslowapi-0.1.0/pyproject.toml +429 -0
- notslowapi-0.1.0/scripts/add_latest_release_date.py +40 -0
- notslowapi-0.1.0/scripts/deploy_docs_status.py +149 -0
- notslowapi-0.1.0/scripts/doc_parsing_utils.py +733 -0
- notslowapi-0.1.0/scripts/docs.py +919 -0
- notslowapi-0.1.0/scripts/format.sh +5 -0
- notslowapi-0.1.0/scripts/general-llm-prompt.md +518 -0
- notslowapi-0.1.0/scripts/label_approved.py +60 -0
- notslowapi-0.1.0/scripts/lint.sh +9 -0
- notslowapi-0.1.0/scripts/notify_translations.py +433 -0
- notslowapi-0.1.0/scripts/playwright/cookie_param_models/image01.py +39 -0
- notslowapi-0.1.0/scripts/playwright/header_param_models/image01.py +38 -0
- notslowapi-0.1.0/scripts/playwright/json_base64_bytes/image01.py +37 -0
- notslowapi-0.1.0/scripts/playwright/query_param_models/image01.py +41 -0
- notslowapi-0.1.0/scripts/playwright/request_form_models/image01.py +38 -0
- notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image01.py +32 -0
- notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image02.py +33 -0
- notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image03.py +33 -0
- notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image04.py +32 -0
- notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image05.py +32 -0
- notslowapi-0.1.0/scripts/playwright/sql_databases/image01.py +37 -0
- notslowapi-0.1.0/scripts/playwright/sql_databases/image02.py +37 -0
- notslowapi-0.1.0/scripts/prepare_release.py +216 -0
- notslowapi-0.1.0/scripts/ruff-starlette.toml +14 -0
- notslowapi-0.1.0/scripts/sponsors.py +222 -0
- notslowapi-0.1.0/scripts/test-cov-html.sh +6 -0
- notslowapi-0.1.0/scripts/test-cov.sh +6 -0
- notslowapi-0.1.0/scripts/test.sh +7 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/conftest.py +62 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/en_doc.md +44 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_lines_number_gt.md +45 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_lines_number_lt.md +45 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_mermaid_not_translated.md +44 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_mermaid_translated.md +44 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_number_gt.md +50 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_number_lt.md +41 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_wrong_lang_code.md +46 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_wrong_lang_code_2.md +46 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_lines_number_mismatch.py +58 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_mermaid.py +59 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_number_mismatch.py +60 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_wrong_lang_code.py +58 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/data/en_doc.md +13 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/data/translated_doc_number_gt.md +15 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/data/translated_doc_number_lt.md +13 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/test_number_mismatch.py +60 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/data/en_doc.md +244 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/data/translated_doc.md +240 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/data/translated_doc_expected.md +240 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/test_compex_doc.py +30 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/en_doc.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_level_mismatch_1.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_level_mismatch_2.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_number_gt.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_number_lt.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/test_header_level_mismatch.py +60 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/test_header_number_mismatch.py +60 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/data/en_doc.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/data/translated_doc_number_gt.md +21 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/data/translated_doc_number_lt.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/test_html_links_number_mismatch.py +58 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/en_doc.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/translated_doc.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/translated_doc_number_gt.md +21 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/translated_doc_number_lt.md +19 -0
- notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/test_mkd_links_number_mismatch.py +60 -0
- notslowapi-0.1.0/scripts/topic_repos.py +81 -0
- notslowapi-0.1.0/scripts/translate.py +486 -0
- notslowapi-0.1.0/scripts/translation_fixer.py +133 -0
- notslowapi-0.1.0/scripts/translation_git.py +47 -0
- notslowapi-0.1.0/tests/__init__.py +0 -0
- notslowapi-0.1.0/tests/benchmarks/__init__.py +0 -0
- notslowapi-0.1.0/tests/benchmarks/test_general_performance.py +399 -0
- notslowapi-0.1.0/tests/benchmarks/test_openapi.py +33 -0
- notslowapi-0.1.0/tests/benchmarks/utils.py +51 -0
- notslowapi-0.1.0/tests/forward_reference_type.py +9 -0
- notslowapi-0.1.0/tests/main.py +208 -0
- notslowapi-0.1.0/tests/memory_benchmarks/__init__.py +0 -0
- notslowapi-0.1.0/tests/memory_benchmarks/test_dependency_graph.py +86 -0
- notslowapi-0.1.0/tests/memory_benchmarks/test_openapi.py +33 -0
- notslowapi-0.1.0/tests/memory_benchmarks/test_route_dependency_graph.py +64 -0
- notslowapi-0.1.0/tests/starlette/__init__.py +0 -0
- notslowapi-0.1.0/tests/starlette/conftest.py +23 -0
- notslowapi-0.1.0/tests/starlette/middleware/__init__.py +0 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_base.py +1318 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_body_limit.py +368 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_cors.py +567 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_errors.py +105 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_gzip.py +426 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_https_redirect.py +78 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_middleware.py +22 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_opentelemetry.py +499 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_session.py +335 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_trusted_host.py +98 -0
- notslowapi-0.1.0/tests/starlette/middleware/test_wsgi.py +164 -0
- notslowapi-0.1.0/tests/starlette/statics/example.txt +1 -0
- notslowapi-0.1.0/tests/starlette/test__utils.py +135 -0
- notslowapi-0.1.0/tests/starlette/test_applications.py +563 -0
- notslowapi-0.1.0/tests/starlette/test_authentication.py +361 -0
- notslowapi-0.1.0/tests/starlette/test_background.py +89 -0
- notslowapi-0.1.0/tests/starlette/test_concurrency.py +55 -0
- notslowapi-0.1.0/tests/starlette/test_config.py +148 -0
- notslowapi-0.1.0/tests/starlette/test_convertors.py +96 -0
- notslowapi-0.1.0/tests/starlette/test_datastructures.py +600 -0
- notslowapi-0.1.0/tests/starlette/test_endpoints.py +187 -0
- notslowapi-0.1.0/tests/starlette/test_exceptions.py +224 -0
- notslowapi-0.1.0/tests/starlette/test_formparsers.py +1065 -0
- notslowapi-0.1.0/tests/starlette/test_requests.py +671 -0
- notslowapi-0.1.0/tests/starlette/test_responses.py +1044 -0
- notslowapi-0.1.0/tests/starlette/test_routing.py +1240 -0
- notslowapi-0.1.0/tests/starlette/test_schemas.py +313 -0
- notslowapi-0.1.0/tests/starlette/test_staticfiles.py +654 -0
- notslowapi-0.1.0/tests/starlette/test_status.py +32 -0
- notslowapi-0.1.0/tests/starlette/test_templates.py +176 -0
- notslowapi-0.1.0/tests/starlette/test_testclient.py +492 -0
- notslowapi-0.1.0/tests/starlette/test_websockets.py +653 -0
- notslowapi-0.1.0/tests/starlette/types.py +26 -0
- notslowapi-0.1.0/tests/test_additional_properties.py +114 -0
- notslowapi-0.1.0/tests/test_additional_properties_bool.py +125 -0
- notslowapi-0.1.0/tests/test_additional_response_extra.py +52 -0
- notslowapi-0.1.0/tests/test_additional_responses_bad.py +40 -0
- notslowapi-0.1.0/tests/test_additional_responses_custom_model_in_callback.py +147 -0
- notslowapi-0.1.0/tests/test_additional_responses_custom_validationerror.py +100 -0
- notslowapi-0.1.0/tests/test_additional_responses_default_validationerror.py +91 -0
- notslowapi-0.1.0/tests/test_additional_responses_response_class.py +117 -0
- notslowapi-0.1.0/tests/test_additional_responses_router.py +182 -0
- notslowapi-0.1.0/tests/test_additional_responses_union_duplicate_anyof.py +124 -0
- notslowapi-0.1.0/tests/test_allow_inf_nan_in_enforcing.py +84 -0
- notslowapi-0.1.0/tests/test_ambiguous_params.py +74 -0
- notslowapi-0.1.0/tests/test_annotated.py +298 -0
- notslowapi-0.1.0/tests/test_application.py +1285 -0
- notslowapi-0.1.0/tests/test_arbitrary_types.py +135 -0
- notslowapi-0.1.0/tests/test_callable_endpoint.py +24 -0
- notslowapi-0.1.0/tests/test_compat.py +140 -0
- notslowapi-0.1.0/tests/test_computed_fields.py +108 -0
- notslowapi-0.1.0/tests/test_custom_middleware_exception.py +96 -0
- notslowapi-0.1.0/tests/test_custom_route_class.py +116 -0
- notslowapi-0.1.0/tests/test_custom_schema_fields.py +62 -0
- notslowapi-0.1.0/tests/test_custom_swagger_ui_redirect.py +38 -0
- notslowapi-0.1.0/tests/test_datastructures.py +66 -0
- notslowapi-0.1.0/tests/test_datetime_custom_encoder.py +28 -0
- notslowapi-0.1.0/tests/test_default_response_class.py +222 -0
- notslowapi-0.1.0/tests/test_default_response_class_router.py +206 -0
- notslowapi-0.1.0/tests/test_dependencies_utils.py +8 -0
- notslowapi-0.1.0/tests/test_dependency_after_yield_raise.py +68 -0
- notslowapi-0.1.0/tests/test_dependency_after_yield_streaming.py +130 -0
- notslowapi-0.1.0/tests/test_dependency_after_yield_websockets.py +79 -0
- notslowapi-0.1.0/tests/test_dependency_cache.py +91 -0
- notslowapi-0.1.0/tests/test_dependency_class.py +154 -0
- notslowapi-0.1.0/tests/test_dependency_contextmanager.py +399 -0
- notslowapi-0.1.0/tests/test_dependency_contextvars.py +52 -0
- notslowapi-0.1.0/tests/test_dependency_duplicates.py +237 -0
- notslowapi-0.1.0/tests/test_dependency_models.py +204 -0
- notslowapi-0.1.0/tests/test_dependency_overrides.py +389 -0
- notslowapi-0.1.0/tests/test_dependency_paramless.py +77 -0
- notslowapi-0.1.0/tests/test_dependency_partial.py +251 -0
- notslowapi-0.1.0/tests/test_dependency_pep695.py +27 -0
- notslowapi-0.1.0/tests/test_dependency_security_overrides.py +63 -0
- notslowapi-0.1.0/tests/test_dependency_wrapped.py +449 -0
- notslowapi-0.1.0/tests/test_dependency_yield_except_httpexception.py +72 -0
- notslowapi-0.1.0/tests/test_dependency_yield_scope.py +245 -0
- notslowapi-0.1.0/tests/test_dependency_yield_scope_websockets.py +200 -0
- notslowapi-0.1.0/tests/test_depends_hashable.py +25 -0
- notslowapi-0.1.0/tests/test_deprecated_openapi_prefix.py +45 -0
- notslowapi-0.1.0/tests/test_deprecated_responses.py +79 -0
- notslowapi-0.1.0/tests/test_dump_json_fast_path.py +51 -0
- notslowapi-0.1.0/tests/test_duplicate_models_openapi.py +84 -0
- notslowapi-0.1.0/tests/test_empty_router.py +36 -0
- notslowapi-0.1.0/tests/test_enforce_once_required_parameter.py +115 -0
- notslowapi-0.1.0/tests/test_exception_handlers.py +88 -0
- notslowapi-0.1.0/tests/test_extra_routes.py +370 -0
- notslowapi-0.1.0/tests/test_fastapi_cli.py +34 -0
- notslowapi-0.1.0/tests/test_file_and_form_order_issue_9116.py +89 -0
- notslowapi-0.1.0/tests/test_filter_pydantic_sub_model_pv2.py +182 -0
- notslowapi-0.1.0/tests/test_form_default.py +34 -0
- notslowapi-0.1.0/tests/test_forms_from_non_typing_sequences.py +46 -0
- notslowapi-0.1.0/tests/test_forms_single_model.py +141 -0
- notslowapi-0.1.0/tests/test_forms_single_param.py +109 -0
- notslowapi-0.1.0/tests/test_frontend.py +1406 -0
- notslowapi-0.1.0/tests/test_generate_unique_id_function.py +1699 -0
- notslowapi-0.1.0/tests/test_generic_parameterless_depends.py +79 -0
- notslowapi-0.1.0/tests/test_get_model_definitions_formfeed_escape.py +160 -0
- notslowapi-0.1.0/tests/test_get_request_body.py +114 -0
- notslowapi-0.1.0/tests/test_http_connection_injection.py +39 -0
- notslowapi-0.1.0/tests/test_include_route.py +22 -0
- notslowapi-0.1.0/tests/test_include_router_defaults_overrides.py +7304 -0
- notslowapi-0.1.0/tests/test_infer_param_optionality.py +337 -0
- notslowapi-0.1.0/tests/test_inherited_custom_class.py +67 -0
- notslowapi-0.1.0/tests/test_invalid_path_param.py +75 -0
- notslowapi-0.1.0/tests/test_invalid_sequence_param.py +63 -0
- notslowapi-0.1.0/tests/test_json_type.py +63 -0
- notslowapi-0.1.0/tests/test_jsonable_encoder.py +345 -0
- notslowapi-0.1.0/tests/test_list_bytes_file_order_preserved_issue_14811.py +46 -0
- notslowapi-0.1.0/tests/test_local_docs.py +67 -0
- notslowapi-0.1.0/tests/test_modules_same_name_body/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_modules_same_name_body/app/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_modules_same_name_body/app/a.py +8 -0
- notslowapi-0.1.0/tests/test_modules_same_name_body/app/b.py +8 -0
- notslowapi-0.1.0/tests/test_modules_same_name_body/app/main.py +8 -0
- notslowapi-0.1.0/tests/test_modules_same_name_body/test_main.py +156 -0
- notslowapi-0.1.0/tests/test_multi_body_errors.py +191 -0
- notslowapi-0.1.0/tests/test_multi_query_errors.py +122 -0
- notslowapi-0.1.0/tests/test_multipart_installation.py +149 -0
- notslowapi-0.1.0/tests/test_nested_annotated_in_sequence.py +143 -0
- notslowapi-0.1.0/tests/test_no_schema_split.py +176 -0
- notslowapi-0.1.0/tests/test_no_swagger_ui_redirect.py +31 -0
- notslowapi-0.1.0/tests/test_openapi_cache_root_path.py +75 -0
- notslowapi-0.1.0/tests/test_openapi_examples.py +422 -0
- notslowapi-0.1.0/tests/test_openapi_model_description_trim_on_formfeed.py +31 -0
- notslowapi-0.1.0/tests/test_openapi_query_parameter_extension.py +131 -0
- notslowapi-0.1.0/tests/test_openapi_route_extensions.py +45 -0
- notslowapi-0.1.0/tests/test_openapi_schema_type.py +24 -0
- notslowapi-0.1.0/tests/test_openapi_separate_input_output_schemas.py +676 -0
- notslowapi-0.1.0/tests/test_openapi_servers.py +60 -0
- notslowapi-0.1.0/tests/test_operations_signatures.py +22 -0
- notslowapi-0.1.0/tests/test_optional_file_list.py +28 -0
- notslowapi-0.1.0/tests/test_orjson_response_class.py +32 -0
- notslowapi-0.1.0/tests/test_param_class.py +25 -0
- notslowapi-0.1.0/tests/test_param_in_path_and_dependency.py +99 -0
- notslowapi-0.1.0/tests/test_param_include_in_schema.py +246 -0
- notslowapi-0.1.0/tests/test_params_repr.py +114 -0
- notslowapi-0.1.0/tests/test_path.py +780 -0
- notslowapi-0.1.0/tests/test_prepare_release.py +309 -0
- notslowapi-0.1.0/tests/test_put_no_body.py +103 -0
- notslowapi-0.1.0/tests/test_pydantic_v1_error.py +96 -0
- notslowapi-0.1.0/tests/test_pydanticv2_dataclasses_uuid_stringified_annotations.py +51 -0
- notslowapi-0.1.0/tests/test_query.py +277 -0
- notslowapi-0.1.0/tests/test_query_cookie_header_model_extra_params.py +140 -0
- notslowapi-0.1.0/tests/test_read_with_orm_mode.py +43 -0
- notslowapi-0.1.0/tests/test_regex_deprecated_body.py +154 -0
- notslowapi-0.1.0/tests/test_regex_deprecated_params.py +146 -0
- notslowapi-0.1.0/tests/test_repeated_cookie_headers.py +34 -0
- notslowapi-0.1.0/tests/test_repeated_dependency_schema.py +109 -0
- notslowapi-0.1.0/tests/test_repeated_parameter_alias.py +106 -0
- notslowapi-0.1.0/tests/test_request_body_parameters_media_type.py +184 -0
- notslowapi-0.1.0/tests/test_request_param_model_by_alias.py +72 -0
- notslowapi-0.1.0/tests/test_request_params/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_body/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_body/test_list.py +433 -0
- notslowapi-0.1.0/tests/test_request_params/test_body/test_optional_list.py +454 -0
- notslowapi-0.1.0/tests/test_request_params/test_body/test_optional_str.py +429 -0
- notslowapi-0.1.0/tests/test_request_params/test_body/test_required_str.py +419 -0
- notslowapi-0.1.0/tests/test_request_params/test_body/utils.py +7 -0
- notslowapi-0.1.0/tests/test_request_params/test_cookie/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_cookie/test_list.py +3 -0
- notslowapi-0.1.0/tests/test_request_params/test_cookie/test_optional_list.py +3 -0
- notslowapi-0.1.0/tests/test_request_params/test_cookie/test_optional_str.py +336 -0
- notslowapi-0.1.0/tests/test_request_params/test_cookie/test_required_str.py +422 -0
- notslowapi-0.1.0/tests/test_request_params/test_file/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_file/test_list.py +453 -0
- notslowapi-0.1.0/tests/test_request_params/test_file/test_optional.py +363 -0
- notslowapi-0.1.0/tests/test_request_params/test_file/test_optional_list.py +383 -0
- notslowapi-0.1.0/tests/test_request_params/test_file/test_required.py +437 -0
- notslowapi-0.1.0/tests/test_request_params/test_file/utils.py +7 -0
- notslowapi-0.1.0/tests/test_request_params/test_form/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_form/test_list.py +436 -0
- notslowapi-0.1.0/tests/test_request_params/test_form/test_optional_list.py +358 -0
- notslowapi-0.1.0/tests/test_request_params/test_form/test_optional_str.py +337 -0
- notslowapi-0.1.0/tests/test_request_params/test_form/test_required_str.py +415 -0
- notslowapi-0.1.0/tests/test_request_params/test_form/utils.py +7 -0
- notslowapi-0.1.0/tests/test_request_params/test_header/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_header/test_list.py +427 -0
- notslowapi-0.1.0/tests/test_request_params/test_header/test_optional_list.py +352 -0
- notslowapi-0.1.0/tests/test_request_params/test_header/test_optional_str.py +328 -0
- notslowapi-0.1.0/tests/test_request_params/test_header/test_required_str.py +411 -0
- notslowapi-0.1.0/tests/test_request_params/test_path/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_path/test_list.py +1 -0
- notslowapi-0.1.0/tests/test_request_params/test_path/test_optional_list.py +1 -0
- notslowapi-0.1.0/tests/test_request_params/test_path/test_optional_str.py +1 -0
- notslowapi-0.1.0/tests/test_request_params/test_path/test_required_str.py +88 -0
- notslowapi-0.1.0/tests/test_request_params/test_query/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_request_params/test_query/test_list.py +428 -0
- notslowapi-0.1.0/tests/test_request_params/test_query/test_optional_list.py +348 -0
- notslowapi-0.1.0/tests/test_request_params/test_query/test_optional_str.py +328 -0
- notslowapi-0.1.0/tests/test_request_params/test_query/test_required_str.py +414 -0
- notslowapi-0.1.0/tests/test_required_noneable.py +60 -0
- notslowapi-0.1.0/tests/test_response_by_alias.py +330 -0
- notslowapi-0.1.0/tests/test_response_change_status_code.py +26 -0
- notslowapi-0.1.0/tests/test_response_class_no_mediatype.py +114 -0
- notslowapi-0.1.0/tests/test_response_code_no_body.py +115 -0
- notslowapi-0.1.0/tests/test_response_dependency.py +173 -0
- notslowapi-0.1.0/tests/test_response_model_as_return_annotation.py +1121 -0
- notslowapi-0.1.0/tests/test_response_model_data_filter.py +79 -0
- notslowapi-0.1.0/tests/test_response_model_data_filter_no_inheritance.py +81 -0
- notslowapi-0.1.0/tests/test_response_model_default_factory.py +47 -0
- notslowapi-0.1.0/tests/test_response_model_include_exclude.py +175 -0
- notslowapi-0.1.0/tests/test_response_model_invalid.py +43 -0
- notslowapi-0.1.0/tests/test_response_model_sub_types.py +161 -0
- notslowapi-0.1.0/tests/test_response_set_response_code_empty.py +104 -0
- notslowapi-0.1.0/tests/test_return_none_stringified_annotations.py +17 -0
- notslowapi-0.1.0/tests/test_route_scope.py +50 -0
- notslowapi-0.1.0/tests/test_router_circular_import.py +12 -0
- notslowapi-0.1.0/tests/test_router_events.py +378 -0
- notslowapi-0.1.0/tests/test_router_include_context.py +1083 -0
- notslowapi-0.1.0/tests/test_router_prefix_with_template.py +23 -0
- notslowapi-0.1.0/tests/test_router_redirect_slashes.py +40 -0
- notslowapi-0.1.0/tests/test_schema_compat_pydantic_v2.py +121 -0
- notslowapi-0.1.0/tests/test_schema_extra_examples.py +857 -0
- notslowapi-0.1.0/tests/test_schema_ref_pydantic_v2.py +68 -0
- notslowapi-0.1.0/tests/test_security_api_key_cookie.py +70 -0
- notslowapi-0.1.0/tests/test_security_api_key_cookie_description.py +75 -0
- notslowapi-0.1.0/tests/test_security_api_key_cookie_optional.py +74 -0
- notslowapi-0.1.0/tests/test_security_api_key_header.py +70 -0
- notslowapi-0.1.0/tests/test_security_api_key_header_description.py +75 -0
- notslowapi-0.1.0/tests/test_security_api_key_header_optional.py +73 -0
- notslowapi-0.1.0/tests/test_security_api_key_query.py +70 -0
- notslowapi-0.1.0/tests/test_security_api_key_query_description.py +75 -0
- notslowapi-0.1.0/tests/test_security_api_key_query_optional.py +73 -0
- notslowapi-0.1.0/tests/test_security_http_base.py +64 -0
- notslowapi-0.1.0/tests/test_security_http_base_description.py +64 -0
- notslowapi-0.1.0/tests/test_security_http_base_optional.py +61 -0
- notslowapi-0.1.0/tests/test_security_http_basic_optional.py +79 -0
- notslowapi-0.1.0/tests/test_security_http_basic_realm.py +78 -0
- notslowapi-0.1.0/tests/test_security_http_basic_realm_description.py +84 -0
- notslowapi-0.1.0/tests/test_security_http_bearer.py +65 -0
- notslowapi-0.1.0/tests/test_security_http_bearer_description.py +71 -0
- notslowapi-0.1.0/tests/test_security_http_bearer_optional.py +67 -0
- notslowapi-0.1.0/tests/test_security_http_digest.py +67 -0
- notslowapi-0.1.0/tests/test_security_http_digest_description.py +73 -0
- notslowapi-0.1.0/tests/test_security_http_digest_optional.py +69 -0
- notslowapi-0.1.0/tests/test_security_oauth2.py +280 -0
- notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer.py +82 -0
- notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer_description.py +80 -0
- notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer_scopes_openapi.py +197 -0
- notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer_scopes_openapi_simple.py +80 -0
- notslowapi-0.1.0/tests/test_security_oauth2_optional.py +281 -0
- notslowapi-0.1.0/tests/test_security_oauth2_optional_description.py +283 -0
- notslowapi-0.1.0/tests/test_security_oauth2_password_bearer_optional.py +70 -0
- notslowapi-0.1.0/tests/test_security_oauth2_password_bearer_optional_description.py +75 -0
- notslowapi-0.1.0/tests/test_security_openid_connect.py +79 -0
- notslowapi-0.1.0/tests/test_security_openid_connect_description.py +82 -0
- notslowapi-0.1.0/tests/test_security_openid_connect_optional.py +82 -0
- notslowapi-0.1.0/tests/test_security_scopes.py +45 -0
- notslowapi-0.1.0/tests/test_security_scopes_dont_propagate.py +44 -0
- notslowapi-0.1.0/tests/test_security_scopes_sub_dependency.py +107 -0
- notslowapi-0.1.0/tests/test_serialize_response.py +55 -0
- notslowapi-0.1.0/tests/test_serialize_response_dataclass.py +193 -0
- notslowapi-0.1.0/tests/test_serialize_response_model.py +152 -0
- notslowapi-0.1.0/tests/test_skip_defaults.py +125 -0
- notslowapi-0.1.0/tests/test_sse.py +490 -0
- notslowapi-0.1.0/tests/test_starlette_exception.py +209 -0
- notslowapi-0.1.0/tests/test_starlette_urlconvertors.py +63 -0
- notslowapi-0.1.0/tests/test_stream_bare_type.py +74 -0
- notslowapi-0.1.0/tests/test_stream_cancellation.py +89 -0
- notslowapi-0.1.0/tests/test_stream_json_validation_error.py +40 -0
- notslowapi-0.1.0/tests/test_stream_status_code.py +452 -0
- notslowapi-0.1.0/tests/test_strict_content_type_app_level.py +44 -0
- notslowapi-0.1.0/tests/test_strict_content_type_nested.py +91 -0
- notslowapi-0.1.0/tests/test_strict_content_type_router_level.py +61 -0
- notslowapi-0.1.0/tests/test_stringified_annotation_dependency.py +79 -0
- notslowapi-0.1.0/tests/test_stringified_annotation_dependency_py314.py +30 -0
- notslowapi-0.1.0/tests/test_stringified_annotations_simple.py +27 -0
- notslowapi-0.1.0/tests/test_sub_callbacks.py +306 -0
- notslowapi-0.1.0/tests/test_swagger_ui_escape.py +37 -0
- notslowapi-0.1.0/tests/test_swagger_ui_init_oauth.py +28 -0
- notslowapi-0.1.0/tests/test_top_level_security_scheme_in_openapi.py +60 -0
- notslowapi-0.1.0/tests/test_translate.py +63 -0
- notslowapi-0.1.0/tests/test_tuples.py +276 -0
- notslowapi-0.1.0/tests/test_tutorial/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial001.py +127 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial002.py +140 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial003.py +131 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial004.py +143 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_status_codes/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_additional_status_codes/test_tutorial001.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/test_tutorial001.py +14 -0
- notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/test_tutorial002.py +15 -0
- notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/test_tutorial003.py +22 -0
- notslowapi-0.1.0/tests/test_tutorial/test_async_tests/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_async_tests/test_main_a.py +8 -0
- notslowapi-0.1.0/tests/test_tutorial/test_authentication_error_status_code/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_authentication_error_status_code/test_tutorial001.py +66 -0
- notslowapi-0.1.0/tests/test_tutorial/test_background_tasks/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_background_tasks/test_tutorial001.py +21 -0
- notslowapi-0.1.0/tests/test_tutorial/test_background_tasks/test_tutorial002.py +34 -0
- notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial001.py +38 -0
- notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial001_01.py +21 -0
- notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial002.py +38 -0
- notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial003.py +48 -0
- notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial004.py +47 -0
- notslowapi-0.1.0/tests/test_tutorial/test_bigger_applications/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_bigger_applications/test_main.py +606 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial001.py +346 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial002.py +166 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial003.py +177 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial004.py +188 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_fields/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_fields/test_tutorial001.py +189 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial001.py +185 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial002.py +368 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial003.py +225 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial004.py +295 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial005.py +275 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial001_tutorial002_tutorial003.py +256 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial004.py +281 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial005.py +307 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial006.py +275 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial007.py +350 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial008.py +164 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial009.py +123 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_updates/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_updates/test_tutorial001.py +192 -0
- notslowapi-0.1.0/tests/test_tutorial/test_body_updates/test_tutorial002.py +213 -0
- notslowapi-0.1.0/tests/test_tutorial/test_conditional_openapi/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_conditional_openapi/test_tutorial001.py +61 -0
- notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/test_tutorial001.py +41 -0
- notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/test_tutorial002.py +44 -0
- notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/test_tutorial003.py +44 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cookie_param_models/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cookie_param_models/test_tutorial001.py +171 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cookie_param_models/test_tutorial002.py +181 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cookie_params/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cookie_params/test_tutorial001.py +124 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cors/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_cors/test_tutorial001.py +37 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_docs_ui/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_docs_ui/test_tutorial001.py +48 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_docs_ui/test_tutorial002.py +48 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/test_tutorial001.py +46 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py +44 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/test_tutorial003.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial001.py +52 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial001b.py +47 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial002_tutorial003_tutorial004.py +71 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial005.py +39 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial006.py +37 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial006b.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial006c.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial007.py +11 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial008.py +18 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial009.py +18 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial009b.py +18 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial009c.py +13 -0
- notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial010.py +50 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/test_tutorial001.py +142 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/test_tutorial002.py +88 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/test_tutorial003.py +210 -0
- notslowapi-0.1.0/tests/test_tutorial/test_debugging/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_debugging/test_tutorial001.py +65 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial001_tutorial001_02.py +192 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial002_tutorial003_tutorial004.py +180 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial005.py +144 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial006.py +150 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial007.py +24 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008.py +64 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008b.py +36 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008c.py +47 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008d.py +48 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008e.py +24 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial010.py +29 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial011.py +127 -0
- notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial012.py +233 -0
- notslowapi-0.1.0/tests/test_tutorial/test_encoder/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_encoder/test_tutorial001.py +212 -0
- notslowapi-0.1.0/tests/test_tutorial/test_events/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_events/test_tutorial001.py +100 -0
- notslowapi-0.1.0/tests/test_tutorial/test_events/test_tutorial002.py +50 -0
- notslowapi-0.1.0/tests/test_tutorial/test_events/test_tutorial003.py +100 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extending_openapi/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extending_openapi/test_tutorial001.py +50 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_data_types/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_data_types/test_tutorial001.py +163 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_models/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial001_tutorial002.py +161 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial003.py +158 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial004.py +75 -0
- notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial005.py +57 -0
- notslowapi-0.1.0/tests/test_tutorial/test_first_steps/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_first_steps/test_tutorial001_tutorial002_tutorial003.py +56 -0
- notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial001.py +153 -0
- notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial002.py +198 -0
- notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial003.py +198 -0
- notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial004.py +236 -0
- notslowapi-0.1.0/tests/test_tutorial/test_graphql/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_graphql/test_tutorial001.py +73 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial001.py +97 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial002.py +97 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial003.py +98 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial004.py +103 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial005.py +116 -0
- notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial006.py +111 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/test_tutorial001.py +210 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/test_tutorial002.py +204 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/test_tutorial003.py +249 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_params/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_params/test_tutorial001.py +116 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_params/test_tutorial002.py +127 -0
- notslowapi-0.1.0/tests/test_tutorial/test_header_params/test_tutorial003.py +124 -0
- notslowapi-0.1.0/tests/test_tutorial/test_json_base64_bytes/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_json_base64_bytes/test_tutorial001.py +225 -0
- notslowapi-0.1.0/tests/test_tutorial/test_metadata/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial001.py +52 -0
- notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial001_1.py +52 -0
- notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial002.py +45 -0
- notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial003.py +56 -0
- notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial004.py +66 -0
- notslowapi-0.1.0/tests/test_tutorial/test_middleware/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_middleware/test_tutorial001.py +27 -0
- notslowapi-0.1.0/tests/test_tutorial/test_openapi_callbacks/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_openapi_callbacks/test_tutorial001.py +208 -0
- notslowapi-0.1.0/tests/test_tutorial/test_openapi_webhooks/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_openapi_webhooks/test_tutorial001.py +129 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial001.py +37 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial002.py +37 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial003.py +24 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial004.py +142 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial005.py +37 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial006.py +60 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial007.py +118 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial001.py +190 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial002.py +227 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial002b.py +57 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial003_tutorial004.py +211 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial005.py +141 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial006.py +74 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial001.py +121 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial002.py +129 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial003.py +138 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial003b.py +47 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial004.py +98 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial005.py +123 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial001.py +167 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial002_tutorial003.py +175 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial004.py +190 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial005.py +207 -0
- notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial006.py +226 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial001_tutorial002.py +18 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial003.py +12 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial004.py +5 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial005.py +12 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial006.py +16 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial007.py +8 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial008.py +17 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial008b.py +27 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial009_tutorial009b.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial010.py +5 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial011.py +24 -0
- notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial013.py +5 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_param_models/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_param_models/test_tutorial001.py +227 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_param_models/test_tutorial002.py +233 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial001.py +133 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial002.py +133 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial003.py +154 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial004.py +162 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial005.py +111 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial006.py +161 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial001.py +127 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial002.py +147 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial003.py +158 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial004.py +143 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial005.py +138 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial006.py +143 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial006c.py +153 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial007.py +141 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial008.py +143 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial009.py +128 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial010.py +158 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial011.py +121 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial012.py +118 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial013.py +118 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial014.py +105 -0
- notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial015.py +143 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_files/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial001.py +216 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial001_02.py +196 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial001_03.py +177 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial002.py +254 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial003.py +226 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_form_models/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_form_models/test_tutorial001.py +184 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_form_models/test_tutorial002.py +202 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_forms/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_forms/test_tutorial001.py +186 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_forms_and_files/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_request_forms_and_files/test_tutorial001.py +245 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_change_status_code/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_change_status_code/test_tutorial001.py +15 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_cookies/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_cookies/test_tutorial001.py +12 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_cookies/test_tutorial002.py +12 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_directly/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_directly/test_tutorial001.py +156 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_directly/test_tutorial002.py +68 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_headers/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_headers/test_tutorial001.py +13 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_headers/test_tutorial002.py +12 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial001_tutorial001_01.py +200 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial002.py +137 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003.py +157 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_01.py +157 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_02.py +100 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_03.py +37 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_04.py +17 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_05.py +114 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial004.py +148 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial005.py +166 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial006.py +166 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_status_code/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_response_status_code/test_tutorial001_tutorial002.py +103 -0
- notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial001.py +144 -0
- notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial002.py +146 -0
- notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial003.py +147 -0
- notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial004.py +152 -0
- notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial005.py +161 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial001.py +73 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial002.py +72 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial003.py +215 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial004.py +372 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial005.py +432 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial006.py +80 -0
- notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial007.py +92 -0
- notslowapi-0.1.0/tests/test_tutorial/test_separate_openapi_schemas/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_separate_openapi_schemas/test_tutorial001.py +148 -0
- notslowapi-0.1.0/tests/test_tutorial/test_separate_openapi_schemas/test_tutorial002.py +148 -0
- notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial001.py +191 -0
- notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial002.py +83 -0
- notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial003.py +73 -0
- notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial004.py +164 -0
- notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial005.py +141 -0
- notslowapi-0.1.0/tests/test_tutorial/test_settings/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_settings/test_app01.py +81 -0
- notslowapi-0.1.0/tests/test_tutorial/test_settings/test_app02.py +40 -0
- notslowapi-0.1.0/tests/test_tutorial/test_settings/test_app03.py +44 -0
- notslowapi-0.1.0/tests/test_tutorial/test_settings/test_tutorial001.py +23 -0
- notslowapi-0.1.0/tests/test_tutorial/test_sql_databases/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_sql_databases/test_tutorial001.py +360 -0
- notslowapi-0.1.0/tests/test_tutorial/test_sql_databases/test_tutorial002.py +441 -0
- notslowapi-0.1.0/tests/test_tutorial/test_static_files/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_static_files/test_tutorial001.py +48 -0
- notslowapi-0.1.0/tests/test_tutorial/test_stream_data/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_stream_data/test_tutorial001.py +154 -0
- notslowapi-0.1.0/tests/test_tutorial/test_stream_data/test_tutorial002.py +121 -0
- notslowapi-0.1.0/tests/test_tutorial/test_stream_json_lines/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_stream_json_lines/test_tutorial001.py +143 -0
- notslowapi-0.1.0/tests/test_tutorial/test_strict_content_type/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_strict_content_type/test_tutorial001.py +43 -0
- notslowapi-0.1.0/tests/test_tutorial/test_sub_applications/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_sub_applications/test_tutorial001.py +69 -0
- notslowapi-0.1.0/tests/test_tutorial/test_templates/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_templates/test_tutorial001.py +30 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/test_main_a.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/test_main_b.py +28 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial001.py +32 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial002.py +9 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial003.py +7 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial004.py +5 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing_dependencies/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_testing_dependencies/test_tutorial001.py +80 -0
- notslowapi-0.1.0/tests/test_tutorial/test_using_request_directly/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_using_request_directly/test_tutorial001.py +117 -0
- notslowapi-0.1.0/tests/test_tutorial/test_websockets/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_websockets/test_tutorial001.py +26 -0
- notslowapi-0.1.0/tests/test_tutorial/test_websockets/test_tutorial002.py +104 -0
- notslowapi-0.1.0/tests/test_tutorial/test_websockets/test_tutorial003.py +55 -0
- notslowapi-0.1.0/tests/test_tutorial/test_wsgi/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_tutorial/test_wsgi/test_tutorial001.py +17 -0
- notslowapi-0.1.0/tests/test_typing_python39.py +24 -0
- notslowapi-0.1.0/tests/test_union_body.py +134 -0
- notslowapi-0.1.0/tests/test_union_body_discriminator.py +204 -0
- notslowapi-0.1.0/tests/test_union_body_discriminator_annotated.py +203 -0
- notslowapi-0.1.0/tests/test_union_forms.py +163 -0
- notslowapi-0.1.0/tests/test_union_inherited_body.py +142 -0
- notslowapi-0.1.0/tests/test_validate_response.py +82 -0
- notslowapi-0.1.0/tests/test_validate_response_dataclass.py +51 -0
- notslowapi-0.1.0/tests/test_validate_response_recursive/__init__.py +0 -0
- notslowapi-0.1.0/tests/test_validate_response_recursive/app.py +47 -0
- notslowapi-0.1.0/tests/test_validate_response_recursive/test_validate_response_recursive.py +30 -0
- notslowapi-0.1.0/tests/test_validation_error_context.py +168 -0
- notslowapi-0.1.0/tests/test_webhooks_security.py +137 -0
- notslowapi-0.1.0/tests/test_wrapped_method_forward_reference.py +31 -0
- notslowapi-0.1.0/tests/test_ws_dependencies.py +72 -0
- notslowapi-0.1.0/tests/test_ws_router.py +271 -0
- notslowapi-0.1.0/tests/utils.py +29 -0
notslowapi-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018 Sebastián Ramírez
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: notslowapi
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: FastAPI, minus the slow. A fork of FastAPI that does less work per request, with the same API and test suite.
|
|
5
|
+
Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
|
|
6
|
+
Maintainer: 4thel00z
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
License-File: notslowapi/starlette/LICENSE.md
|
|
10
|
+
Classifier: Intended Audience :: Information Technology
|
|
11
|
+
Classifier: Intended Audience :: System Administrators
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python
|
|
15
|
+
Classifier: Topic :: Internet
|
|
16
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
+
Classifier: Topic :: Software Development
|
|
20
|
+
Classifier: Typing :: Typed
|
|
21
|
+
Classifier: Development Status :: 4 - Beta
|
|
22
|
+
Classifier: Environment :: Web Environment
|
|
23
|
+
Classifier: Framework :: AsyncIO
|
|
24
|
+
Classifier: Framework :: FastAPI
|
|
25
|
+
Classifier: Framework :: Pydantic
|
|
26
|
+
Classifier: Framework :: Pydantic :: 2
|
|
27
|
+
Classifier: Intended Audience :: Developers
|
|
28
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
29
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
30
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
31
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
32
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
33
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
34
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
35
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
36
|
+
Project-URL: Homepage, https://notslowapi.com
|
|
37
|
+
Project-URL: Documentation, https://notslowapi.com/docs/
|
|
38
|
+
Project-URL: Benchmarks, https://notslowapi.com/benchmarks/
|
|
39
|
+
Project-URL: Repository, https://github.com/4thel00z/notslowapi
|
|
40
|
+
Project-URL: Issues, https://github.com/4thel00z/notslowapi/issues
|
|
41
|
+
Project-URL: Changelog, https://github.com/4thel00z/notslowapi/releases
|
|
42
|
+
Requires-Python: >=3.10
|
|
43
|
+
Requires-Dist: anyio<5,>=3.6.2
|
|
44
|
+
Requires-Dist: pydantic>=2.9.0
|
|
45
|
+
Requires-Dist: typing-extensions>=4.8.0
|
|
46
|
+
Requires-Dist: typing-inspection>=0.4.2
|
|
47
|
+
Requires-Dist: annotated-doc>=0.0.2
|
|
48
|
+
Provides-Extra: granian
|
|
49
|
+
Requires-Dist: granian>=2.0; extra == "granian"
|
|
50
|
+
Provides-Extra: standard
|
|
51
|
+
Requires-Dist: httpx<1.0.0,>=0.23.0; extra == "standard"
|
|
52
|
+
Requires-Dist: jinja2>=3.1.5; extra == "standard"
|
|
53
|
+
Requires-Dist: python-multipart>=0.0.18; extra == "standard"
|
|
54
|
+
Requires-Dist: email-validator>=2.0.0; extra == "standard"
|
|
55
|
+
Requires-Dist: uvicorn[standard]>=0.12.0; extra == "standard"
|
|
56
|
+
Requires-Dist: pydantic-settings>=2.0.0; extra == "standard"
|
|
57
|
+
Requires-Dist: pydantic-extra-types>=2.0.0; extra == "standard"
|
|
58
|
+
Provides-Extra: all
|
|
59
|
+
Requires-Dist: httpx<1.0.0,>=0.23.0; extra == "all"
|
|
60
|
+
Requires-Dist: jinja2>=3.1.5; extra == "all"
|
|
61
|
+
Requires-Dist: python-multipart>=0.0.18; extra == "all"
|
|
62
|
+
Requires-Dist: itsdangerous>=1.1.0; extra == "all"
|
|
63
|
+
Requires-Dist: pyyaml>=5.3.1; extra == "all"
|
|
64
|
+
Requires-Dist: email-validator>=2.0.0; extra == "all"
|
|
65
|
+
Requires-Dist: uvicorn[standard]>=0.12.0; extra == "all"
|
|
66
|
+
Requires-Dist: pydantic-settings>=2.0.0; extra == "all"
|
|
67
|
+
Requires-Dist: pydantic-extra-types>=2.0.0; extra == "all"
|
|
68
|
+
Description-Content-Type: text/markdown
|
|
69
|
+
|
|
70
|
+
<p align="center">
|
|
71
|
+
<a href="https://notslowapi.com"><img src="https://raw.githubusercontent.com/4thel00z/notslowapi/master/site/landing/assets/logo.svg" alt="notslowapi" width="360"></a>
|
|
72
|
+
</p>
|
|
73
|
+
|
|
74
|
+
<p align="center"><strong>FastAPI, minus the slow.</strong></p>
|
|
75
|
+
|
|
76
|
+
<p align="center">A fork of FastAPI 0.141.1 that does less work per request: the same public API and test suite, with the plain JSON route down from 31.2 to 18.3 µs on uvicorn and 9.1 µs on granian.</p>
|
|
77
|
+
|
|
78
|
+
<p align="center">
|
|
79
|
+
<a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/v/notslowapi" alt="PyPI version"></a>
|
|
80
|
+
<a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/pyversions/notslowapi" alt="Python versions"></a>
|
|
81
|
+
<a href="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml"><img src="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
82
|
+
</p>
|
|
83
|
+
|
|
84
|
+
**Site**: [https://notslowapi.com](https://notslowapi.com)
|
|
85
|
+
|
|
86
|
+
**Docs**: [https://notslowapi.com/docs/](https://notslowapi.com/docs/)
|
|
87
|
+
|
|
88
|
+
**Source**: [https://github.com/4thel00z/notslowapi](https://github.com/4thel00z/notslowapi)
|
|
89
|
+
|
|
90
|
+
## Install
|
|
91
|
+
|
|
92
|
+
```console
|
|
93
|
+
uv add notslowapi[granian]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```console
|
|
97
|
+
pip install "notslowapi[granian]"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Python 3.10 to 3.14 and `pydantic>=2.9.0`. Pydantic v1 is not supported. The base install brings no ASGI server; the `granian` extra adds `granian>=2.0`. The `standard` extra is FastAPI's and pulls the same set upstream does. Nothing is installed under the `fastapi` or `starlette` names, and existing installs of those packages are left alone.
|
|
101
|
+
|
|
102
|
+
## Switch
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from notslowapi import FastAPI
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Replace the package name `fastapi` with `notslowapi` in every import. The modules upstream exposes under `fastapi.*` exist under `notslowapi.*`: `responses`, `requests`, `middleware`, `security`, `openapi`, `encoders`, `exceptions`, `background`, `staticfiles`, `templating`, `testclient`, `websockets`, `sse`, `status`.
|
|
109
|
+
|
|
110
|
+
## Run
|
|
111
|
+
|
|
112
|
+
```console
|
|
113
|
+
granian --interface asgi --workers 1 --loop uvloop myapp:app
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`myapp:app` is the module path and attribute of your `FastAPI` instance. granian's I/O runs on Rust threads alongside the Python thread, so the framework's Python is the only thing left on the critical path. On a bare ASGI callable the server alone costs 7.8 µs per request under granian against 13.5 µs under uvicorn, and the notslowapi route adds 1.3 µs on top of that under granian against 4.8 µs under uvicorn.
|
|
117
|
+
|
|
118
|
+
On uvicorn, install `uvicorn[standard]` for uvloop and httptools (18.3 µs on the plain route against 64.0 µs on asyncio and h11) and run:
|
|
119
|
+
|
|
120
|
+
```console
|
|
121
|
+
uvicorn myapp:app --loop uvloop --http httptools --no-proxy-headers --no-server-header --no-date-header
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Leave `--proxy-headers` on if a proxy in front of you sets `X-Forwarded-*` headers and your app reads them.
|
|
125
|
+
|
|
126
|
+
## Numbers
|
|
127
|
+
|
|
128
|
+
One core (Apple M3 Pro, Python 3.13), 64 keep-alive connections, median of 3 x 5 s oha runs, one worker. The first column is upstream FastAPI 0.141.1 on uvicorn at the start of the work; the other two are notslowapi 0.1.0. Raw files: `bench/baseline/results_ladder_v1.json` and `results_ladder_v3.json` in the repository.
|
|
129
|
+
|
|
130
|
+
| route | day one, uvicorn (FastAPI 0.141.1) | notslowapi, uvicorn | notslowapi, granian |
|
|
131
|
+
|---|---|---|---|
|
|
132
|
+
| raw ASGI app, fixed bytes (server floor) | 13.7 µs, 73,040 req/s | 13.5 µs, 74,172 req/s | 7.8 µs, 128,801 req/s |
|
|
133
|
+
| plain JSON route | 31.2 µs, 32,033 req/s | 18.3 µs, 54,793 req/s | 9.1 µs, 110,154 req/s |
|
|
134
|
+
| int path + str query param | 57.0 µs, 17,531 req/s | 24.2 µs, 41,405 req/s | 14.3 µs, 69,742 req/s |
|
|
135
|
+
| pydantic body + response_model | 52.1 µs, 19,212 req/s | 26.1 µs, 38,295 req/s | 20.1 µs, 49,777 req/s |
|
|
136
|
+
| 50 routes via include_router | 92.2 µs, 10,800 req/s * | 26.3 µs, 37,968 req/s | 17.3 µs, 57,864 req/s |
|
|
137
|
+
|
|
138
|
+
\* This rung did not exist in `results_ladder_v1.json`. The 92.2 µs is the before-run of the include_router change (`bench/baseline/results_fix11_before.json`), measured on a tree that already had the first ten changes, so it understates the day-one gap.
|
|
139
|
+
|
|
140
|
+
The changes are inside the framework: parameter extraction, the dependency solver, routing, exception handling and response encoding. Each is one commit with a before and after measurement, listed at [What changed](https://notslowapi.com/docs/what-changed/). The method, the tools and the raw files are at [Benchmark method](https://notslowapi.com/docs/benchmarks-method/); the full tables are at [notslowapi.com/benchmarks/](https://notslowapi.com/benchmarks/).
|
|
141
|
+
|
|
142
|
+
## Compatibility
|
|
143
|
+
|
|
144
|
+
notslowapi 0.1.0 has the public API of FastAPI 0.141.1: classes, functions, parameters and behaviors are upstream's, and the changes are internal. The check is the upstream test suite with its imports rewritten: 3,335 FastAPI tests plus 1,154 Starlette tests, 4,489 pass, with the same 8 environmental failures before and after every change. The modified Starlette 1.6.0 ships inside the package as `notslowapi.starlette` and nothing is installed under the `starlette` name, so code that imports `starlette.*` directly needs upstream Starlette installed and gets upstream behavior for those objects.
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
from notslowapi.starlette.middleware.base import BaseHTTPMiddleware
|
|
148
|
+
from notslowapi.starlette.responses import Response
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Two observable differences: `AsyncExitStackMiddleware` is importable but no longer installed, so the scope no longer carries `fastapi_middleware_astack`, and `solve_dependencies` raises `RuntimeError` instead of failing an `assert` when a `yield` dependency runs without an exit stack. Details at [Compatibility](https://notslowapi.com/docs/compatibility/).
|
|
152
|
+
|
|
153
|
+
## Reporting a regression
|
|
154
|
+
|
|
155
|
+
Open an issue at [github.com/4thel00z/notslowapi/issues](https://github.com/4thel00z/notslowapi/issues) with the notslowapi version, a minimal app, and what FastAPI 0.141.1 does with the same code. For a performance regression, name the machine, Python version and server, and attach `bench/out/results.json` from a before and an after run of the ladder.
|
|
156
|
+
|
|
157
|
+
## Credits
|
|
158
|
+
|
|
159
|
+
notslowapi is built from [FastAPI](https://fastapi.tiangolo.com) by Sebastián Ramírez and [Starlette](https://starlette.dev) by Encode. The code is theirs; this fork changes how much of it runs per request. FastAPI's documentation applies to notslowapi with the package name swapped.
|
|
160
|
+
|
|
161
|
+
## License
|
|
162
|
+
|
|
163
|
+
The FastAPI code is MIT licensed, copyright 2018 Sebastián Ramírez (`LICENSE`). The vendored Starlette is BSD-3-Clause, copyright 2018 Encode OSS Ltd (`notslowapi/starlette/LICENSE.md`). Both files ship in the wheel; the package metadata declares `MIT`.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://notslowapi.com"><img src="https://raw.githubusercontent.com/4thel00z/notslowapi/master/site/landing/assets/logo.svg" alt="notslowapi" width="360"></a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center"><strong>FastAPI, minus the slow.</strong></p>
|
|
6
|
+
|
|
7
|
+
<p align="center">A fork of FastAPI 0.141.1 that does less work per request: the same public API and test suite, with the plain JSON route down from 31.2 to 18.3 µs on uvicorn and 9.1 µs on granian.</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/v/notslowapi" alt="PyPI version"></a>
|
|
11
|
+
<a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/pyversions/notslowapi" alt="Python versions"></a>
|
|
12
|
+
<a href="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml"><img src="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
**Site**: [https://notslowapi.com](https://notslowapi.com)
|
|
16
|
+
|
|
17
|
+
**Docs**: [https://notslowapi.com/docs/](https://notslowapi.com/docs/)
|
|
18
|
+
|
|
19
|
+
**Source**: [https://github.com/4thel00z/notslowapi](https://github.com/4thel00z/notslowapi)
|
|
20
|
+
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
```console
|
|
24
|
+
uv add notslowapi[granian]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```console
|
|
28
|
+
pip install "notslowapi[granian]"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Python 3.10 to 3.14 and `pydantic>=2.9.0`. Pydantic v1 is not supported. The base install brings no ASGI server; the `granian` extra adds `granian>=2.0`. The `standard` extra is FastAPI's and pulls the same set upstream does. Nothing is installed under the `fastapi` or `starlette` names, and existing installs of those packages are left alone.
|
|
32
|
+
|
|
33
|
+
## Switch
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from notslowapi import FastAPI
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Replace the package name `fastapi` with `notslowapi` in every import. The modules upstream exposes under `fastapi.*` exist under `notslowapi.*`: `responses`, `requests`, `middleware`, `security`, `openapi`, `encoders`, `exceptions`, `background`, `staticfiles`, `templating`, `testclient`, `websockets`, `sse`, `status`.
|
|
40
|
+
|
|
41
|
+
## Run
|
|
42
|
+
|
|
43
|
+
```console
|
|
44
|
+
granian --interface asgi --workers 1 --loop uvloop myapp:app
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`myapp:app` is the module path and attribute of your `FastAPI` instance. granian's I/O runs on Rust threads alongside the Python thread, so the framework's Python is the only thing left on the critical path. On a bare ASGI callable the server alone costs 7.8 µs per request under granian against 13.5 µs under uvicorn, and the notslowapi route adds 1.3 µs on top of that under granian against 4.8 µs under uvicorn.
|
|
48
|
+
|
|
49
|
+
On uvicorn, install `uvicorn[standard]` for uvloop and httptools (18.3 µs on the plain route against 64.0 µs on asyncio and h11) and run:
|
|
50
|
+
|
|
51
|
+
```console
|
|
52
|
+
uvicorn myapp:app --loop uvloop --http httptools --no-proxy-headers --no-server-header --no-date-header
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Leave `--proxy-headers` on if a proxy in front of you sets `X-Forwarded-*` headers and your app reads them.
|
|
56
|
+
|
|
57
|
+
## Numbers
|
|
58
|
+
|
|
59
|
+
One core (Apple M3 Pro, Python 3.13), 64 keep-alive connections, median of 3 x 5 s oha runs, one worker. The first column is upstream FastAPI 0.141.1 on uvicorn at the start of the work; the other two are notslowapi 0.1.0. Raw files: `bench/baseline/results_ladder_v1.json` and `results_ladder_v3.json` in the repository.
|
|
60
|
+
|
|
61
|
+
| route | day one, uvicorn (FastAPI 0.141.1) | notslowapi, uvicorn | notslowapi, granian |
|
|
62
|
+
|---|---|---|---|
|
|
63
|
+
| raw ASGI app, fixed bytes (server floor) | 13.7 µs, 73,040 req/s | 13.5 µs, 74,172 req/s | 7.8 µs, 128,801 req/s |
|
|
64
|
+
| plain JSON route | 31.2 µs, 32,033 req/s | 18.3 µs, 54,793 req/s | 9.1 µs, 110,154 req/s |
|
|
65
|
+
| int path + str query param | 57.0 µs, 17,531 req/s | 24.2 µs, 41,405 req/s | 14.3 µs, 69,742 req/s |
|
|
66
|
+
| pydantic body + response_model | 52.1 µs, 19,212 req/s | 26.1 µs, 38,295 req/s | 20.1 µs, 49,777 req/s |
|
|
67
|
+
| 50 routes via include_router | 92.2 µs, 10,800 req/s * | 26.3 µs, 37,968 req/s | 17.3 µs, 57,864 req/s |
|
|
68
|
+
|
|
69
|
+
\* This rung did not exist in `results_ladder_v1.json`. The 92.2 µs is the before-run of the include_router change (`bench/baseline/results_fix11_before.json`), measured on a tree that already had the first ten changes, so it understates the day-one gap.
|
|
70
|
+
|
|
71
|
+
The changes are inside the framework: parameter extraction, the dependency solver, routing, exception handling and response encoding. Each is one commit with a before and after measurement, listed at [What changed](https://notslowapi.com/docs/what-changed/). The method, the tools and the raw files are at [Benchmark method](https://notslowapi.com/docs/benchmarks-method/); the full tables are at [notslowapi.com/benchmarks/](https://notslowapi.com/benchmarks/).
|
|
72
|
+
|
|
73
|
+
## Compatibility
|
|
74
|
+
|
|
75
|
+
notslowapi 0.1.0 has the public API of FastAPI 0.141.1: classes, functions, parameters and behaviors are upstream's, and the changes are internal. The check is the upstream test suite with its imports rewritten: 3,335 FastAPI tests plus 1,154 Starlette tests, 4,489 pass, with the same 8 environmental failures before and after every change. The modified Starlette 1.6.0 ships inside the package as `notslowapi.starlette` and nothing is installed under the `starlette` name, so code that imports `starlette.*` directly needs upstream Starlette installed and gets upstream behavior for those objects.
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
from notslowapi.starlette.middleware.base import BaseHTTPMiddleware
|
|
79
|
+
from notslowapi.starlette.responses import Response
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Two observable differences: `AsyncExitStackMiddleware` is importable but no longer installed, so the scope no longer carries `fastapi_middleware_astack`, and `solve_dependencies` raises `RuntimeError` instead of failing an `assert` when a `yield` dependency runs without an exit stack. Details at [Compatibility](https://notslowapi.com/docs/compatibility/).
|
|
83
|
+
|
|
84
|
+
## Reporting a regression
|
|
85
|
+
|
|
86
|
+
Open an issue at [github.com/4thel00z/notslowapi/issues](https://github.com/4thel00z/notslowapi/issues) with the notslowapi version, a minimal app, and what FastAPI 0.141.1 does with the same code. For a performance regression, name the machine, Python version and server, and attach `bench/out/results.json` from a before and an after run of the ladder.
|
|
87
|
+
|
|
88
|
+
## Credits
|
|
89
|
+
|
|
90
|
+
notslowapi is built from [FastAPI](https://fastapi.tiangolo.com) by Sebastián Ramírez and [Starlette](https://starlette.dev) by Encode. The code is theirs; this fork changes how much of it runs per request. FastAPI's documentation applies to notslowapi with the package name swapped.
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
The FastAPI code is MIT licensed, copyright 2018 Sebastián Ramírez (`LICENSE`). The vendored Starlette is BSD-3-Clause, copyright 2018 Encode OSS Ltd (`notslowapi/starlette/LICENSE.md`). Both files ship in the wheel; the package metadata declares `MIT`.
|
|
Binary file
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from notslowapi import FastAPI
|
|
2
|
+
from notslowapi.responses import JSONResponse
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Item(BaseModel):
|
|
7
|
+
id: str
|
|
8
|
+
value: str
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Message(BaseModel):
|
|
12
|
+
message: str
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
app = FastAPI()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@app.get("/items/{item_id}", response_model=Item, responses={404: {"model": Message}})
|
|
19
|
+
async def read_item(item_id: str):
|
|
20
|
+
if item_id == "foo":
|
|
21
|
+
return {"id": "foo", "value": "there goes my hero"}
|
|
22
|
+
return JSONResponse(status_code=404, content={"message": "Item not found"})
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from notslowapi import FastAPI
|
|
2
|
+
from notslowapi.responses import FileResponse
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Item(BaseModel):
|
|
7
|
+
id: str
|
|
8
|
+
value: str
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
app = FastAPI()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@app.get(
|
|
15
|
+
"/items/{item_id}",
|
|
16
|
+
response_model=Item,
|
|
17
|
+
responses={
|
|
18
|
+
200: {
|
|
19
|
+
"content": {"image/png": {}},
|
|
20
|
+
"description": "Return the JSON item or an image.",
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
)
|
|
24
|
+
async def read_item(item_id: str, img: bool | None = None):
|
|
25
|
+
if img:
|
|
26
|
+
return FileResponse("image.png", media_type="image/png")
|
|
27
|
+
else:
|
|
28
|
+
return {"id": "foo", "value": "there goes my hero"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from notslowapi import FastAPI
|
|
2
|
+
from notslowapi.responses import JSONResponse
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Item(BaseModel):
|
|
7
|
+
id: str
|
|
8
|
+
value: str
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Message(BaseModel):
|
|
12
|
+
message: str
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
app = FastAPI()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@app.get(
|
|
19
|
+
"/items/{item_id}",
|
|
20
|
+
response_model=Item,
|
|
21
|
+
responses={
|
|
22
|
+
404: {"model": Message, "description": "The item was not found"},
|
|
23
|
+
200: {
|
|
24
|
+
"description": "Item requested by ID",
|
|
25
|
+
"content": {
|
|
26
|
+
"application/json": {
|
|
27
|
+
"example": {"id": "bar", "value": "The bar tenders"}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
)
|
|
33
|
+
async def read_item(item_id: str):
|
|
34
|
+
if item_id == "foo":
|
|
35
|
+
return {"id": "foo", "value": "there goes my hero"}
|
|
36
|
+
else:
|
|
37
|
+
return JSONResponse(status_code=404, content={"message": "Item not found"})
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from notslowapi import FastAPI
|
|
2
|
+
from notslowapi.responses import FileResponse
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Item(BaseModel):
|
|
7
|
+
id: str
|
|
8
|
+
value: str
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
responses = {
|
|
12
|
+
404: {"description": "Item not found"},
|
|
13
|
+
302: {"description": "The item was moved"},
|
|
14
|
+
403: {"description": "Not enough privileges"},
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
app = FastAPI()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@app.get(
|
|
22
|
+
"/items/{item_id}",
|
|
23
|
+
response_model=Item,
|
|
24
|
+
responses={**responses, 200: {"content": {"image/png": {}}}},
|
|
25
|
+
)
|
|
26
|
+
async def read_item(item_id: str, img: bool | None = None):
|
|
27
|
+
if img:
|
|
28
|
+
return FileResponse("image.png", media_type="image/png")
|
|
29
|
+
else:
|
|
30
|
+
return {"id": "foo", "value": "there goes my hero"}
|
|
File without changes
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
from notslowapi import Body, FastAPI, status
|
|
4
|
+
from notslowapi.responses import JSONResponse
|
|
5
|
+
|
|
6
|
+
app = FastAPI()
|
|
7
|
+
|
|
8
|
+
items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@app.put("/items/{item_id}")
|
|
12
|
+
async def upsert_item(
|
|
13
|
+
item_id: str,
|
|
14
|
+
name: Annotated[str | None, Body()] = None,
|
|
15
|
+
size: Annotated[int | None, Body()] = None,
|
|
16
|
+
):
|
|
17
|
+
if item_id in items:
|
|
18
|
+
item = items[item_id]
|
|
19
|
+
item["name"] = name
|
|
20
|
+
item["size"] = size
|
|
21
|
+
return item
|
|
22
|
+
else:
|
|
23
|
+
item = {"name": name, "size": size}
|
|
24
|
+
items[item_id] = item
|
|
25
|
+
return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from notslowapi import Body, FastAPI, status
|
|
2
|
+
from notslowapi.responses import JSONResponse
|
|
3
|
+
|
|
4
|
+
app = FastAPI()
|
|
5
|
+
|
|
6
|
+
items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@app.put("/items/{item_id}")
|
|
10
|
+
async def upsert_item(
|
|
11
|
+
item_id: str,
|
|
12
|
+
name: str | None = Body(default=None),
|
|
13
|
+
size: int | None = Body(default=None),
|
|
14
|
+
):
|
|
15
|
+
if item_id in items:
|
|
16
|
+
item = items[item_id]
|
|
17
|
+
item["name"] = name
|
|
18
|
+
item["size"] = size
|
|
19
|
+
return item
|
|
20
|
+
else:
|
|
21
|
+
item = {"name": name, "size": size}
|
|
22
|
+
items[item_id] = item
|
|
23
|
+
return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from notslowapi import FastAPI
|
|
2
|
+
from notslowapi.middleware.trustedhost import TrustedHostMiddleware
|
|
3
|
+
|
|
4
|
+
app = FastAPI()
|
|
5
|
+
|
|
6
|
+
app.add_middleware(
|
|
7
|
+
TrustedHostMiddleware, allowed_hosts=["example.com", "*.example.com"]
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@app.get("/")
|
|
12
|
+
async def main():
|
|
13
|
+
return {"message": "Hello World"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
from notslowapi import FastAPI, Header, HTTPException
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
|
|
6
|
+
fake_secret_token = "coneofsilence"
|
|
7
|
+
|
|
8
|
+
fake_db = {
|
|
9
|
+
"foo": {"id": "foo", "title": "Foo", "description": "There goes my hero"},
|
|
10
|
+
"bar": {"id": "bar", "title": "Bar", "description": "The bartenders"},
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
app = FastAPI()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Item(BaseModel):
|
|
17
|
+
id: str
|
|
18
|
+
title: str
|
|
19
|
+
description: str | None = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@app.get("/items/{item_id}", response_model=Item)
|
|
23
|
+
async def read_main(item_id: str, x_token: Annotated[str, Header()]):
|
|
24
|
+
if x_token != fake_secret_token:
|
|
25
|
+
raise HTTPException(status_code=400, detail="Invalid X-Token header")
|
|
26
|
+
if item_id not in fake_db:
|
|
27
|
+
raise HTTPException(status_code=404, detail="Item not found")
|
|
28
|
+
return fake_db[item_id]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@app.post("/items/")
|
|
32
|
+
async def create_item(item: Item, x_token: Annotated[str, Header()]) -> Item:
|
|
33
|
+
if x_token != fake_secret_token:
|
|
34
|
+
raise HTTPException(status_code=400, detail="Invalid X-Token header")
|
|
35
|
+
if item.id in fake_db:
|
|
36
|
+
raise HTTPException(status_code=409, detail="Item already exists")
|
|
37
|
+
fake_db[item.id] = item.model_dump()
|
|
38
|
+
return item
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from notslowapi.testclient import TestClient
|
|
2
|
+
|
|
3
|
+
from .main import app
|
|
4
|
+
|
|
5
|
+
client = TestClient(app)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_read_item():
|
|
9
|
+
response = client.get("/items/foo", headers={"X-Token": "coneofsilence"})
|
|
10
|
+
assert response.status_code == 200
|
|
11
|
+
assert response.json() == {
|
|
12
|
+
"id": "foo",
|
|
13
|
+
"title": "Foo",
|
|
14
|
+
"description": "There goes my hero",
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def test_read_item_bad_token():
|
|
19
|
+
response = client.get("/items/foo", headers={"X-Token": "hailhydra"})
|
|
20
|
+
assert response.status_code == 400
|
|
21
|
+
assert response.json() == {"detail": "Invalid X-Token header"}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_read_nonexistent_item():
|
|
25
|
+
response = client.get("/items/baz", headers={"X-Token": "coneofsilence"})
|
|
26
|
+
assert response.status_code == 404
|
|
27
|
+
assert response.json() == {"detail": "Item not found"}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_create_item():
|
|
31
|
+
response = client.post(
|
|
32
|
+
"/items/",
|
|
33
|
+
headers={"X-Token": "coneofsilence"},
|
|
34
|
+
json={"id": "foobar", "title": "Foo Bar", "description": "The Foo Barters"},
|
|
35
|
+
)
|
|
36
|
+
assert response.status_code == 200
|
|
37
|
+
assert response.json() == {
|
|
38
|
+
"id": "foobar",
|
|
39
|
+
"title": "Foo Bar",
|
|
40
|
+
"description": "The Foo Barters",
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def test_create_item_bad_token():
|
|
45
|
+
response = client.post(
|
|
46
|
+
"/items/",
|
|
47
|
+
headers={"X-Token": "hailhydra"},
|
|
48
|
+
json={"id": "bazz", "title": "Bazz", "description": "Drop the bazz"},
|
|
49
|
+
)
|
|
50
|
+
assert response.status_code == 400
|
|
51
|
+
assert response.json() == {"detail": "Invalid X-Token header"}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def test_create_existing_item():
|
|
55
|
+
response = client.post(
|
|
56
|
+
"/items/",
|
|
57
|
+
headers={"X-Token": "coneofsilence"},
|
|
58
|
+
json={
|
|
59
|
+
"id": "foo",
|
|
60
|
+
"title": "The Foo ID Stealers",
|
|
61
|
+
"description": "There goes my stealer",
|
|
62
|
+
},
|
|
63
|
+
)
|
|
64
|
+
assert response.status_code == 409
|
|
65
|
+
assert response.json() == {"detail": "Item already exists"}
|
|
File without changes
|