From 5cfbe13ddf61662efdedd5420819d1ea09cf0685 Mon Sep 17 00:00:00 2001 From: kennethreitz Date: Tue, 24 Mar 2026 20:24:26 +0000 Subject: [PATCH] deploy: 691f6b4d5c74a62ca682a12d97d5838768592229 --- .buildinfo | 2 +- .doctrees/changes.doctree | Bin 99018 -> 108894 bytes .doctrees/environment.pickle | Bin 242236 -> 244091 bytes _modules/index.html | 6 +- _modules/responder/api.html | 6 +- _modules/responder/background.html | 6 +- _modules/responder/ext/ratelimit.html | 6 +- _modules/responder/models.html | 6 +- _modules/responder/status_codes.html | 6 +- _sources/changes.md.txt | 33 ++ _static/documentation_options.js | 2 +- api.html | 6 +- backlog.html | 6 +- changes.html | 537 ++++++++++++++------------ cli.html | 6 +- deployment.html | 6 +- genindex.html | 6 +- guide-config.html | 6 +- index.html | 6 +- objects.inv | 2 +- py-modindex.html | 6 +- quickstart.html | 6 +- sandbox.html | 6 +- search.html | 6 +- searchindex.js | 2 +- testing.html | 6 +- tour.html | 6 +- tutorial-auth.html | 6 +- tutorial-flask.html | 6 +- tutorial-middleware.html | 6 +- tutorial-rest.html | 6 +- tutorial-sqlalchemy.html | 6 +- tutorial-websockets.html | 6 +- 33 files changed, 406 insertions(+), 322 deletions(-) diff --git a/.buildinfo b/.buildinfo index 9449f01..97c14f3 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file records the configuration used when building these files. When it is not found, a full rebuild will be done. -config: c08221e9f0bc76c34b3bf9a7331fe62a +config: c4ffdc22e8e2f024e32bdac6fd7533c9 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/changes.doctree b/.doctrees/changes.doctree index 5b2f0b273ed0e52d7c0322e38780726800727642..582c3842d04aa2b8a8fc502ef68925e6b5a52973 100644 GIT binary patch literal 108894 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 literal 99018 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 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index 51e5f225059a5208247bc435786017610235d74d..7ae0fc2e597b3fdd1b4df8cbe6e839fe3f020502 100644 GIT binary patch literal 244091 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 z%0A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 b!Y_dxehJj@OW^U>{>&Zj^k{$oX6yd|O$q5! literal 242236 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 Jzkjp!e*pT*IRyX! diff --git a/_modules/index.html b/_modules/index.html index abd1a7a..5fe0c40 100644 --- a/_modules/index.html +++ b/_modules/index.html @@ -4,13 +4,13 @@ - Overview: module code — responder 3.5.0 documentation + Overview: module code — responder 3.6.0 documentation - + @@ -58,7 +58,7 @@

Responder — a familiar HTTP service framework for Python.
- v3.5.0 + v3.6.0

Useful Links

    diff --git a/_modules/responder/api.html b/_modules/responder/api.html index 4c41686..29ebbc9 100644 --- a/_modules/responder/api.html +++ b/_modules/responder/api.html @@ -4,13 +4,13 @@ - responder.api — responder 3.5.0 documentation + responder.api — responder 3.6.0 documentation - + @@ -738,7 +738,7 @@

    Responder — a familiar HTTP service framework for Python.
    - v3.5.0 + v3.6.0

    Useful Links

      diff --git a/_modules/responder/background.html b/_modules/responder/background.html index 5108173..50e4f02 100644 --- a/_modules/responder/background.html +++ b/_modules/responder/background.html @@ -4,13 +4,13 @@ - responder.background — responder 3.5.0 documentation + responder.background — responder 3.6.0 documentation - + @@ -144,7 +144,7 @@

      Responder — a familiar HTTP service framework for Python.
      - v3.5.0 + v3.6.0

      Useful Links

        diff --git a/_modules/responder/ext/ratelimit.html b/_modules/responder/ext/ratelimit.html index fa0036d..c7cbba3 100644 --- a/_modules/responder/ext/ratelimit.html +++ b/_modules/responder/ext/ratelimit.html @@ -4,13 +4,13 @@ - responder.ext.ratelimit — responder 3.5.0 documentation + responder.ext.ratelimit — responder 3.6.0 documentation - + @@ -127,7 +127,7 @@

        Responder — a familiar HTTP service framework for Python.
        - v3.5.0 + v3.6.0

        Useful Links

          diff --git a/_modules/responder/models.html b/_modules/responder/models.html index 140e599..51f3628 100644 --- a/_modules/responder/models.html +++ b/_modules/responder/models.html @@ -4,13 +4,13 @@ - responder.models — responder 3.5.0 documentation + responder.models — responder 3.6.0 documentation - + @@ -710,7 +710,7 @@

          Responder — a familiar HTTP service framework for Python.
          - v3.5.0 + v3.6.0

          Useful Links

            diff --git a/_modules/responder/status_codes.html b/_modules/responder/status_codes.html index 24b56b8..8bdba6d 100644 --- a/_modules/responder/status_codes.html +++ b/_modules/responder/status_codes.html @@ -4,13 +4,13 @@ - responder.status_codes — responder 3.5.0 documentation + responder.status_codes — responder 3.6.0 documentation - + @@ -176,7 +176,7 @@

            Responder — a familiar HTTP service framework for Python.
            - v3.5.0 + v3.6.0

            Useful Links

              diff --git a/_sources/changes.md.txt b/_sources/changes.md.txt index 40cec3f..d7b6319 100644 --- a/_sources/changes.md.txt +++ b/_sources/changes.md.txt @@ -5,6 +5,38 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v3.6.0] - 2026-03-24 + +### Added + +- Built-in structured logging with per-request context (`enable_logging=True`) + - `api.log` — always-available logger, enriched with request context when logging is enabled + - Automatic access logging with timing: `GET /path → 200 (1.2ms)` + - Request ID generation/forwarding via `X-Request-ID` header + - `contextvars`-based request context (ID, method, path, client IP) on every log record + - `responder.ext.logging` module: `get_logger()`, `RequestContext`, `RequestContextFilter` +- CLAUDE.md project guide and `/release` command +- Version number in docs sidebar + +### Changed + +- Comprehensive documentation improvements across all pages + - Deployment: health checks, Docker Compose, Caddy, Procfile, production checklist + - API reference: usage examples for every class + - Feature tour: Pydantic validation, content negotiation, structured logging sections + - Tutorials: modernized SQLAlchemy to `mapped_column()`, fixed deprecated `datetime.utcnow()`, + WebSocket `WebSocketDisconnect` handling, role-based auth, auth strategy guide + - Testing: rate limiting and WSGI mount examples + - Middleware: pure ASGI middleware example + - Quickstart: links to all tutorials + - Sandbox: full rewrite with project layout +- Docker example uses `uv` instead of pip +- Backlog updated: removed implemented features, replaced HTTP/2 server push with dependency injection + +### Removed + +- `uv.lock` — this is a library, not an application + ## [v3.5.0] - 2026-03-24 ### Added @@ -459,6 +491,7 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Conception! +[v3.6.0]: https://github.com/kennethreitz/responder/compare/v3.5.0..v3.6.0 [v3.5.0]: https://github.com/kennethreitz/responder/compare/v3.4.0..v3.5.0 [v3.4.0]: https://github.com/kennethreitz/responder/compare/v3.3.0..v3.4.0 [v3.3.0]: https://github.com/kennethreitz/responder/compare/v3.2.0..v3.3.0 diff --git a/_static/documentation_options.js b/_static/documentation_options.js index f5d5075..be22daf 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '3.5.0', + VERSION: '3.6.0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/api.html b/api.html index 196525f..af8c887 100644 --- a/api.html +++ b/api.html @@ -5,13 +5,13 @@ - API Reference — responder 3.5.0 documentation + API Reference — responder 3.6.0 documentation - + @@ -979,7 +979,7 @@ into. Useful in middleware and after-request hooks:

              Responder — a familiar HTTP service framework for Python.
              - v3.5.0 + v3.6.0

              Useful Links

                diff --git a/backlog.html b/backlog.html index 947907a..c9eba81 100644 --- a/backlog.html +++ b/backlog.html @@ -5,13 +5,13 @@ - Backlog — responder 3.5.0 documentation + Backlog — responder 3.6.0 documentation - + @@ -67,7 +67,7 @@

                Responder — a familiar HTTP service framework for Python.
                - v3.5.0 + v3.6.0

                Useful Links

                  diff --git a/changes.html b/changes.html index 5d74449..119fa5f 100644 --- a/changes.html +++ b/changes.html @@ -5,13 +5,13 @@ - Changelog — responder 3.5.0 documentation + Changelog — responder 3.6.0 documentation - + @@ -45,18 +45,63 @@

                  All notable changes to this project will be documented in this file.

                  The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

                  -
                  -

                  v3.5.0 - 2026-03-24

                  +
                  +

                  v3.6.0 - 2026-03-24

                  Added

                    +
                  • Built-in structured logging with per-request context (enable_logging=True)

                    +
                      +
                    • api.log — always-available logger, enriched with request context when logging is enabled

                    • +
                    • Automatic access logging with timing: GET /path 200 (1.2ms)

                    • +
                    • Request ID generation/forwarding via X-Request-ID header

                    • +
                    • contextvars-based request context (ID, method, path, client IP) on every log record

                    • +
                    • responder.ext.logging module: get_logger(), RequestContext, RequestContextFilter

                    • +
                    +
                  • +
                  • CLAUDE.md project guide and /release command

                  • +
                  • Version number in docs sidebar

                  • +
                  +
                  +
                  +

                  Changed

                  +
                    +
                  • Comprehensive documentation improvements across all pages

                    +
                      +
                    • Deployment: health checks, Docker Compose, Caddy, Procfile, production checklist

                    • +
                    • API reference: usage examples for every class

                    • +
                    • Feature tour: Pydantic validation, content negotiation, structured logging sections

                    • +
                    • Tutorials: modernized SQLAlchemy to mapped_column(), fixed deprecated datetime.utcnow(), +WebSocket WebSocketDisconnect handling, role-based auth, auth strategy guide

                    • +
                    • Testing: rate limiting and WSGI mount examples

                    • +
                    • Middleware: pure ASGI middleware example

                    • +
                    • Quickstart: links to all tutorials

                    • +
                    • Sandbox: full rewrite with project layout

                    • +
                    +
                  • +
                  • Docker example uses uv instead of pip

                  • +
                  • Backlog updated: removed implemented features, replaced HTTP/2 server push with dependency injection

                  • +
                  +
                  +
                  +

                  Removed

                  +
                    +
                  • uv.lock — this is a library, not an application

                  • +
                  +
                  +
                  +
                  +

                  v3.5.0 - 2026-03-24

                  +
                  +

                  Added

                  +
                  • CI validation for Python 3.14, 3.14 free-threaded, and PyPy 3.11

                  • Marimo notebook mounting docs and example

                  • Type annotations for routes.py

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Replaced deprecated asyncio.iscoroutinefunction with inspect.iscoroutinefunction ahead of Python 3.16 removal

                  • Narrowed broad except Exception to specific exceptions in response model serialization and websocket chat example

                  • @@ -75,8 +120,8 @@ this project adheres to -

                    Removed

                    +
                    +

                    Removed

                    • Read the Docs configuration (docs hosted on GitHub Pages)

                    @@ -84,8 +129,8 @@ this project adheres to

                    v3.4.0 - 2026-03-22

                    -
                    -

                    Changed

                    +
                    +

                    Changed

                    • Upgraded to Starlette 1.0

                    • Added comprehensive docstrings across the codebase

                    • @@ -95,8 +140,8 @@ this project adheres to

                      v3.3.0 - 2026-03-22

                      -
                      -

                      Added

                      +
                      +

                      Added

                      • Full documentation rewrite: tutorials for REST APIs, SQLAlchemy, Flask migration

                      • Auth, WebSocket, middleware, and configuration guides

                      • @@ -104,8 +149,8 @@ this project adheres to -

                        Changed

                        +
                        +

                        Changed

                        • Reworked homepage prose

                        • Rewrote CLI and API reference docs

                        • @@ -114,8 +159,8 @@ this project adheres to

                          v3.2.0 - 2026-03-22

                          -
                          -

                          Added

                          +
                          +

                          Added

                          • Pydantic auto-validation: request_model validates input, returns 422 on failure

                          • Pydantic auto-serialization: response_model strips extra fields from responses

                          • @@ -135,8 +180,8 @@ this project adheres to -

                            Changed

                            +
                            +

                            Changed

                            • Dependencies flattened: pip install responder gets everything

                            • Core deps reduced to starlette + uvicorn

                            • @@ -145,8 +190,8 @@ this project adheres to -

                              Fixed

                              +
                              +

                              Fixed

                              • Multipart parser losing headers when parts have multiple headers

                              • url_for() with typed route params ({id:int})

                              • @@ -159,8 +204,8 @@ this project adheres to

                                v3.0.0 - 2026-03-22

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Platform: Added support for Python 3.10 - Python 3.13

                                • CLI: responder run now also accepts a filesystem path on its <target> @@ -168,8 +213,8 @@ argument, enabling usage on single-file applications.

                                • CLI: responder run now also accepts URLs.

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Platform: Minimum Python version is now 3.9 (dropped 3.6, 3.7, 3.8)

                                • Dependencies: Dramatically reduced core dependency count (10 → 5)

                                  @@ -191,8 +236,8 @@ extensions now, found within the

                                  Packaging: Migrated from setup.py to declarative pyproject.toml

                                -
                                -

                                Removed

                                +
                                +

                                Removed

                                • Platform: Removed support for EOL Python 3.6, 3.7, 3.8

                                • Status codes: Removed deprecated resume_incomplete and resume @@ -200,8 +245,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                • CLI: responder run --build ceased to exist

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Routing: Fixed dispatching static_route=None on Windows

                                • uvicorn: --debug now maps to uvicorn’s log_level = "debug"

                                • @@ -211,8 +256,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v2.0.5 - 2019-12-15

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Update requirements to support python 3.8

                                @@ -220,8 +265,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v2.0.4 - 2019-11-19

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Fix static app resolving

                                @@ -229,8 +274,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v2.0.3 - 2019-09-20

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Fix template conflicts

                                @@ -238,8 +283,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v2.0.2 - 2019-09-20

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Fix template conflicts

                                @@ -247,8 +292,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v2.0.1 - 2019-09-20

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Fix template import

                                @@ -256,8 +301,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v2.0.0 - 2019-09-19

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Refactor Router and Schema

                                @@ -265,8 +310,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.3.2 - 2019-08-15

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • ASGI 3 support

                                • CI tests for python 3.8-dev

                                • @@ -282,15 +327,15 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.3.1 - 2019-04-28

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Route params Converters

                                • Add search for documentation pages

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Bump dependencies

                                @@ -298,8 +343,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.3.0 - 2019-02-22

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Versioning issue

                                • Multiple cookies.

                                • @@ -307,8 +352,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                • Other bugfixes.

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Stream support via resp.stream.

                                • Cookie directives via resp.set_cookie.

                                • @@ -319,14 +364,14 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.1.3 - 2019-01-12

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Refactor _route_for

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Resolve startup/shutdwown events

                                @@ -334,21 +379,21 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.2.0 - 2018-12-29

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Documentations

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Use Starlette’s LifeSpan middleware

                                • Update denpendencies

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Fix route.is_class_based

                                • Fix test_500

                                • @@ -358,8 +403,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.1.2 - 2018-11-11

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Minor fixes for Open API

                                • Typos

                                • @@ -368,8 +413,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.1.1 - 2018-10-29

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Run sync views in a threadpoolexecutor.

                                @@ -377,8 +422,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.1.0 - 2018-10-27

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Support for before_request.

                                @@ -386,8 +431,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.0.5- 2018-10-27

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Fix sessions.

                                @@ -395,8 +440,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.0.4 - 2018-10-27

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Potential bufix for cookies.

                                @@ -404,8 +449,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.0.3 - 2018-10-27

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Bugfix for redirects.

                                @@ -413,8 +458,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.0.2 - 2018-10-27

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Improvement for static file hosting.

                                @@ -422,8 +467,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.0.1 - 2018-10-26

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Improve cors configuration settings.

                                @@ -431,8 +476,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v1.0.0 - 2018-10-26

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Move GraphQL support into a built-in plugin.

                                @@ -440,14 +485,14 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.3.3 - 2018-10-25

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • CORS support

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Improved exceptions.

                                @@ -455,8 +500,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.3.2 - 2018-10-25

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Subtle improvements.

                                @@ -464,8 +509,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.3.1 - 2018-10-24

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Packaging fix.

                                @@ -473,8 +518,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.3.0 - 2018-10-24

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Interactive Documentation endpoint.

                                • Minor improvements.

                                • @@ -483,8 +528,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.2.3 - 2018-10-24

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Overall improvements.

                                @@ -492,8 +537,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.2.2 - 2018-10-23

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Show traceback info when background tasks raise exceptions.

                                @@ -501,8 +546,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.2.1 - 2018-10-23

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • api.requests.

                                @@ -510,8 +555,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.2.0 - 2018-10-22

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • WebSocket support.

                                @@ -519,8 +564,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.6 - 2018-10-20

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • 500 support.

                                @@ -528,14 +573,14 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.5 - 2018-10-20

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • File upload support

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Improvements to sequential media reading.

                                @@ -543,8 +588,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.4 - 2018-10-19

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Stability.

                                @@ -552,8 +597,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.3 - 2018-10-18

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Sessions support.

                                @@ -561,8 +606,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.2 - 2018-10-18

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Cookies support.

                                @@ -570,8 +615,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.1 - 2018-10-17

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Default routes.

                                @@ -579,8 +624,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.1.0 - 2018-10-17

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Prototype of static application support.

                                @@ -588,8 +633,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.10 - 2018-10-17

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Bugfix for async class-based views.

                                @@ -597,8 +642,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.9 - 2018-10-17

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Bugfix for async class-based views.

                                @@ -606,14 +651,14 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.8 - 2018-10-17

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • GraphiQL Support.

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Improvement to route selection.

                                @@ -621,8 +666,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.7 - 2018-10-16

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Immutable Request object.

                                @@ -630,8 +675,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.6 - 2018-10-16

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Ability to mount WSGI apps.

                                • Supply content-type when serving up the schema.

                                • @@ -640,8 +685,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.5 - 2018-10-15

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • OpenAPI Schema support.

                                • Safe load/dump yaml.

                                • @@ -650,14 +695,14 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.4 - 2018-10-15

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Asynchronous support for data uploads.

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Bug fixes.

                                @@ -665,8 +710,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.3 - 2018-10-13

                                -
                                -

                                Fixed

                                +
                                +

                                Fixed

                                • Bug fixes.

                                @@ -674,8 +719,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.2 - 2018-10-13

                                -
                                -

                                Changed

                                +
                                +

                                Changed

                                • Switch to ASGI/Starlette.

                                @@ -683,8 +728,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                v0.0.1 - 2018-10-12

                                -
                                -

                                Added

                                +
                                +

                                Added

                                • Conception!

                                @@ -706,7 +751,7 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                Responder — a familiar HTTP service framework for Python.
                                - v3.5.0 + v3.6.0

                                Useful Links

                                  @@ -718,223 +763,229 @@ aliases for HTTP 308 (marked for removal in 3.0)

                                  Table of Contents

                                  • Changelog
                                      -
                                    • v3.5.0 - 2026-03-24
                                        +
                                      • v3.6.0 - 2026-03-24
                                      • +
                                      • v3.5.0 - 2026-03-24 +
                                      • v3.4.0 - 2026-03-22
                                      • v3.3.0 - 2026-03-22
                                      • v3.2.0 - 2026-03-22
                                      • v3.0.0 - 2026-03-22 -
                                      • -
                                      • v2.0.5 - 2019-12-15 -
                                      • -
                                      • v2.0.4 - 2019-11-19 -
                                      • -
                                      • v2.0.3 - 2019-09-20
                                      • -
                                      • v2.0.2 - 2019-09-20
                                          -
                                        • Fixed
                                        • +
                                        • v2.0.5 - 2019-12-15
                                        • -
                                        • v2.0.1 - 2019-09-20
                                            +
                                          • v2.0.4 - 2019-11-19
                                          • +
                                          • v2.0.3 - 2019-09-20 +
                                          • +
                                          • v2.0.2 - 2019-09-20 +
                                          • +
                                          • v2.0.1 - 2019-09-20 +
                                          • v2.0.0 - 2019-09-19
                                          • v1.3.2 - 2019-08-15
                                          • v1.3.1 - 2019-04-28
                                          • v1.3.0 - 2019-02-22
                                          • v1.1.3 - 2019-01-12 -
                                          • -
                                          • v1.2.0 - 2018-12-29
                                          • -
                                          • v1.1.2 - 2018-11-11 -
                                          • -
                                          • v1.1.1 - 2018-10-29
                                              +
                                            • v1.2.0 - 2018-12-29
                                            • -
                                            • v1.1.0 - 2018-10-27 -
                                            • -
                                            • v1.0.5- 2018-10-27
                                                +
                                              • v1.1.2 - 2018-11-11
                                              • +
                                              • v1.1.1 - 2018-10-29 +
                                              • +
                                              • v1.1.0 - 2018-10-27 +
                                              • +
                                              • v1.0.5- 2018-10-27 +
                                              • v1.0.4 - 2018-10-27
                                              • v1.0.3 - 2018-10-27
                                              • v1.0.2 - 2018-10-27
                                              • v1.0.1 - 2018-10-26 -
                                              • -
                                              • v1.0.0 - 2018-10-26 -
                                              • -
                                              • v0.3.3 - 2018-10-25
                                              • -
                                              • v0.3.2 - 2018-10-25
                                                  +
                                                • v1.0.0 - 2018-10-26
                                                • -
                                                • v0.3.1 - 2018-10-24 -
                                                • -
                                                • v0.3.0 - 2018-10-24
                                                    +
                                                  • v0.3.3 - 2018-10-25
                                                  • -
                                                  • v0.2.3 - 2018-10-24
                                                      +
                                                    • v0.3.2 - 2018-10-25
                                                    • +
                                                    • v0.3.1 - 2018-10-24 +
                                                    • +
                                                    • v0.3.0 - 2018-10-24 +
                                                    • +
                                                    • v0.2.3 - 2018-10-24 +
                                                    • v0.2.2 - 2018-10-23 -
                                                    • -
                                                    • v0.2.1 - 2018-10-23 -
                                                    • -
                                                    • v0.2.0 - 2018-10-22 -
                                                    • -
                                                    • v0.1.6 - 2018-10-20
                                                    • -
                                                    • v0.1.5 - 2018-10-20 diff --git a/cli.html b/cli.html index b14704b..805096e 100644 --- a/cli.html +++ b/cli.html @@ -5,13 +5,13 @@ - Command Line Interface — responder 3.5.0 documentation + Command Line Interface — responder 3.6.0 documentation - + @@ -146,7 +146,7 @@ $ responder build /path/to/frontend

                                                      Responder — a familiar HTTP service framework for Python.
                                                      - v3.5.0 + v3.6.0

                                                      Useful Links

                                                        diff --git a/deployment.html b/deployment.html index cb02a69..d1a112e 100644 --- a/deployment.html +++ b/deployment.html @@ -5,13 +5,13 @@ - Deployment — responder 3.5.0 documentation + Deployment — responder 3.6.0 documentation - + @@ -224,7 +224,7 @@ uvicorn directly without a reverse proxy and do just fine.

                                                        Responder — a familiar HTTP service framework for Python.
                                                        - v3.5.0 + v3.6.0

                                                        Useful Links

                                                          diff --git a/genindex.html b/genindex.html index 1fad33a..e007979 100644 --- a/genindex.html +++ b/genindex.html @@ -4,13 +4,13 @@ - Index — responder 3.5.0 documentation + Index — responder 3.6.0 documentation - + @@ -354,7 +354,7 @@

                                                          Responder — a familiar HTTP service framework for Python.
                                                          - v3.5.0 + v3.6.0

                                                          Useful Links

                                                            diff --git a/guide-config.html b/guide-config.html index fb470d8..e6f7fec 100644 --- a/guide-config.html +++ b/guide-config.html @@ -5,13 +5,13 @@ - Configuration — responder 3.5.0 documentation + Configuration — responder 3.6.0 documentation - + @@ -213,7 +213,7 @@ platform’s dashboard, Docker secrets, or a secrets manager).

                                                            Responder — a familiar HTTP service framework for Python.
                                                            - v3.5.0 + v3.6.0

                                                            Useful Links

                                                              diff --git a/index.html b/index.html index 53d1bd0..1846494 100644 --- a/index.html +++ b/index.html @@ -5,13 +5,13 @@ - Responder — responder 3.5.0 documentation + Responder — responder 3.6.0 documentation - + @@ -319,7 +319,7 @@ work with — welcome.

                                                              Responder — a familiar HTTP service framework for Python.
                                                              - v3.5.0 + v3.6.0

                                                              Useful Links

                                                                diff --git a/objects.inv b/objects.inv index aaa6ecf..a04e6a1 100644 --- a/objects.inv +++ b/objects.inv @@ -1,6 +1,6 @@ # Sphinx inventory version 2 # Project: responder -# Version: 3.5.0 +# Version: 3.6.0 # The remainder of this file is compressed using zlib. xڥXKs8 Whf{&ǥ>;Ig;;{$&E4 %9NM7>ˮBVC~7/ټ7[hP3eK]NB 5ڀ*,OwiKA mA])&?\v^9^a$cX  `1|FK^1 zN3KmXUo$Rn NP^`*F:,dEGvfI4Һ3Ֆ)iLߵ$j!&M}iDTV5Y-I P)^ch:g5Ta&5$ k<nwEoA9mϕxzpmRWN ~'D!ӪP f-7W&ޅ0xTO Fc產f++9xP3S7~]ΊvQy|KEu̪v77NOm;^3oN}-?9'6ՇJҹ'sWP2\6sdy'?(f d@ž8 ));A~ PAQ6sƚ4eso0k,`MlGb@Gf@iގב װ?nOVxfWhGLn~0 diff --git a/py-modindex.html b/py-modindex.html index 2f5a48b..c7cdf02 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -4,13 +4,13 @@ - Python Module Index — responder 3.5.0 documentation + Python Module Index — responder 3.6.0 documentation - + @@ -76,7 +76,7 @@

                                                                Responder — a familiar HTTP service framework for Python.
                                                                - v3.5.0 + v3.6.0

                                                                Useful Links

                                                                  diff --git a/quickstart.html b/quickstart.html index 018cb91..0fe6901 100644 --- a/quickstart.html +++ b/quickstart.html @@ -5,13 +5,13 @@ - Quick Start — responder 3.5.0 documentation + Quick Start — responder 3.6.0 documentation - + @@ -409,7 +409,7 @@ jump into the tutorials:

                                                                  Responder — a familiar HTTP service framework for Python.
                                                                  - v3.5.0 + v3.6.0

                                                                  Useful Links

                                                                    diff --git a/sandbox.html b/sandbox.html index 7361e08..3065772 100644 --- a/sandbox.html +++ b/sandbox.html @@ -5,13 +5,13 @@ - Development Sandbox — responder 3.5.0 documentation + Development Sandbox — responder 3.6.0 documentation - + @@ -120,7 +120,7 @@ make html

                                                                    Responder — a familiar HTTP service framework for Python.
                                                                    - v3.5.0 + v3.6.0

                                                                    Useful Links

                                                                      diff --git a/search.html b/search.html index 1675b3a..b42f864 100644 --- a/search.html +++ b/search.html @@ -4,14 +4,14 @@ - Search — responder 3.5.0 documentation + Search — responder 3.6.0 documentation - + @@ -85,7 +85,7 @@

                                                                      Responder — a familiar HTTP service framework for Python.
                                                                      - v3.5.0 + v3.6.0

                                                                      Useful Links

                                                                        diff --git a/searchindex.js b/searchindex.js index 4894f76..9eac755 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles":{"API Key Authentication":[[11,"api-key-authentication"]],"API Reference":[[0,null]],"Added":[[2,"added"],[2,"id2"],[2,"id4"],[2,"id7"],[2,"id11"],[2,"id17"],[2,"id18"],[2,"id21"],[2,"id24"],[2,"id29"],[2,"id36"],[2,"id42"],[2,"id43"],[2,"id44"],[2,"id45"],[2,"id46"],[2,"id49"],[2,"id50"],[2,"id52"],[2,"id55"],[2,"id58"],[2,"id59"],[2,"id60"],[2,"id64"]],"Adding Third-Party Middleware":[[13,"adding-third-party-middleware"]],"After-Request Hooks":[[10,"after-request-hooks"]],"Allowed Hosts":[[5,"allowed-hosts"]],"Authentication":[[11,null]],"Background Queue":[[0,"background-queue"]],"Background Tasks":[[7,"background-tasks"]],"Backlog":[[1,null]],"Bearer Token Authentication":[[11,"bearer-token-authentication"]],"Before-Request Hooks":[[10,"before-request-hooks"]],"Before-Request Hooks for WebSockets":[[16,"before-request-hooks-for-websockets"]],"Blueprints \u2192 Route Groups":[[12,"blueprints-route-groups"]],"Building Frontend Assets":[[3,"building-frontend-assets"]],"Building a REST API":[[14,null]],"Built-in Middleware":[[13,"built-in-middleware"]],"CORS":[[10,"cors"]],"CRUD Endpoints":[[15,"crud-endpoints"]],"Changed":[[2,"changed"],[2,"id1"],[2,"id3"],[2,"id5"],[2,"id8"],[2,"id16"],[2,"id19"],[2,"id22"],[2,"id25"],[2,"id28"],[2,"id33"],[2,"id34"],[2,"id35"],[2,"id37"],[2,"id38"],[2,"id40"],[2,"id41"],[2,"id47"],[2,"id51"],[2,"id56"],[2,"id57"],[2,"id63"]],"Changelog":[[2,null]],"Chat Room":[[16,"chat-room"]],"Choosing an Auth Strategy":[[11,"choosing-an-auth-strategy"]],"Class-Based Views":[[10,"class-based-views"]],"Cloud Platforms":[[4,"cloud-platforms"]],"Code Formatting":[[8,"code-formatting"]],"Command Line Interface":[[3,null]],"Configuration":[[5,null]],"Configuration Class Pattern":[[5,"configuration-class-pattern"]],"Connection Lifecycle":[[16,"connection-lifecycle"]],"Content Negotiation":[[10,"content-negotiation"]],"Cookie-Based Sessions":[[10,"cookie-based-sessions"]],"Cookies":[[10,"cookies"]],"Create a Book":[[14,"create-a-book"]],"Create a Web Service":[[7,"create-a-web-service"]],"Custom Error Handling":[[10,"custom-error-handling"]],"Custom Exception for Auth Errors":[[11,"custom-exception-for-auth-errors"]],"Custom Instance Names":[[3,"custom-instance-names"]],"Data Formats":[[16,"data-formats"]],"Database Setup":[[15,"database-setup"]],"Debug Mode":[[5,"debug-mode"]],"Define Your Models":[[14,"define-your-models"],[15,"define-your-models"]],"Delete a Book":[[14,"delete-a-book"]],"Deployment":[[4,null]],"Deprecated":[[2,"deprecated"]],"Development Sandbox":[[8,null]],"Docker":[[4,"docker"]],"Docker Compose":[[4,"docker-compose"]],"Documentation":[[8,"documentation"]],"Echo Server":[[16,"echo-server"]],"Environment Variables":[[3,"environment-variables"],[5,"environment-variables"]],"Error Handling":[[14,"error-handling"]],"Feature Tour":[[10,null]],"Fixed":[[2,"fixed"],[2,"id6"],[2,"id10"],[2,"id12"],[2,"id13"],[2,"id14"],[2,"id15"],[2,"id20"],[2,"id23"],[2,"id26"],[2,"id27"],[2,"id30"],[2,"id31"],[2,"id32"],[2,"id39"],[2,"id48"],[2,"id53"],[2,"id54"],[2,"id61"],[2,"id62"]],"Future Ideas":[[1,"future-ideas"]],"Get a Single Book":[[14,"get-a-single-book"]],"Getting Started":[[9,"getting-started"]],"Gradual Migration":[[12,"gradual-migration"]],"GraphQL":[[10,"graphql"]],"HSTS":[[10,"hsts"]],"HTML Client":[[16,"html-client"]],"Health Check Endpoint":[[4,"health-check-endpoint"]],"Hello World":[[7,"hello-world"]],"Hooks vs. Middleware":[[13,"hooks-vs-middleware"]],"How WebSockets Work":[[16,"how-websockets-work"]],"In-Memory Storage":[[14,"in-memory-storage"]],"Installation":[[6,"installation"],[15,"installation"]],"JSON APIs":[[12,"json-apis"]],"Launching from a File":[[3,"launching-from-a-file"]],"Launching from a Module":[[3,"launching-from-a-module"]],"Launching from a URL":[[3,"launching-from-a-url"]],"Lifespan Events":[[10,"lifespan-events"]],"Lifespan for Startup and Shutdown":[[15,"lifespan-for-startup-and-shutdown"]],"List All Books":[[14,"list-all-books"]],"MessagePack":[[10,"messagepack"]],"Method Filtering":[[10,"method-filtering"]],"Middleware Order":[[13,"middleware-order"]],"Migrating from Flask":[[12,null]],"Mounting Other Apps":[[10,"mounting-other-apps"]],"OpenAPI Documentation":[[10,"openapi-documentation"]],"Production Checklist":[[4,"production-checklist"]],"Project":[[6,null]],"Project Layout":[[8,"project-layout"]],"Project Setup":[[14,"project-setup"]],"Putting It All Together":[[5,"putting-it-all-together"],[7,"putting-it-all-together"]],"Pydantic Validation":[[10,"pydantic-validation"]],"Query Dict":[[0,"query-dict"]],"Quick Reference":[[12,"quick-reference"]],"Quick Start":[[7,null]],"Rate Limiter":[[0,"rate-limiter"]],"Rate Limiting":[[10,"rate-limiting"]],"Reading Requests":[[7,"reading-requests"]],"Removed":[[2,"removed"],[2,"id9"]],"Rendering Templates":[[7,"rendering-templates"]],"Request":[[0,"request"]],"Request ID":[[10,"request-id"]],"Responder":[[6,null]],"Response":[[0,"response"]],"Reverse Proxy":[[4,"reverse-proxy"]],"Role-Based Access Control":[[11,"role-based-access-control"]],"Route Groups":[[0,"route-groups"],[10,"route-groups"]],"Route Parameters":[[7,"route-parameters"],[12,"route-parameters"]],"Run It":[[14,"run-it"],[15,"run-it"]],"Run the Server":[[7,"run-the-server"]],"Running Locally":[[4,"running-locally"]],"Running Tests":[[8,"running-tests"]],"Secret Key":[[5,"secret-key"]],"Sending Responses":[[7,"sending-responses"]],"Server-Sent Events (SSE)":[[10,"server-sent-events-sse"]],"Serving Files":[[10,"serving-files"]],"Setup":[[8,"setup"]],"Skipping Auth for Public Routes":[[11,"skipping-auth-for-public-routes"]],"Static Files":[[10,"static-files"]],"Status Code Helpers":[[0,"status-code-helpers"]],"Structured Logging":[[10,"structured-logging"]],"Templates":[[12,"templates"]],"Testing":[[9,null]],"Testing Before and After Hooks":[[9,"testing-before-and-after-hooks"]],"Testing Error Handling":[[9,"testing-error-handling"]],"Testing File Uploads":[[9,"testing-file-uploads"]],"Testing Headers and Cookies":[[9,"testing-headers-and-cookies"]],"Testing JSON APIs":[[9,"testing-json-apis"]],"Testing Lifespan Events":[[9,"testing-lifespan-events"]],"Testing Mounted Apps":[[9,"testing-mounted-apps"]],"Testing Rate Limiting":[[9,"testing-rate-limiting"]],"Testing Request Validation":[[9,"testing-request-validation"]],"Testing WebSockets":[[9,"testing-websockets"],[16,"testing-websockets"]],"The API Class":[[0,"the-api-class"]],"The Big Differences":[[12,"the-big-differences"]],"The Idea":[[6,"the-idea"]],"Tips":[[9,"tips"],[15,"tips"]],"Trusted Hosts":[[10,"trusted-hosts"]],"Try It Out":[[14,"try-it-out"]],"Tutorials":[[6,null]],"Type Checking":[[8,"type-checking"]],"Type Convertors":[[7,"type-convertors"]],"Update a Book":[[14,"update-a-book"]],"User Guide":[[6,null]],"Using .env Files":[[5,"using-env-files"]],"Using Fixtures":[[9,"using-fixtures"]],"Using PostgreSQL":[[15,"using-postgresql"]],"Using SQLAlchemy":[[15,null]],"Using Sessions for Web Apps":[[11,"using-sessions-for-web-apps"]],"Using Starlette Middleware":[[13,"using-starlette-middleware"]],"Uvicorn Directly":[[4,"uvicorn-directly"]],"WebSocket Support":[[10,"websocket-support"]],"WebSocket Tutorial":[[16,null]],"What You Get":[[6,"what-you-get"]],"What\u2019s Next":[[14,"what-s-next"]],"When to Use What":[[13,"when-to-use-what"]],"Writing Middleware":[[13,null]],"Writing Pure ASGI Middleware":[[13,"writing-pure-asgi-middleware"]],"v0.0.1 - 2018-10-12":[[2,"v0-0-1-2018-10-12"]],"v0.0.10 - 2018-10-17":[[2,"v0-0-10-2018-10-17"]],"v0.0.2 - 2018-10-13":[[2,"v0-0-2-2018-10-13"]],"v0.0.3 - 2018-10-13":[[2,"v0-0-3-2018-10-13"]],"v0.0.4 - 2018-10-15":[[2,"v0-0-4-2018-10-15"]],"v0.0.5 - 2018-10-15":[[2,"v0-0-5-2018-10-15"]],"v0.0.6 - 2018-10-16":[[2,"v0-0-6-2018-10-16"]],"v0.0.7 - 2018-10-16":[[2,"v0-0-7-2018-10-16"]],"v0.0.8 - 2018-10-17":[[2,"v0-0-8-2018-10-17"]],"v0.0.9 - 2018-10-17":[[2,"v0-0-9-2018-10-17"]],"v0.1.0 - 2018-10-17":[[2,"v0-1-0-2018-10-17"]],"v0.1.1 - 2018-10-17":[[2,"v0-1-1-2018-10-17"]],"v0.1.2 - 2018-10-18":[[2,"v0-1-2-2018-10-18"]],"v0.1.3 - 2018-10-18":[[2,"v0-1-3-2018-10-18"]],"v0.1.4 - 2018-10-19":[[2,"v0-1-4-2018-10-19"]],"v0.1.5 - 2018-10-20":[[2,"v0-1-5-2018-10-20"]],"v0.1.6 - 2018-10-20":[[2,"v0-1-6-2018-10-20"]],"v0.2.0 - 2018-10-22":[[2,"v0-2-0-2018-10-22"]],"v0.2.1 - 2018-10-23":[[2,"v0-2-1-2018-10-23"]],"v0.2.2 - 2018-10-23":[[2,"v0-2-2-2018-10-23"]],"v0.2.3 - 2018-10-24":[[2,"v0-2-3-2018-10-24"]],"v0.3.0 - 2018-10-24":[[2,"v0-3-0-2018-10-24"]],"v0.3.1 - 2018-10-24":[[2,"v0-3-1-2018-10-24"]],"v0.3.2 - 2018-10-25":[[2,"v0-3-2-2018-10-25"]],"v0.3.3 - 2018-10-25":[[2,"v0-3-3-2018-10-25"]],"v1.0.0 - 2018-10-26":[[2,"v1-0-0-2018-10-26"]],"v1.0.1 - 2018-10-26":[[2,"v1-0-1-2018-10-26"]],"v1.0.2 - 2018-10-27":[[2,"v1-0-2-2018-10-27"]],"v1.0.3 - 2018-10-27":[[2,"v1-0-3-2018-10-27"]],"v1.0.4 - 2018-10-27":[[2,"v1-0-4-2018-10-27"]],"v1.0.5- 2018-10-27":[[2,"v1-0-5-2018-10-27"]],"v1.1.0 - 2018-10-27":[[2,"v1-1-0-2018-10-27"]],"v1.1.1 - 2018-10-29":[[2,"v1-1-1-2018-10-29"]],"v1.1.2 - 2018-11-11":[[2,"v1-1-2-2018-11-11"]],"v1.1.3 - 2019-01-12":[[2,"v1-1-3-2019-01-12"]],"v1.2.0 - 2018-12-29":[[2,"v1-2-0-2018-12-29"]],"v1.3.0 - 2019-02-22":[[2,"v1-3-0-2019-02-22"]],"v1.3.1 - 2019-04-28":[[2,"v1-3-1-2019-04-28"]],"v1.3.2 - 2019-08-15":[[2,"v1-3-2-2019-08-15"]],"v2.0.0 - 2019-09-19":[[2,"v2-0-0-2019-09-19"]],"v2.0.1 - 2019-09-20":[[2,"v2-0-1-2019-09-20"]],"v2.0.2 - 2019-09-20":[[2,"v2-0-2-2019-09-20"]],"v2.0.3 - 2019-09-20":[[2,"v2-0-3-2019-09-20"]],"v2.0.4 - 2019-11-19":[[2,"v2-0-4-2019-11-19"]],"v2.0.5 - 2019-12-15":[[2,"v2-0-5-2019-12-15"]],"v3.0.0 - 2026-03-22":[[2,"v3-0-0-2026-03-22"]],"v3.2.0 - 2026-03-22":[[2,"v3-2-0-2026-03-22"]],"v3.3.0 - 2026-03-22":[[2,"v3-3-0-2026-03-22"]],"v3.4.0 - 2026-03-22":[[2,"v3-4-0-2026-03-22"]],"v3.5.0 - 2026-03-24":[[2,"v3-5-0-2026-03-24"]]},"docnames":["api","backlog","changes","cli","deployment","guide-config","index","quickstart","sandbox","testing","tour","tutorial-auth","tutorial-flask","tutorial-middleware","tutorial-rest","tutorial-sqlalchemy","tutorial-websockets"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1},"filenames":["api.rst","backlog.md","changes.md","cli.rst","deployment.rst","guide-config.rst","index.rst","quickstart.rst","sandbox.md","testing.rst","tour.rst","tutorial-auth.rst","tutorial-flask.rst","tutorial-middleware.rst","tutorial-rest.rst","tutorial-sqlalchemy.rst","tutorial-websockets.rst"],"indexentries":{"accepts() (responder.request method)":[[0,"responder.Request.accepts",false]],"add_event_handler() (responder.api method)":[[0,"responder.API.add_event_handler",false]],"add_middleware() (responder.api method)":[[0,"responder.API.add_middleware",false]],"add_route() (responder.api method)":[[0,"responder.API.add_route",false]],"after_request() (responder.api method)":[[0,"responder.API.after_request",false]],"api (class in responder)":[[0,"responder.API",false]],"apparent_encoding (responder.request property)":[[0,"responder.Request.apparent_encoding",false]],"backgroundqueue (class in responder.background)":[[0,"responder.background.BackgroundQueue",false]],"before_request() (responder.api method)":[[0,"responder.API.before_request",false]],"check() (responder.ext.ratelimit.ratelimiter method)":[[0,"responder.ext.ratelimit.RateLimiter.check",false]],"client (responder.request property)":[[0,"responder.Request.client",false]],"content (responder.request property)":[[0,"responder.Request.content",false]],"cookies (responder.request property)":[[0,"responder.Request.cookies",false]],"encoding (responder.request property)":[[0,"responder.Request.encoding",false]],"exception_handler() (responder.api method)":[[0,"responder.API.exception_handler",false]],"file() (responder.response method)":[[0,"responder.Response.file",false]],"full_url (responder.request property)":[[0,"responder.Request.full_url",false]],"get() (responder.models.querydict method)":[[0,"responder.models.QueryDict.get",false]],"get_list() (responder.models.querydict method)":[[0,"responder.models.QueryDict.get_list",false]],"graphql() (responder.api method)":[[0,"responder.API.graphql",false]],"group() (responder.api method)":[[0,"responder.API.group",false]],"headers (responder.request property)":[[0,"responder.Request.headers",false]],"install() (responder.ext.ratelimit.ratelimiter method)":[[0,"responder.ext.ratelimit.RateLimiter.install",false]],"is_100() (in module responder.status_codes)":[[0,"responder.status_codes.is_100",false]],"is_200() (in module responder.status_codes)":[[0,"responder.status_codes.is_200",false]],"is_300() (in module responder.status_codes)":[[0,"responder.status_codes.is_300",false]],"is_400() (in module responder.status_codes)":[[0,"responder.status_codes.is_400",false]],"is_500() (in module responder.status_codes)":[[0,"responder.status_codes.is_500",false]],"is_json (responder.request property)":[[0,"responder.Request.is_json",false]],"is_secure (responder.request property)":[[0,"responder.Request.is_secure",false]],"items() (responder.models.querydict method)":[[0,"responder.models.QueryDict.items",false]],"items_list() (responder.models.querydict method)":[[0,"responder.models.QueryDict.items_list",false]],"media() (responder.request method)":[[0,"responder.Request.media",false]],"method (responder.request property)":[[0,"responder.Request.method",false]],"mimetype (responder.request property)":[[0,"responder.Request.mimetype",false]],"module":[[0,"module-responder",false]],"mount() (responder.api method)":[[0,"responder.API.mount",false]],"ok (responder.response property)":[[0,"responder.Response.ok",false]],"on_event() (responder.api method)":[[0,"responder.API.on_event",false]],"params (responder.request property)":[[0,"responder.Request.params",false]],"path_matches_route() (responder.api method)":[[0,"responder.API.path_matches_route",false]],"path_params (responder.request property)":[[0,"responder.Request.path_params",false]],"querydict (class in responder.models)":[[0,"responder.models.QueryDict",false]],"ratelimiter (class in responder.ext.ratelimit)":[[0,"responder.ext.ratelimit.RateLimiter",false]],"redirect() (responder.api method)":[[0,"responder.API.redirect",false]],"redirect() (responder.response method)":[[0,"responder.Response.redirect",false]],"request (class in responder)":[[0,"responder.Request",false]],"requests (responder.api property)":[[0,"responder.API.requests",false]],"responder":[[0,"module-responder",false]],"response (class in responder)":[[0,"responder.Response",false]],"route() (responder.api method)":[[0,"responder.API.route",false]],"routegroup (class in responder.api)":[[0,"responder.api.RouteGroup",false]],"run() (responder.api method)":[[0,"responder.API.run",false]],"run() (responder.background.backgroundqueue method)":[[0,"responder.background.BackgroundQueue.run",false]],"schema() (responder.api method)":[[0,"responder.API.schema",false]],"serve() (responder.api method)":[[0,"responder.API.serve",false]],"session (responder.request property)":[[0,"responder.Request.session",false]],"session() (responder.api method)":[[0,"responder.API.session",false]],"set_cookie() (responder.response method)":[[0,"responder.Response.set_cookie",false]],"sse() (responder.response method)":[[0,"responder.Response.sse",false]],"state (responder.request property)":[[0,"responder.Request.state",false]],"static_app (responder.api property)":[[0,"responder.API.static_app",false]],"status_code_safe (responder.response property)":[[0,"responder.Response.status_code_safe",false]],"stream() (responder.response method)":[[0,"responder.Response.stream",false]],"stream_file() (responder.response method)":[[0,"responder.Response.stream_file",false]],"task() (responder.background.backgroundqueue method)":[[0,"responder.background.BackgroundQueue.task",false]],"template() (responder.api method)":[[0,"responder.API.template",false]],"template_string() (responder.api method)":[[0,"responder.API.template_string",false]],"text (responder.request property)":[[0,"responder.Request.text",false]],"url (responder.request property)":[[0,"responder.Request.url",false]],"url_for() (responder.api method)":[[0,"responder.API.url_for",false]]},"objects":{"":[[0,0,0,"-","responder"]],"responder":[[0,1,1,"","API"],[0,1,1,"","Request"],[0,1,1,"","Response"]],"responder.API":[[0,2,1,"","add_event_handler"],[0,2,1,"","add_middleware"],[0,2,1,"","add_route"],[0,2,1,"","after_request"],[0,2,1,"","before_request"],[0,2,1,"","exception_handler"],[0,2,1,"","graphql"],[0,2,1,"","group"],[0,2,1,"","mount"],[0,2,1,"","on_event"],[0,2,1,"","path_matches_route"],[0,2,1,"","redirect"],[0,3,1,"","requests"],[0,2,1,"","route"],[0,2,1,"","run"],[0,2,1,"","schema"],[0,2,1,"","serve"],[0,2,1,"","session"],[0,3,1,"","static_app"],[0,2,1,"","template"],[0,2,1,"","template_string"],[0,2,1,"","url_for"]],"responder.Request":[[0,2,1,"","accepts"],[0,3,1,"","apparent_encoding"],[0,3,1,"","client"],[0,3,1,"","content"],[0,3,1,"","cookies"],[0,3,1,"","encoding"],[0,3,1,"","full_url"],[0,3,1,"","headers"],[0,3,1,"","is_json"],[0,3,1,"","is_secure"],[0,2,1,"","media"],[0,3,1,"","method"],[0,3,1,"","mimetype"],[0,3,1,"","params"],[0,3,1,"","path_params"],[0,3,1,"","session"],[0,3,1,"","state"],[0,3,1,"","text"],[0,3,1,"","url"]],"responder.Response":[[0,2,1,"","file"],[0,3,1,"","ok"],[0,2,1,"","redirect"],[0,2,1,"","set_cookie"],[0,2,1,"","sse"],[0,3,1,"","status_code_safe"],[0,2,1,"","stream"],[0,2,1,"","stream_file"]],"responder.api":[[0,1,1,"","RouteGroup"]],"responder.background":[[0,1,1,"","BackgroundQueue"]],"responder.background.BackgroundQueue":[[0,2,1,"","run"],[0,2,1,"","task"]],"responder.ext.ratelimit":[[0,1,1,"","RateLimiter"]],"responder.ext.ratelimit.RateLimiter":[[0,2,1,"","check"],[0,2,1,"","install"]],"responder.models":[[0,1,1,"","QueryDict"]],"responder.models.QueryDict":[[0,2,1,"","get"],[0,2,1,"","get_list"],[0,2,1,"","items"],[0,2,1,"","items_list"]],"responder.status_codes":[[0,4,1,"","is_100"],[0,4,1,"","is_200"],[0,4,1,"","is_300"],[0,4,1,"","is_400"],[0,4,1,"","is_500"]]},"objnames":{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","function","Python function"]},"objtypes":{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:function"},"terms":{"":[0,2,3,4,5,6,7,9,10,11,12,13,15,16],"0":[0,3,4,5,7,10,14,15],"00":[0,10],"01":0,"03":10,"0441172719":14,"1":[0,1,3,4,5,7,9,10,11,12,14,16],"10":[0,6,7,10],"100":[0,2,10],"1000":16,"1001":16,"1008":16,"1011":16,"12":10,"127":[3,4,5],"13":4,"14":2,"150mb":4,"16":4,"1965":14,"2":[0,4,7,9,10,14,15,16],"200":[0,4,7,9,10,14],"201":[0,7,9,12,14,15],"2026":[0,10],"204":[14,15],"24":[10,11],"2m":10,"2xx":0,"3":[0,1,4,6,7,9,10,14,16],"30":4,"3000":5,"301":[0,7],"308":2,"32":5,"3600":[0,10],"3f":13,"4":[4,7],"40":2,"400":[0,2,9,10,14],"401":[0,10,11],"403":11,"404":[0,7,12,14,15],"41d4":7,"42":10,"422":[2,9,10,14],"429":[0,9,10],"446655440000":7,"500":[2,7,9,10,13,14],"5000":10,"5042":[3,4,7,10,11,14,16],"550e8400":7,"561":2,"60":[0,2,9,10],"600":[0,10],"7":[9,11],"8":0,"80":4,"8000":[4,7],"8192":0,"9":9,"978":14,"99":9,"A":[0,4,5,6,7,10,13,16],"And":[5,6,7,11],"As":[0,10],"But":[7,9,10],"By":[3,7,9,10,13,14],"For":[0,3,4,5,7,9,10,11,13,14,15],"If":[0,3,5,6,7,9,10,12,15],"In":[0,5,6,7,10,11,12,15,16],"It":[0,3,6,9,10,13],"No":[6,9,10,11,12,14],"Not":7,"On":[5,10],"One":[6,7,9],"Or":[0,5,8],"That":[4,6,7,9],"The":[2,3,4,5,7,9,10,11,13,14,15,16],"There":[9,10],"These":7,"To":[14,15],"Will":0,"With":[0,5],"_":9,"__call__":13,"__init__":[11,13],"__main__":[4,6,7,9,14,15],"__name__":[4,6,7,9,10,12,14,15],"__tablename__":15,"_route_for":2,"a1b2c3":10,"a2wsgi":2,"a716":7,"abc":14,"abc123":[0,9,10,11],"abil":2,"abl":0,"abort":12,"about":[4,7,9,12],"abov":[6,11],"abstract":[13,15],"accept":[0,1,2,7,9,10,16],"access":[0,2,4,6,10,13,15],"accumul":16,"acm":3,"across":[2,4,10,15],"activ":[8,16],"actual":[0,4,7,10],"ad":[0,6,10],"adapt":10,"add":[0,2,4,5,7,11,13,14,15,16],"add_event_handl":0,"add_head":[10,13],"add_middlewar":[0,13],"add_request_id":0,"add_rout":[0,10],"add_tim":[9,10],"add_vers":9,"addeventlisten":16,"addit":[0,10,13],"address":[0,5,7,10],"adher":2,"admin":11,"affect":10,"after":[0,6,7,11,15,16],"after_request":[0,2,9,10,13],"ag":[0,10],"again":11,"against":[0,4,10,11],"aggreg":4,"agre":7,"ahead":2,"ai":10,"aiosqlit":15,"alemb":15,"algorithm":11,"alias":2,"alic":10,"aliv":4,"all":[0,2,3,4,6,8,9,10,12,13,15,16],"alloc":9,"allow":[4,6,10],"allow_credenti":[0,10],"allow_head":[0,10],"allow_method":[0,5,10],"allow_origin":[0,5,10],"allow_origin_regex":0,"allowed_host":[0,5,9,10],"alongsid":10,"alpin":4,"alreadi":[0,9,10],"also":[0,2,3,7,9,10,16],"altern":[0,10],"alwai":[4,5,6,7,10,16],"an":[0,3,4,5,6,7,10,12,13,14,15,16],"analysi":10,"angle_bracket":12,"angular":10,"ani":[0,3,4,5,6,7,9,10,11,13,14,15,16],"annot":[2,6,7,10,15],"annual":[7,10],"answer":[10,16],"anyon":6,"anyth":7,"anywher":[4,10],"api":[2,3,4,5,6,7,8,10,13,15,16],"api_kei":11,"api_v1":12,"apispec":2,"app":[0,2,3,4,5,6,7,8,12,13,14,15,16],"appar":0,"apparent_encod":0,"appear":[0,10],"appendchild":16,"appli":[0,13],"applic":[0,2,3,4,5,7,9,10,11,13,14,15],"approach":[5,10,11,12,13],"appropri":[10,15],"ar":[0,2,3,4,6,7,9,10,11,12,13,15,16],"architectur":10,"aren":[7,13],"arg":[0,12],"argument":[0,2,7,12,13],"around":[0,6],"arriv":[7,12],"asgi":[0,2,4,6,7,10,12],"ask":[6,10,16],"assert":[9,16],"asset":[0,4,6,10],"assign":14,"associ":0,"astral":4,"async":[0,2,4,6,7,9,10,11,12,13,14,15,16],"async_sess":15,"async_sessionmak":15,"asynccontextmanag":[10,15],"asynchron":[2,4],"asyncio":[2,15],"asyncpg":[4,15],"attach":10,"attack":[4,5,10],"attribut":[0,3,15],"audio":16,"auth":[2,6,10,13],"auth_check":10,"auth_guard":11,"authent":[6,7,10,13,16],"autherror":11,"author":[0,7,10,11,13,14,15],"auto":[0,2,8,10,16],"auto_escap":0,"autobuild":8,"autoincr":15,"automat":[0,2,3,4,5,6,7,9,10,11,12,13,14,15],"avail":[0,7,10],"avoid":[9,10,13,16],"aw":4,"awai":16,"await":[0,2,7,9,10,11,12,13,14,15,16],"azur":[3,4],"b":[0,7,9,13,15,16],"back":[0,7,10,15,16],"background":[2,6,8],"backgroundqueu":0,"backlog":6,"bad":[9,10,14],"balanc":4,"bandwidth":10,"bar":10,"bare":[2,16],"base":[0,2,6,13,15],"base_url":0,"basehttpmiddlewar":13,"basemodel":[0,9,10,14,15],"basic":7,"batteri":6,"battl":6,"bearer":6,"becaus":[0,6,7,11,12,14],"becom":[0,15],"been":0,"befor":[0,1,2,4,6,7,11,13,15],"before_request":[0,1,2,9,10,11,12,13,16],"begin":15,"behav":0,"behavior":[5,13],"behind":[4,10],"being":[0,10],"best":[6,11],"better":6,"between":13,"bidirect":[10,16],"big":6,"biggest":12,"bin":[4,8],"binari":[7,10,16],"bind":[0,3,4,5,7],"blob":3,"block":[0,7,9,10,12,16],"blocklist":11,"blueprint":6,"bodi":[0,2,7,9,10,12,14,16],"boilerpl":6,"book":[6,15],"book_id":[14,15],"bookin":[14,15],"bookout":15,"books_db":14,"bool":5,"born":6,"both":[6,7,10,12,16],"bottom":14,"boundari":10,"box":13,"bp":12,"break":[2,9],"bring":6,"broad":2,"broadcast":16,"broke":[7,9],"broker":7,"browser":[7,8,10,11,14,16],"bucket":[0,10],"buffer":[0,7],"bufix":2,"bug":[2,9,16],"bugfix":2,"build":[2,4,6,7,8,10,11,15,16],"builder":15,"built":[1,2,4,6,7,9,10,16],"bump":2,"bypass":[4,13],"byte":[0,2,6,7,13,16],"c":[5,16],"cach":[7,9,10],"caddi":4,"caddyfil":4,"call":[2,3,7,9,10,13,14,16],"call_next":13,"callabl":[0,13],"came":7,"can":[0,2,3,4,5,7,9,10,11,12,13,14,15,16],"carri":7,"case":[0,6,7,13],"cat":10,"catalog":14,"catch":[10,11,13,16],"categori":0,"cd":8,"ceas":2,"celeri":7,"cell":10,"central":[0,7],"certain":0,"certif":4,"chang":[0,15],"changelog":6,"channel":[10,16],"chardet":0,"chat":[2,6,10],"check":[0,6,9,10,11,13,16],"check_api_kei":11,"check_auth":0,"check_exist":[0,10,14,15],"checker":15,"checklist":6,"choic":[7,10],"choos":[6,10],"chunk":[0,10],"chunk_siz":0,"ci":2,"circuit":[0,1,2,10],"class":[2,6,7,8,9,11,13,14,15],"clean":[6,10,14],"cleaner":[10,11,15],"cleanli":5,"cleanup":[2,10],"clear":[11,16],"cli":[2,8,11],"click":6,"client":[0,2,6,7,9,10,11,14],"client_ip":10,"clone":8,"close":[9,10,15,16],"close_database_connection_pool":0,"closur":16,"cloud":[3,5,6,7],"cmd":4,"code":[2,3,4,5,6,7,9,10,11,14,15,16],"codebas":2,"coercion":10,"collabor":[10,16],"colon":3,"column":15,"com":[0,3,4,5,7,8,10],"combin":7,"come":[7,10,12],"command":[4,6],"commit":[5,15],"common":[0,3,4,5,7,10,11,12,13,14,16],"commonli":7,"commun":[7,10,11],"compact":10,"compat":[0,2],"complement":10,"complet":[7,10,14,16],"complex":[13,15],"compon":13,"compos":[6,15],"comprehens":2,"compress":[6,7,13],"compromis":5,"comput":7,"concept":[2,10,12],"concern":[7,13],"concurr":[0,4],"condit":[9,10],"config":[4,5,8,15],"configur":[0,2,4,6,7,9,10,13],"confirm":4,"conflict":2,"confus":9,"conn":15,"connect":[0,4,6,7,9,10,13,15],"consid":[7,15],"consist":[7,10],"consol":[10,15],"const":[10,16],"constructor":[0,13],"consum":10,"contact":0,"contain":[0,4,7],"container":4,"content":[0,2,6,7,8,9,13,14],"content_typ":[0,9,10],"context":[1,2,6,9,10,15,16],"contextlib":[10,15],"continu":7,"contract":9,"control":[0,4,5,6,7,10,13,15],"conveni":[0,5,15],"convent":[3,4,14],"convert":[2,7],"convertor":[2,6,12],"cooki":[0,2,5,6,7,11,12,13],"copi":4,"cor":[0,2,5,6,9,13],"core":[2,4],"coroutin":0,"correctli":4,"correspond":15,"cors_en":5,"cors_origin":5,"cors_param":[0,5,10],"corsmiddlewar":13,"count":2,"cover":[5,11,13],"coverag":[2,8],"cpu":[0,4,7],"crash":2,"creat":[0,6,9,10,11,12,15],"create_al":15,"create_asgi_app":10,"create_async_engin":15,"create_book":[14,15],"create_connect":16,"create_item":[0,10,12],"create_pet":10,"create_token":11,"createel":16,"creation":[13,15],"credenti":11,"cross":[10,13],"crud":[6,7,14],"css":10,"csv":[0,10],"curl":[3,4,7,10,11,14],"curly_brac":12,"current":10,"custom":[0,2,6,7,9,14,16],"cut":13,"cycl":7,"d":[7,9,10,14],"dashboard":[5,10,11,16],"data":[0,2,4,5,6,7,9,10,11,12,14,15],"databas":[4,5,6,7,9,10,11,14],"database_url":[4,5,15],"datadog":10,"date":0,"datetim":11,"db":[4,5,10,15],"dead":16,"debug":[0,2,4,6,10,12],"decim":7,"declar":[2,7],"declarativebas":15,"decod":[2,10,11],"decor":[0,2,7,10],"deep":6,"def":[0,4,6,7,9,10,11,12,13,14,15,16],"def456":11,"default":[0,2,3,4,5,7,9,10,15],"default_valu":[0,10],"defend":10,"defin":[0,6,7,10,11],"definit":0,"del":14,"delet":[5,6,7,10,15],"delete_book":[14,15],"deliber":7,"demo":3,"deni":13,"denpend":2,"dep":2,"depend":[1,2,4,8,9,13],"depends_on":4,"deploi":[4,6],"deploy":[2,6,7],"depth":10,"describ":10,"descript":[0,10],"design":[7,10,14],"detail":[4,5,10,14],"detect":[0,6,10],"dev":[2,4,5],"develop":[3,4,5,10,15],"devic":10,"dict":[6,7,10,11,14,15],"dictionari":0,"differ":[0,1,3,5,6,9,10,11,15],"digit":7,"direct":[0,2,10,13],"directli":[3,6,7,9,10,14,15],"directori":[0,7,10],"disabl":[4,9,15],"discard":16,"disconnect":16,"disk":[0,7,10],"dispatch":[2,10,13],"dispos":15,"distribut":[4,10],"div":16,"django":[6,10],"do":[4,5,7,10],"doc":[0,2,8,9,10,11,14],"docker":[5,6,7],"dockerfil":4,"docs_rout":[0,10,14],"docstr":[2,10],"doctyp":16,"document":[0,2,4,6,14,16],"doe":15,"doesn":[0,10,14,15],"domain":[0,4,5,10],"don":[4,5,7,9,10,11,12,15],"done":4,"dot":3,"dotenv":5,"doubl":14,"down":[10,15],"download":10,"downsid":11,"dramat":2,"driver":15,"drop":[2,16],"dump":2,"dune":14,"duplex":10,"duplic":10,"durat":13,"dure":[3,4,9,10,11,15],"duti":14,"dynam":7,"e":[0,10,16],"e29b":7,"each":[0,4,9,10,15],"easi":[3,5,7],"echo":[6,7,15],"ecosystem":[6,7],"edit":8,"editor":[10,16],"effect":[9,14],"effici":4,"either":[0,16],"element":[0,10],"els":[7,10,11,12,15],"email":7,"emb":[10,11],"emit":10,"empti":[0,14],"enabl":[0,2,4,10,13,14],"enable_async":7,"enable_hst":[0,10,13],"enable_log":[0,10],"encod":[0,2,11],"encrypt":11,"end":[7,14],"endpoint":[0,1,2,6,9,10,11,12,14],"enforc":10,"engin":[7,15],"enough":[4,13],"ensur":[10,14,15,16],"enter":[9,16],"entir":[0,4,10,11,13,14],"entiti":10,"entri":[8,14],"env":[4,6],"environ":[0,4,6,7],"eol":2,"equival":12,"error":[0,2,5,6,15,16],"errorhandl":12,"escap":0,"essenti":10,"establish":16,"etc":[7,9,10],"even":[3,4,10,16],"event":[0,2,6,7,12,16],"event_typ":0,"eventsourc":10,"ever":[5,6],"everi":[0,4,5,6,7,9,10,11,13,14,15],"everyth":[0,2,4,7,10,12,14,15,16],"everywher":[3,5],"evolv":15,"exact":2,"exactli":[9,10],"exampl":[0,2,3,4,5,7,8,10,11],"exc":[0,9,10,11,14],"exceed":[0,10],"except":[0,2,6,9,10,13,16],"exception_cl":0,"exception_handl":[0,2,9,10,11,12,14],"exceptionmiddlewar":13,"execut":15,"exist":[0,2,6,12,13],"exit":[4,9,10,16],"exp":11,"expand":2,"expect":7,"expens":4,"expir":[0,10,11],"expire_on_commit":15,"explain":10,"explan":0,"explicit":[7,10,12],"explicitli":[10,12],"explor":[7,10],"export":[0,5,10],"expos":[4,5],"expose_head":0,"express":[6,7],"ext":[0,2,8,9,10,15],"extens":[2,7,8],"extern":7,"extra":[2,4,10,13],"extract":0,"extrem":7,"f":[0,4,6,7,9,10,11,13,14,16],"factori":[11,15],"fail":[9,10,15],"failur":[2,8,9],"falcon":[6,10],"fall":0,"fals":[0,4,5,9,10,14,15],"familiar":[6,12],"fast":[4,6,7,9],"fastapi":6,"faster":[4,10,13],"featur":[0,6,7],"feed":10,"feel":6,"fetch":[3,10],"few":12,"fido":10,"field":[0,2,9,10,14],"figur":7,"file":[0,2,4,6,7,8,14,15,16],"filenam":[0,9],"filepath":7,"filesystem":[2,3],"fill":7,"filter":[6,7],"final":16,"find":[3,10,12],"fine":[4,10,13,15],"fire":[0,9],"first":[0,8,9,10,11,13,14,15],"fit":6,"fix":8,"fixtur":6,"flag":[4,10,15],"flask":[2,6,7,9,10],"flask_app":[9,10,12],"flatten":2,"float":[0,7,9,10],"flow":[11,13],"fly":[3,4],"fmt":2,"follow":7,"font":10,"forg":[5,10],"forget":0,"form":[0,7,11,12],"format":[0,2,6,7,10,11],"formatt":10,"formerli":10,"forward":[4,10],"found":[2,7,14,15],"foundat":10,"fragment":3,"frame":13,"framework":[6,10],"franca":7,"frank":14,"free":2,"freeli":16,"fresh":9,"from":[0,2,4,5,6,7,9,10,11,13,14,15,16],"from_attribut":15,"front":4,"frontend":[6,10],"fsspec":3,"full":[0,2,3,7,8,10],"full_url":[0,7,10],"fulli":[7,16],"fun":6,"func":0,"function":[0,7,10,12,13],"futur":[0,2,6],"g":[0,10],"game":[10,16],"gatewai":4,"gener":[0,2,5,6,9,10,13,14],"get":[0,2,5,7,10,11,15],"get_book":[14,15],"get_client_ip":10,"get_list":0,"get_logg":10,"get_m":11,"get_request_id":10,"get_us":[0,10,12],"getattr":11,"getelementbyid":16,"getenv":5,"getlist":0,"ghcr":4,"git":[5,8],"github":[2,3,8],"gitignor":5,"give":[0,9,10,13,15],"given":[0,9],"global":[12,14],"gmt":0,"go":[4,7,12,16],"goe":[10,12],"good":[4,6,10,11],"googl":[3,4],"got":16,"grace":4,"grade":7,"gradual":[6,10],"graduat":13,"grain":15,"graphen":[0,2,6,10],"graphiql":[2,6,10],"graphql":[0,2,6,8],"great":[3,6,10],"greet":[6,7,10],"greet_world":6,"greetingresourc":10,"group":[2,6],"grow":10,"guard":11,"guid":[2,5,7,11,12,15],"guido":7,"gzip":[6,7],"gzipmiddlewar":13,"h":[7,10,11,14],"h1":[0,7,11],"ha":[7,9,12,14,16],"half":7,"halv":10,"hand":0,"handl":[0,2,4,5,6,7,11,13,16],"handle_auth_error":11,"handle_value_error":[0,10,14],"handler":[0,1,6,9,10,11,13,14,16],"handshak":16,"happen":[6,7,10],"hard":9,"hasn":0,"have":[0,2,3,7,9,11,12,13,14],"hdf":3,"head":3,"header":[0,2,4,5,6,7,10,11,12,13,16],"health":[6,11],"healthcheck":4,"healthi":4,"heavi":7,"hello":[0,3,6,9,10,12,16],"hello_html":7,"hello_json":7,"hello_to":7,"hello_world":7,"helloworld":3,"help":[0,15],"helper":[6,10,11],"herbert":14,"here":[4,5,7,10,12,16],"heroku":[3,4],"high":[4,10],"hold":[0,6,7],"home":6,"homepag":2,"honor":[4,7],"hood":10,"hook":[0,2,6,7,11],"host":[0,2,4,6,7,9,13],"hostnam":10,"hour":[10,11],"how":[3,5,6,7,10,11,12,14,15],"hs256":11,"hst":6,"html":[0,2,6,7,8,10,11,12],"http":[0,2,3,4,5,6,7,8,9,10,11,13,14,16],"httponli":[0,10],"httpsredirect":0,"httpsredirectmiddlewar":[0,4,13],"httpx":[2,9],"i":[0,2,3,4,5,6,7,9,10,11,12,13,14,15,16],"id":[0,2,6,7,12,13,14,15,16],"idea":12,"idempot":14,"ident":12,"identifi":10,"imag":[4,7,10,16],"immedi":[0,6,7,10],"immut":2,"imperson":5,"implement":9,"import":[0,2,3,5,6,7,9,10,11,12,13,14,15,16],"improv":2,"inaccess":0,"includ":[3,4,6,7,9,10,11,14],"incom":[0,7,10,14],"incredibli":10,"independ":4,"index":[0,7,8,10,16],"individu":10,"industri":10,"info":[0,2,10],"inform":[0,14],"infrastructur":[4,6],"inherit":[0,10],"initi":[0,9,16],"inject":[1,3,10,13],"innermost":13,"input":[2,9,10,14,16],"insensit":[0,6,7],"insid":13,"inspect":[0,2],"instal":[0,2,3,4,5,8,9,10,11,16],"instanc":[0,4,6,7,9,10],"instant":7,"instantli":4,"instead":[0,7,9,10,13,14,15,16],"instruct":4,"insuffici":11,"int":[0,2,7,10,11,12,14,15],"integ":[0,7,14],"integr":[10,13,14,15],"intens":7,"intent":[6,16],"intention":10,"interact":[2,10,14],"interfac":[2,4,6,7,12],"intern":[9,10,11,13],"interv":4,"invalid":[5,9,10,11],"invalidtokenerror":11,"involv":0,"io":[3,4],"iot":10,"ip":[0,7,10],"is_100":0,"is_200":0,"is_300":0,"is_400":0,"is_500":0,"is_class_bas":2,"is_http":0,"is_json":[0,2,7],"is_secur":[0,7],"isbn":[14,15],"iscoroutinefunct":2,"isn":[7,10,12],"issu":[2,11],"item":[0,9,10,12,15],"itemin":[0,10],"itemout":[0,10],"items_list":0,"iter":16,"its":[0,2,4,14,15],"itself":[10,11],"j":10,"jan":0,"javascript":[0,3,10],"jinja2":[0,7,12],"jpeg":10,"jpg":10,"json":[0,3,6,7,8,10,11,14,16],"jsonifi":12,"jump":7,"just":[4,9,10,13,15,16],"jwt":11,"k":8,"keep":[2,4,5,7,9,10,13,15,16],"kei":[0,4,6,7,9,10,12,15,16],"kennethreitz":[3,8],"keypress":16,"keyword":[0,7,12,13],"know":[5,7],"known":[0,11],"kubernet":4,"kwarg":0,"languag":10,"larg":[0,2,10],"larger":[5,9,13],"last":[0,13],"later":[7,9],"latest":4,"launch":[4,6],"layer":13,"lazi":2,"lazili":0,"lead":9,"learn":10,"legaci":12,"less":10,"let":[3,4,7,10,14,15],"level":[4,13],"lib":4,"librari":[9,10,16],"licens":0,"lifecycl":[6,11],"lifespan":[0,2,6,14],"lift":7,"lightn":4,"lightweight":[4,7],"like":[0,3,4,7,9,10,11,13,14,16],"limit":[1,2,4,6,8,13,15,16],"line":[6,7],"liner":2,"lingua":7,"lint":8,"list":[0,6,7,9,10,13,15],"list_all_us":11,"list_book":[14,15],"list_item":10,"list_pet":10,"list_us":[0,10,12],"list_users_v2":10,"listen":3,"live":[4,8,10,16],"ll":[6,7,10,12,14,15],"load":[0,2,3,4,5,7,10],"load_dotenv":5,"local":[3,5,6,12],"localhost":[4,5,7,9,10,11,14,15,16],"locat":[0,7,11,12],"lock":4,"log":[1,4,6,11,13],"log_error":0,"log_level":2,"log_request":13,"log_respons":10,"logger":10,"logic":[6,7,10],"login":[10,11],"logout":11,"long":7,"look":[3,4,6,7],"loop":[7,12,16],"lose":[2,15,16],"lower":[0,5],"lowercas":7,"machin":10,"made":[0,6],"magic":12,"mai":4,"main":[3,8],"make":[4,5,7,8,9,10,11,12,16],"malici":10,"manag":[2,5,6,9,10,11,13,15,16],"mani":[0,4,7,10],"manual":0,"map":[2,7,10,12,15],"mapped_column":15,"mapper":15,"marimo":[2,10],"mark":[2,10],"marker":2,"marshmallow":[0,2,10],"match":[0,5,7,8,10,14],"matter":10,"max_ag":[0,10],"maximum":[0,13],"me":[0,11],"mean":[4,7,10,12],"mechan":10,"media":[0,2,4,6,7,9,10,11,12,14,15],"memori":[0,2,6,7,10],"messag":[0,7,10,11,13,16],"messagepack":[2,6],"metadata":[0,7,8,15],"method":[0,6,7,9,11,12,13,14,15,16],"microservic":10,"middelwar":0,"middlewar":[0,2,6,7,10],"middleware_cl":0,"middleware_config":0,"might":7,"migrat":[2,6,7,10,15],"mime":0,"mimetyp":[0,7,10],"min":[0,10],"mind":13,"minim":[4,16],"minimum":2,"minor":2,"miss":[2,9,10,11],"mix":10,"ml":10,"mobil":11,"mode":[0,4,6],"model":[0,2,6,8,9,10],"model_dump":15,"model_valid":15,"modern":[4,10,11,12],"modifi":[0,10,13,14,15],"modul":[0,2,6,7,10],"monitor":4,"more":[0,3,4,7,10,11,12,13,14,16],"most":[0,3,4,5,7,9,10,11,13,15],"mount":[0,2,6,12],"move":[2,7,10,12],"msgpack":[2,8,10],"much":[7,10],"multi":0,"multipart":[2,7],"multipl":[0,2,4,10,14],"multiplay":[10,16],"must":[0,7,10,11,14,16],"mutabl":6,"mutat":[0,7,12],"my":0,"my_templ":7,"myapi":4,"myapp":[3,4,10],"mydb":15,"mypi":8,"mysql":15,"n":[0,7],"name":[0,4,5,6,7,9,10,12],"namespac":2,"narrow":2,"nativ":12,"natur":[9,15],"nearli":12,"need":[4,5,6,7,9,10,11,12,13,15,16],"negoti":[0,6,7,8,9],"nervou":7,"network":[9,16],"never":[4,5,10,11,14],"new":[0,7,9,10,12,14,16],"new_endpoint":12,"next":[6,13,16],"next_id":14,"nginx":4,"non":7,"none":[0,2,11,14,15],"nonexist":16,"normal":[0,10,16],"nosniff":13,"notabl":2,"notasecret":0,"note":[7,10,12,14],"notebook":[2,10],"notic":7,"notif":10,"now":[2,7,10,11,15,16],"npm":3,"nullabl":15,"number":[0,7],"o":[0,3,5,7,12],"object":[0,2,7,10,12,13,15,16],"objecttyp":[0,10],"obviou":9,"octet":0,"off":[5,7],"offload":4,"offset":15,"often":[3,7,10],"ok":[0,7,9,14],"old":12,"older":15,"omit":4,"on_delet":10,"on_ev":[0,9,10],"on_get":[6,10],"on_post":[6,10],"on_put":10,"on_request":[6,10],"on_startup":9,"onc":[8,10,12,14],"one":[0,2,5,6,7,10,12,15],"ones":[6,7,10],"onion":13,"onli":[0,5,7,10,12,14],"onmessag":[10,16],"open":[2,7,8,15,16],"open_database_connection_pool":0,"openapi":[0,1,2,6,8,14],"openapi_rout":0,"openapi_them":0,"oper":[7,10,12,14],"opt":10,"option":[0,2,4,6,7,13],"option1":13,"option2":13,"orchestr":4,"order":[0,6],"order_bi":15,"organ":[0,5,9,10,12],"origin":[10,13],"orm":15,"other":[0,2,3,4,6,7,15],"otherwis":[0,10,16],"our":14,"out":[5,6,7,13],"outermost":13,"outgo":[7,10],"output":14,"outsid":13,"over":[0,6,7,10,12,15],"overal":2,"overhead":[9,13],"overrid":[0,10],"overwhelm":10,"own":[4,10,15],"p":[4,11,16],"pace":10,"packag":[2,3,4,8],"page":[0,2,5,7,10,11,16],"pagin":7,"painless":9,"pair":0,"param":[0,2,6,7,12],"paramet":[0,6,9,10,14],"parameter":0,"pars":[0,2,7,9,10],"parser":2,"part":[2,6,7,10],"parti":6,"pass":[0,3,4,7,9,10,12,13,15,16],"passion":6,"password":11,"patch":[7,10],"path":[0,2,3,6,7,9,10,11,13],"path_matches_rout":0,"path_param":[0,2,7],"pattern":[0,4,6,7,8,10,11,12,13,14,15],"payload":11,"pdf":[0,7,9,10],"pep":2,"per":[0,1,4,6,9,10],"perfect":10,"perfectli":13,"perform":13,"period":[0,2,9,10],"perman":7,"permiss":11,"permit":10,"persist":[0,10,16],"person":6,"pet":[0,10],"petin":10,"petout":10,"petschema":[0,10],"pgdata":4,"photo":10,"piec":10,"pin":[2,4],"pip":[2,3,4,5,6,8,11,15,16],"pipe":4,"place":[5,10],"placehold":[7,16],"plain":[0,7,10,13,16],"platform":[2,3,5,6,7],"pleasant":6,"plot":10,"plu":15,"plugin":2,"poethepoet":2,"point":[3,4,8,14],"polici":[10,13,16],"poll":4,"pool":[0,6,7,10,12,15],"popular":[7,10,15],"port":[0,3,4,5,7,9],"portion":0,"possibl":7,"post":[0,5,7,9,10,11,12,14,15],"postgr":4,"postgres_db":4,"postgres_password":4,"postgres_us":4,"postgresql":[4,6],"potenti":2,"power":[6,9,10,13,15,16],"practic":10,"prefer":10,"prefix":[0,2,10],"present":7,"prevent":[5,10],"price":[0,9,10],"primari":0,"primary_kei":15,"print":[0,5,10,13,15,16],"privat":10,"proce":16,"process":[0,4,6,7,9,10,13],"process_data":7,"procfil":4,"prod":5,"produc":[0,7],"product":[2,3,5,6,7,9,10,11,15],"profil":10,"programmat":10,"progress":10,"project":[2,3],"propag":9,"proper":[7,11,15],"properli":[2,5,9,15,16],"properti":[0,2,7,9],"prose":2,"protect":[4,11],"proto":4,"protocol":[3,7,9,10,13,16],"prototyp":[2,3,6],"provid":0,"proxi":6,"public":[0,6,10],"public_path":11,"pure":6,"push":[4,6,10],"put":[6,10,14,15],"py":[2,3,4,5,7,8,9,10,14,15],"pydant":[0,2,6,9,14,15],"pyjwt":11,"pypi":2,"pyproject":[2,8],"pytest":[6,7,8,9,16],"python":[0,2,3,4,5,6,7,10,14,15,16],"pythonpath":3,"q":[0,7,12],"queri":[2,4,6,7,10,15,16],"query_str":0,"querydict":0,"queue":[6,7,8],"quick":[0,3,6],"r":[7,9],"race":9,"railwai":[3,4],"rais":[0,2,9,10,11,16],"raise_server_except":9,"random":[0,5],"rang":[0,7,9,10],"rapidoc":[0,10],"rare":7,"rate":[1,2,4,6,8,13],"rate_limit":0,"ratelimit":[0,2,6,9,10,13],"rather":[9,16],"raw":[0,3,6,7,10,13,15,16],"re":[0,4,7,9,10,12,13,14,16],"reach":[11,13],"react":[2,10],"reactiv":10,"read":[0,2,3,5,6,10,11,12,14,15],"readabl":10,"readi":[4,5,6,7],"real":[2,5,6,7,10,11,14,15,16],"realli":[9,10],"receiv":[0,6,7,9,10,11,13,16],"receive_byt":[10,16],"receive_incom":7,"receive_json":[10,16],"receive_text":[9,10,16],"recommend":10,"reconnect":10,"recv":16,"redirect":[0,2,7,11,12],"redoc":[0,10],"reduc":2,"ref":3,"refactor":[2,9],"refer":[2,6,9],"referr":13,"refresh":15,"refus":10,"regist":[0,9,10,11],"register_blueprint":12,"reject":[1,9,10,16],"relat":[0,10,15],"releas":8,"reliabl":9,"reload":8,"remain":[0,9,10],"rememb":11,"remov":[10,12,14,16],"renam":9,"render":[0,4,6,10],"render_async":7,"render_templ":12,"replac":[2,7,10,14],"repo":8,"report":[7,9,10],"repres":0,"represent":0,"reproduc":4,"req":[0,2,4,6,7,9,10,11,12,13,14,15,16],"request":[1,2,3,4,6,8,11,12,13,14,15],"request_id":[0,2,10,13],"request_model":[0,2,9,10,14,15],"requestcontext":10,"requir":[0,2,4,9,10],"require_rol":11,"research":6,"resolv":[2,10],"resolve_hello":[0,10],"resourc":[7,10,14],"resp":[0,2,4,6,7,9,10,11,12,13,14,15,16],"respect":3,"respond":[0,2,3,4,5,7,8,9,10,11,12,13,14,15,16],"respons":[2,6,8,9,10,12,13,14,15,16],"response_model":[0,2,10,14,15],"rest":[2,4,6,7,10],"restrict":[4,10,11],"result":[0,2,7,10,15],"resum":2,"resume_incomplet":2,"retri":[0,10],"retriev":[0,10,14],"return":[0,2,4,6,7,9,10,11,12,13,14,15],"reusabl":11,"revers":[0,6],"reverse_proxi":4,"revok":11,"rework":2,"rewrit":2,"rewrot":2,"rfc3986":2,"right":[6,7,10,12,13],"role":6,"roll":15,"room":6,"root":[2,10],"rotat":5,"rout":[1,2,4,6,8,9,13,14,15,16],"routegroup":0,"router":[2,8],"rst":2,"ruff":[2,8],"rule":5,"run":[0,2,3,6,9,10,12,13,16],"run_sync":15,"runnabl":8,"runner":[2,4],"runtim":3,"runtimeerror":0,"s3":3,"safe":[2,14],"sai":7,"said":4,"same":[3,4,6,7,10,12,13,14,15],"sandbox":6,"save":[7,16],"scalar":15,"scale":[6,11],"schema":[0,2,6,10,11,14,15],"scope":[0,10,13],"scratch":[6,14],"script":16,"search":[0,2,7,10],"searchabl":10,"second":0,"secret":[4,6,7,10,11],"secret_kei":[0,3,4,5,10,11],"section":10,"secur":[0,10,13],"securityheadersmiddlewar":13,"see":[0,4,5,7,9,10,13,14,15],"select":[0,2,15],"self":[0,10,11,13],"semant":2,"send":[0,2,6,9,10,11,13,14,16],"send_byt":[10,16],"send_email":0,"send_json":[10,16],"send_text":[9,10,16],"send_with_head":13,"sensit":11,"sent":[0,2,6,7,13],"sentri":10,"separ":[7,9,14],"sequenti":2,"serial":[0,2,6,7,10,16],"serializ":7,"serv":[0,2,3,4,5,6,7,9,14,16],"server":[0,2,3,4,5,6,8,9,11,13,14,15],"servererrormiddlewar":13,"servestat":2,"servic":[0,3,4,6,9,10,11,14],"session":[0,2,5,6,7,9,12,13,15],"session_id":10,"sessionmiddlewar":13,"set":[0,2,3,4,5,6,7,9,10,11,15,16],"set_cooki":[0,2,10],"set_text":0,"setattr":15,"setup":[2,5,6,9],"sever":[10,13,16],"sftp":3,"sh":4,"shape":10,"share":[0,3,7,9,10,15],"shell":5,"short":[0,1,2,10],"shorthand":0,"should":[4,5,14,15],"shouldn":0,"show":[2,10,12,15,16],"shut":[10,15],"shutdown":[0,4,6,9,10],"shutdwown":2,"sibl":6,"side":[7,10,11,16],"sign":[0,5,6,7,10,11,13],"signatur":[7,10,12],"significantli":4,"signup":11,"simpl":[3,4,9,10,11,13,14,16],"simplecooki":0,"simpler":[7,10,11,13],"simplest":[5,7,11,13,16],"simpli":11,"simplic":[6,15],"simul":7,"sinc":[7,9],"singl":[0,2,3,6,7,8,10,12,15],"sit":13,"size":[0,15],"sk":11,"skip":[0,6,10],"slash":7,"sleep":[7,9],"slim":4,"slow":7,"slowlori":4,"slug":7,"small":[4,6,9,10],"smaller":4,"so":[9,10,11,12,13,14,15],"solv":10,"some":[4,5,10],"some_packag":13,"somemiddlewar":13,"someon":[5,7,10,16],"someth":[6,7,9,10],"sometim":[7,10],"somewher":7,"sourc":[0,5,8,10],"spa":11,"spawn":4,"spec":[7,10],"special":[6,10],"specif":[0,2,5,9,10,11,13,14,16],"specifi":3,"sphinx":8,"spin":7,"split":5,"sprawl":6,"sql":15,"sqlalchemi":[2,6,7,14],"sqlite":[5,15],"sse":[0,2,6],"ssl":4,"stabil":2,"stack":13,"stai":[12,15],"standard":[3,4,10,11,14],"starlett":[0,2,6,9,16],"start":[0,3,4,6,10,11,13,14,15],"startswith":11,"startup":[0,2,6,9,10],"state":[0,2,9,10,11,16],"stateless":11,"statement":6,"static":[0,2,4,6,7,16],"static_app":0,"static_dir":[0,10],"static_rout":[0,2,10],"staticfil":0,"statu":[2,4,6,7,9,10,14],"status_cod":[0,6,7,9,10,11,12,13,14,15],"status_code_saf":0,"stderr":0,"stdlib":2,"still":[10,12],"stop":[8,10],"storag":[3,6],"store":[0,5,10,11,14],"str":[0,7,9,10,11,14,15],"straightforward":10,"stranger":[0,10],"strategi":6,"stream":[0,2,6,10,13],"stream_data":0,"stream_fil":[0,2,10],"strict":[10,13],"string":[0,6,7,10,15,16],"strip":[2,10,11],"structur":[1,6],"style":[10,15],"stylesheet":10,"sub":11,"subclass":0,"subcommand":3,"subject":0,"submiss":0,"submit":0,"subrout":[6,9,10,12],"subsequ":[10,11],"subtl":2,"succe":9,"success":[0,7,14],"successfulli":14,"successor":4,"suit":[8,9],"supersed":10,"suppli":2,"support":[0,1,2,3,4,6,7,12,15,16],"swagger":[0,6,10,14],"swagger_ui":[0,10],"swallow":16,"switch":[2,15,16],"sync":[2,6,7,12],"synchron":[0,12],"syntax":[2,6,7,12,15],"synthet":9,"syslog":10,"system":[3,4,7,10],"t":[0,4,5,7,9,10,11,12,13,14,15],"tab":16,"tabl":15,"tag":0,"take":[6,7],"tamper":[10,11],"target":2,"task":[0,2,6,8],"teach":6,"tear":10,"tell":[7,10,14,15],"templat":[0,2,6],"template_str":[0,7],"templates_dir":0,"termin":[3,4,16],"terms_of_servic":0,"test":[0,2,3,5,6,7,14],"test_500":[2,9],"test_api":9,"test_create_item":9,"test_custom_error":9,"test_echo":16,"test_flask_mount":9,"test_head":9,"test_hello":9,"test_hook":9,"test_json":9,"test_mount":8,"test_rate_limit":9,"test_respond":8,"test_upload":9,"test_valid":9,"test_websocket":9,"test_websocket_404":16,"test_with_lifespan":9,"testclient":[0,2,9,16],"text":[0,2,6,7,9,10,12,16],"textcont":16,"than":[4,9,10,11,12,13,14,15,16],"thei":[0,5,7,9,10,11,12,13,14,16],"them":[3,4,6,7,9,10,11,12,14,16],"theme":[0,10],"themselv":10,"thi":[0,2,3,4,5,6,7,9,10,11,12,13,14,15,16],"thing":[5,6,7,9,10,13],"think":7,"third":[6,9],"though":4,"thousand":4,"thread":[0,2,6,7,12],"threadpoolexecutor":[0,2],"three":[7,10,16],"through":[0,7,10,13,14,16],"throughput":10,"thu":0,"ti":4,"time":[0,2,6,7,9,10,12,13,14,15,16],"time_start":0,"timedelta":11,"timeout":4,"timezon":11,"timingmiddlewar":13,"tip":[2,6],"titl":[0,2,7,10,14,15],"tl":4,"togeth":[4,6,10],"token":[0,6,7,10,16],"token_hex":5,"toml":[2,8],"too":[0,3,4,9,10],"tool":[4,8,11,13],"toolbelt":2,"toolkit":15,"top":[0,5],"total":10,"tour":[0,6,7],"trace":10,"traceback":[0,2,5,10],"track":15,"tradit":[10,11],"traffic":4,"transact":15,"transform":13,"translat":12,"transport":10,"treat":[0,10],"trick":10,"trigger":9,"true":[0,2,5,7,9,10,11,12,13,15,16],"trust":[2,6,9],"trustedhostmiddlewar":[4,13],"try":[6,7,11,16],"tupl":[0,7,9],"tutori":[2,7,14],"two":[7,9,10,13],"type":[0,2,6,10,12,13,14,15,16],"typic":[7,10],"typo":[2,10],"ui":[0,2,6,10,14],"unauthor":[0,10,11],"under":[0,7,10,12],"underlin":2,"understand":[6,7],"unexpectedli":16,"unhandl":13,"unicod":0,"union":2,"uniqu":10,"unit":15,"univers":5,"unknown":0,"unless":[10,11],"unlik":10,"unmaintain":2,"unmatch":10,"unpin":2,"unprocess":10,"unrecogn":10,"until":7,"up":[0,2,4,7,10],"updat":[2,6,7,10,15,16],"update_book":[14,15],"upgrad":[2,8,10,16],"upload":[0,2,6,7],"url":[0,2,5,6,7,9,10,11,12,13,15],"url_for":[0,2,9],"url_prefix":12,"urllib":2,"us":[0,2,3,4,6,7,10,12,14,16],"usag":[0,2],"user":[0,4,5,7,10,11,12,15],"user_id":[7,10,11,12],"user_rol":11,"usernam":[10,11],"usr":4,"usual":9,"utc":11,"utf":0,"uuid":[0,2,7,10],"uuid4":0,"uv":[3,4,5,6,8,11,15],"uvicorn":[0,2,6,7,13],"uvloop":4,"v":6,"v1":[0,10],"v2":10,"valid":[0,2,6,7,11,13,14,15],"valu":[0,6,7,9,10,11,12,13,14,15,16],"valueerror":[0,9,10,12,14],"var":4,"variabl":[0,4,6,7],"ve":[6,9,12],"venv":8,"verb":10,"veri":[0,7,15],"verif":11,"verifi":[4,9,11],"verify_token":11,"version":[0,2,6,9,10,14],"via":[0,2,4,5,10,12],"view":[0,2,6,7,9,12],"violat":16,"virtual":[3,4],"visit":[10,14],"volum":4,"vue":10,"w":[9,10,16],"wa":[0,2,7,14],"wai":[3,4,6,7,10,11,12,13,15],"wait":[4,12],"walk":[7,10,14],"walkthrough":10,"want":[0,3,4,6,7,9,10,13,14,15,16],"warn":2,"watch":8,"we":[14,15,16],"web":[0,4,6,10,15],"websit":10,"websocket":[0,1,2,4,6,7,13],"websocket_connect":[9,16],"websocketdisconnect":16,"websocketrout":8,"welcom":[6,7,11],"well":[6,11],"went":6,"werkzeug":[2,9],"what":[0,7,9,10,16],"whatev":[7,10],"when":[0,2,3,4,5,6,7,9,10,12,14,15,16],"where":[0,4,7,10,11,15,16],"whether":[0,7],"which":[0,2,7,9,10,12,15],"whichev":6,"while":[7,10,12,16],"whitenois":2,"who":[6,7,11],"widget":[9,10],"wildcard":10,"window":2,"wire":7,"with_app":10,"within":[2,10,15],"without":[0,2,4,7,9,10,11,15],"won":[7,9,10,15],"work":[3,4,5,6,7,10,13,14,15],"workdir":4,"worker":4,"world":[0,3,6,9,10,12],"worri":9,"would":9,"wrap":[0,7,9,10,13],"wrapper":8,"write":[6,7,10,12],"wrong":10,"ws_auth":16,"wsgi":[0,2,4,6,9,10,12],"www":5,"x":[0,4,6,7,9,10,11,12,13,14],"x00":16,"x01":16,"x02":16,"x89png":7,"xml":0,"xss":10,"xv":8,"yaml":[0,2,6,7,8,9,10],"year":[14,15],"yield":[0,10,15],"yml":[0,4,10,11],"you":[0,3,4,5,7,9,10,11,12,13,14,15,16],"your":[0,3,4,5,6,7,9,10,11,12,13,16],"yourself":7,"zero":4},"titles":["API Reference","Backlog","Changelog","Command Line Interface","Deployment","Configuration","Responder","Quick Start","Development Sandbox","Testing","Feature Tour","Authentication","Migrating from Flask","Writing Middleware","Building a REST API","Using SQLAlchemy","WebSocket Tutorial"],"titleterms":{"":14,"0":2,"01":2,"02":2,"03":2,"04":2,"08":2,"09":2,"1":2,"10":2,"11":2,"12":2,"13":2,"15":2,"16":2,"17":2,"18":2,"19":2,"2":2,"20":2,"2018":2,"2019":2,"2026":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":2,"28":2,"29":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"In":14,"It":[5,7,14,15],"The":[0,6,12],"access":11,"ad":[2,13],"after":[9,10],"all":[5,7,14],"allow":5,"an":11,"api":[0,9,11,12,14],"app":[9,10,11],"asgi":13,"asset":3,"auth":11,"authent":11,"background":[0,7],"backlog":1,"base":[10,11],"bearer":11,"befor":[9,10,16],"big":12,"blueprint":12,"book":14,"build":[3,14],"built":13,"chang":2,"changelog":2,"chat":16,"check":[4,8],"checklist":4,"choos":11,"class":[0,5,10],"client":16,"cloud":4,"code":[0,8],"command":3,"compos":4,"configur":5,"connect":16,"content":10,"control":11,"convertor":7,"cooki":[9,10],"cor":10,"creat":[7,14],"crud":15,"custom":[3,10,11],"data":16,"databas":15,"debug":5,"defin":[14,15],"delet":14,"deploy":4,"deprec":2,"develop":8,"dict":0,"differ":12,"directli":4,"docker":4,"document":[8,10],"echo":16,"endpoint":[4,15],"env":5,"environ":[3,5],"error":[9,10,11,14],"event":[9,10],"except":11,"featur":10,"file":[3,5,9,10],"filter":10,"fix":2,"fixtur":9,"flask":12,"format":[8,16],"from":[3,12],"frontend":3,"futur":1,"get":[6,9,14],"gradual":12,"graphql":10,"group":[0,10,12],"guid":6,"handl":[9,10,14],"header":9,"health":4,"hello":7,"helper":0,"hook":[9,10,13,16],"host":[5,10],"how":16,"hst":10,"html":16,"id":10,"idea":[1,6],"instal":[6,15],"instanc":3,"interfac":3,"json":[9,12],"kei":[5,11],"launch":3,"layout":8,"lifecycl":16,"lifespan":[9,10,15],"limit":[0,9,10],"line":3,"list":14,"local":4,"log":10,"memori":14,"messagepack":10,"method":10,"middlewar":13,"migrat":12,"mode":5,"model":[14,15],"modul":3,"mount":[9,10],"name":3,"negoti":10,"next":14,"openapi":10,"order":13,"other":10,"out":14,"paramet":[7,12],"parti":13,"pattern":5,"platform":4,"postgresql":15,"product":4,"project":[6,8,14],"proxi":4,"public":11,"pure":13,"put":[5,7],"pydant":10,"queri":0,"queue":0,"quick":[7,12],"rate":[0,9,10],"read":7,"refer":[0,12],"remov":2,"render":7,"request":[0,7,9,10,16],"respond":6,"respons":[0,7],"rest":14,"revers":4,"role":11,"room":16,"rout":[0,7,10,11,12],"run":[4,7,8,14,15],"sandbox":8,"secret":5,"send":7,"sent":10,"serv":10,"server":[7,10,16],"servic":7,"session":[10,11],"setup":[8,14,15],"shutdown":15,"singl":14,"skip":11,"sqlalchemi":15,"sse":10,"starlett":13,"start":[7,9],"startup":15,"static":10,"statu":0,"storag":14,"strategi":11,"structur":10,"support":10,"task":7,"templat":[7,12],"test":[8,9,16],"third":13,"tip":[9,15],"togeth":[5,7],"token":11,"tour":10,"trust":10,"try":14,"tutori":[6,16],"type":[7,8],"updat":14,"upload":9,"url":3,"us":[5,9,11,13,15],"user":6,"uvicorn":4,"v":13,"v0":2,"v1":2,"v2":2,"v3":2,"valid":[9,10],"variabl":[3,5],"view":10,"web":[7,11],"websocket":[9,10,16],"what":[6,13,14],"when":13,"work":16,"world":7,"write":13,"you":6,"your":[14,15]}}) \ No newline at end of file +Search.setIndex({"alltitles":{"API Key Authentication":[[11,"api-key-authentication"]],"API Reference":[[0,null]],"Added":[[2,"added"],[2,"id1"],[2,"id5"],[2,"id7"],[2,"id10"],[2,"id14"],[2,"id20"],[2,"id21"],[2,"id24"],[2,"id27"],[2,"id32"],[2,"id39"],[2,"id45"],[2,"id46"],[2,"id47"],[2,"id48"],[2,"id49"],[2,"id52"],[2,"id53"],[2,"id55"],[2,"id58"],[2,"id61"],[2,"id62"],[2,"id63"],[2,"id67"]],"Adding Third-Party Middleware":[[13,"adding-third-party-middleware"]],"After-Request Hooks":[[10,"after-request-hooks"]],"Allowed Hosts":[[5,"allowed-hosts"]],"Authentication":[[11,null]],"Background Queue":[[0,"background-queue"]],"Background Tasks":[[7,"background-tasks"]],"Backlog":[[1,null]],"Bearer Token Authentication":[[11,"bearer-token-authentication"]],"Before-Request Hooks":[[10,"before-request-hooks"]],"Before-Request Hooks for WebSockets":[[16,"before-request-hooks-for-websockets"]],"Blueprints \u2192 Route Groups":[[12,"blueprints-route-groups"]],"Building Frontend Assets":[[3,"building-frontend-assets"]],"Building a REST API":[[14,null]],"Built-in Middleware":[[13,"built-in-middleware"]],"CORS":[[10,"cors"]],"CRUD Endpoints":[[15,"crud-endpoints"]],"Changed":[[2,"changed"],[2,"id2"],[2,"id4"],[2,"id6"],[2,"id8"],[2,"id11"],[2,"id19"],[2,"id22"],[2,"id25"],[2,"id28"],[2,"id31"],[2,"id36"],[2,"id37"],[2,"id38"],[2,"id40"],[2,"id41"],[2,"id43"],[2,"id44"],[2,"id50"],[2,"id54"],[2,"id59"],[2,"id60"],[2,"id66"]],"Changelog":[[2,null]],"Chat Room":[[16,"chat-room"]],"Choosing an Auth Strategy":[[11,"choosing-an-auth-strategy"]],"Class-Based Views":[[10,"class-based-views"]],"Cloud Platforms":[[4,"cloud-platforms"]],"Code Formatting":[[8,"code-formatting"]],"Command Line Interface":[[3,null]],"Configuration":[[5,null]],"Configuration Class Pattern":[[5,"configuration-class-pattern"]],"Connection Lifecycle":[[16,"connection-lifecycle"]],"Content Negotiation":[[10,"content-negotiation"]],"Cookie-Based Sessions":[[10,"cookie-based-sessions"]],"Cookies":[[10,"cookies"]],"Create a Book":[[14,"create-a-book"]],"Create a Web Service":[[7,"create-a-web-service"]],"Custom Error Handling":[[10,"custom-error-handling"]],"Custom Exception for Auth Errors":[[11,"custom-exception-for-auth-errors"]],"Custom Instance Names":[[3,"custom-instance-names"]],"Data Formats":[[16,"data-formats"]],"Database Setup":[[15,"database-setup"]],"Debug Mode":[[5,"debug-mode"]],"Define Your Models":[[14,"define-your-models"],[15,"define-your-models"]],"Delete a Book":[[14,"delete-a-book"]],"Deployment":[[4,null]],"Deprecated":[[2,"deprecated"]],"Development Sandbox":[[8,null]],"Docker":[[4,"docker"]],"Docker Compose":[[4,"docker-compose"]],"Documentation":[[8,"documentation"]],"Echo Server":[[16,"echo-server"]],"Environment Variables":[[3,"environment-variables"],[5,"environment-variables"]],"Error Handling":[[14,"error-handling"]],"Feature Tour":[[10,null]],"Fixed":[[2,"fixed"],[2,"id9"],[2,"id13"],[2,"id15"],[2,"id16"],[2,"id17"],[2,"id18"],[2,"id23"],[2,"id26"],[2,"id29"],[2,"id30"],[2,"id33"],[2,"id34"],[2,"id35"],[2,"id42"],[2,"id51"],[2,"id56"],[2,"id57"],[2,"id64"],[2,"id65"]],"Future Ideas":[[1,"future-ideas"]],"Get a Single Book":[[14,"get-a-single-book"]],"Getting Started":[[9,"getting-started"]],"Gradual Migration":[[12,"gradual-migration"]],"GraphQL":[[10,"graphql"]],"HSTS":[[10,"hsts"]],"HTML Client":[[16,"html-client"]],"Health Check Endpoint":[[4,"health-check-endpoint"]],"Hello World":[[7,"hello-world"]],"Hooks vs. Middleware":[[13,"hooks-vs-middleware"]],"How WebSockets Work":[[16,"how-websockets-work"]],"In-Memory Storage":[[14,"in-memory-storage"]],"Installation":[[6,"installation"],[15,"installation"]],"JSON APIs":[[12,"json-apis"]],"Launching from a File":[[3,"launching-from-a-file"]],"Launching from a Module":[[3,"launching-from-a-module"]],"Launching from a URL":[[3,"launching-from-a-url"]],"Lifespan Events":[[10,"lifespan-events"]],"Lifespan for Startup and Shutdown":[[15,"lifespan-for-startup-and-shutdown"]],"List All Books":[[14,"list-all-books"]],"MessagePack":[[10,"messagepack"]],"Method Filtering":[[10,"method-filtering"]],"Middleware Order":[[13,"middleware-order"]],"Migrating from Flask":[[12,null]],"Mounting Other Apps":[[10,"mounting-other-apps"]],"OpenAPI Documentation":[[10,"openapi-documentation"]],"Production Checklist":[[4,"production-checklist"]],"Project":[[6,null]],"Project Layout":[[8,"project-layout"]],"Project Setup":[[14,"project-setup"]],"Putting It All Together":[[5,"putting-it-all-together"],[7,"putting-it-all-together"]],"Pydantic Validation":[[10,"pydantic-validation"]],"Query Dict":[[0,"query-dict"]],"Quick Reference":[[12,"quick-reference"]],"Quick Start":[[7,null]],"Rate Limiter":[[0,"rate-limiter"]],"Rate Limiting":[[10,"rate-limiting"]],"Reading Requests":[[7,"reading-requests"]],"Removed":[[2,"removed"],[2,"id3"],[2,"id12"]],"Rendering Templates":[[7,"rendering-templates"]],"Request":[[0,"request"]],"Request ID":[[10,"request-id"]],"Responder":[[6,null]],"Response":[[0,"response"]],"Reverse Proxy":[[4,"reverse-proxy"]],"Role-Based Access Control":[[11,"role-based-access-control"]],"Route Groups":[[0,"route-groups"],[10,"route-groups"]],"Route Parameters":[[7,"route-parameters"],[12,"route-parameters"]],"Run It":[[14,"run-it"],[15,"run-it"]],"Run the Server":[[7,"run-the-server"]],"Running Locally":[[4,"running-locally"]],"Running Tests":[[8,"running-tests"]],"Secret Key":[[5,"secret-key"]],"Sending Responses":[[7,"sending-responses"]],"Server-Sent Events (SSE)":[[10,"server-sent-events-sse"]],"Serving Files":[[10,"serving-files"]],"Setup":[[8,"setup"]],"Skipping Auth for Public Routes":[[11,"skipping-auth-for-public-routes"]],"Static Files":[[10,"static-files"]],"Status Code Helpers":[[0,"status-code-helpers"]],"Structured Logging":[[10,"structured-logging"]],"Templates":[[12,"templates"]],"Testing":[[9,null]],"Testing Before and After Hooks":[[9,"testing-before-and-after-hooks"]],"Testing Error Handling":[[9,"testing-error-handling"]],"Testing File Uploads":[[9,"testing-file-uploads"]],"Testing Headers and Cookies":[[9,"testing-headers-and-cookies"]],"Testing JSON APIs":[[9,"testing-json-apis"]],"Testing Lifespan Events":[[9,"testing-lifespan-events"]],"Testing Mounted Apps":[[9,"testing-mounted-apps"]],"Testing Rate Limiting":[[9,"testing-rate-limiting"]],"Testing Request Validation":[[9,"testing-request-validation"]],"Testing WebSockets":[[9,"testing-websockets"],[16,"testing-websockets"]],"The API Class":[[0,"the-api-class"]],"The Big Differences":[[12,"the-big-differences"]],"The Idea":[[6,"the-idea"]],"Tips":[[9,"tips"],[15,"tips"]],"Trusted Hosts":[[10,"trusted-hosts"]],"Try It Out":[[14,"try-it-out"]],"Tutorials":[[6,null]],"Type Checking":[[8,"type-checking"]],"Type Convertors":[[7,"type-convertors"]],"Update a Book":[[14,"update-a-book"]],"User Guide":[[6,null]],"Using .env Files":[[5,"using-env-files"]],"Using Fixtures":[[9,"using-fixtures"]],"Using PostgreSQL":[[15,"using-postgresql"]],"Using SQLAlchemy":[[15,null]],"Using Sessions for Web Apps":[[11,"using-sessions-for-web-apps"]],"Using Starlette Middleware":[[13,"using-starlette-middleware"]],"Uvicorn Directly":[[4,"uvicorn-directly"]],"WebSocket Support":[[10,"websocket-support"]],"WebSocket Tutorial":[[16,null]],"What You Get":[[6,"what-you-get"]],"What\u2019s Next":[[14,"what-s-next"]],"When to Use What":[[13,"when-to-use-what"]],"Writing Middleware":[[13,null]],"Writing Pure ASGI Middleware":[[13,"writing-pure-asgi-middleware"]],"v0.0.1 - 2018-10-12":[[2,"v0-0-1-2018-10-12"]],"v0.0.10 - 2018-10-17":[[2,"v0-0-10-2018-10-17"]],"v0.0.2 - 2018-10-13":[[2,"v0-0-2-2018-10-13"]],"v0.0.3 - 2018-10-13":[[2,"v0-0-3-2018-10-13"]],"v0.0.4 - 2018-10-15":[[2,"v0-0-4-2018-10-15"]],"v0.0.5 - 2018-10-15":[[2,"v0-0-5-2018-10-15"]],"v0.0.6 - 2018-10-16":[[2,"v0-0-6-2018-10-16"]],"v0.0.7 - 2018-10-16":[[2,"v0-0-7-2018-10-16"]],"v0.0.8 - 2018-10-17":[[2,"v0-0-8-2018-10-17"]],"v0.0.9 - 2018-10-17":[[2,"v0-0-9-2018-10-17"]],"v0.1.0 - 2018-10-17":[[2,"v0-1-0-2018-10-17"]],"v0.1.1 - 2018-10-17":[[2,"v0-1-1-2018-10-17"]],"v0.1.2 - 2018-10-18":[[2,"v0-1-2-2018-10-18"]],"v0.1.3 - 2018-10-18":[[2,"v0-1-3-2018-10-18"]],"v0.1.4 - 2018-10-19":[[2,"v0-1-4-2018-10-19"]],"v0.1.5 - 2018-10-20":[[2,"v0-1-5-2018-10-20"]],"v0.1.6 - 2018-10-20":[[2,"v0-1-6-2018-10-20"]],"v0.2.0 - 2018-10-22":[[2,"v0-2-0-2018-10-22"]],"v0.2.1 - 2018-10-23":[[2,"v0-2-1-2018-10-23"]],"v0.2.2 - 2018-10-23":[[2,"v0-2-2-2018-10-23"]],"v0.2.3 - 2018-10-24":[[2,"v0-2-3-2018-10-24"]],"v0.3.0 - 2018-10-24":[[2,"v0-3-0-2018-10-24"]],"v0.3.1 - 2018-10-24":[[2,"v0-3-1-2018-10-24"]],"v0.3.2 - 2018-10-25":[[2,"v0-3-2-2018-10-25"]],"v0.3.3 - 2018-10-25":[[2,"v0-3-3-2018-10-25"]],"v1.0.0 - 2018-10-26":[[2,"v1-0-0-2018-10-26"]],"v1.0.1 - 2018-10-26":[[2,"v1-0-1-2018-10-26"]],"v1.0.2 - 2018-10-27":[[2,"v1-0-2-2018-10-27"]],"v1.0.3 - 2018-10-27":[[2,"v1-0-3-2018-10-27"]],"v1.0.4 - 2018-10-27":[[2,"v1-0-4-2018-10-27"]],"v1.0.5- 2018-10-27":[[2,"v1-0-5-2018-10-27"]],"v1.1.0 - 2018-10-27":[[2,"v1-1-0-2018-10-27"]],"v1.1.1 - 2018-10-29":[[2,"v1-1-1-2018-10-29"]],"v1.1.2 - 2018-11-11":[[2,"v1-1-2-2018-11-11"]],"v1.1.3 - 2019-01-12":[[2,"v1-1-3-2019-01-12"]],"v1.2.0 - 2018-12-29":[[2,"v1-2-0-2018-12-29"]],"v1.3.0 - 2019-02-22":[[2,"v1-3-0-2019-02-22"]],"v1.3.1 - 2019-04-28":[[2,"v1-3-1-2019-04-28"]],"v1.3.2 - 2019-08-15":[[2,"v1-3-2-2019-08-15"]],"v2.0.0 - 2019-09-19":[[2,"v2-0-0-2019-09-19"]],"v2.0.1 - 2019-09-20":[[2,"v2-0-1-2019-09-20"]],"v2.0.2 - 2019-09-20":[[2,"v2-0-2-2019-09-20"]],"v2.0.3 - 2019-09-20":[[2,"v2-0-3-2019-09-20"]],"v2.0.4 - 2019-11-19":[[2,"v2-0-4-2019-11-19"]],"v2.0.5 - 2019-12-15":[[2,"v2-0-5-2019-12-15"]],"v3.0.0 - 2026-03-22":[[2,"v3-0-0-2026-03-22"]],"v3.2.0 - 2026-03-22":[[2,"v3-2-0-2026-03-22"]],"v3.3.0 - 2026-03-22":[[2,"v3-3-0-2026-03-22"]],"v3.4.0 - 2026-03-22":[[2,"v3-4-0-2026-03-22"]],"v3.5.0 - 2026-03-24":[[2,"v3-5-0-2026-03-24"]],"v3.6.0 - 2026-03-24":[[2,"v3-6-0-2026-03-24"]]},"docnames":["api","backlog","changes","cli","deployment","guide-config","index","quickstart","sandbox","testing","tour","tutorial-auth","tutorial-flask","tutorial-middleware","tutorial-rest","tutorial-sqlalchemy","tutorial-websockets"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1},"filenames":["api.rst","backlog.md","changes.md","cli.rst","deployment.rst","guide-config.rst","index.rst","quickstart.rst","sandbox.md","testing.rst","tour.rst","tutorial-auth.rst","tutorial-flask.rst","tutorial-middleware.rst","tutorial-rest.rst","tutorial-sqlalchemy.rst","tutorial-websockets.rst"],"indexentries":{"accepts() (responder.request method)":[[0,"responder.Request.accepts",false]],"add_event_handler() (responder.api method)":[[0,"responder.API.add_event_handler",false]],"add_middleware() (responder.api method)":[[0,"responder.API.add_middleware",false]],"add_route() (responder.api method)":[[0,"responder.API.add_route",false]],"after_request() (responder.api method)":[[0,"responder.API.after_request",false]],"api (class in responder)":[[0,"responder.API",false]],"apparent_encoding (responder.request property)":[[0,"responder.Request.apparent_encoding",false]],"backgroundqueue (class in responder.background)":[[0,"responder.background.BackgroundQueue",false]],"before_request() (responder.api method)":[[0,"responder.API.before_request",false]],"check() (responder.ext.ratelimit.ratelimiter method)":[[0,"responder.ext.ratelimit.RateLimiter.check",false]],"client (responder.request property)":[[0,"responder.Request.client",false]],"content (responder.request property)":[[0,"responder.Request.content",false]],"cookies (responder.request property)":[[0,"responder.Request.cookies",false]],"encoding (responder.request property)":[[0,"responder.Request.encoding",false]],"exception_handler() (responder.api method)":[[0,"responder.API.exception_handler",false]],"file() (responder.response method)":[[0,"responder.Response.file",false]],"full_url (responder.request property)":[[0,"responder.Request.full_url",false]],"get() (responder.models.querydict method)":[[0,"responder.models.QueryDict.get",false]],"get_list() (responder.models.querydict method)":[[0,"responder.models.QueryDict.get_list",false]],"graphql() (responder.api method)":[[0,"responder.API.graphql",false]],"group() (responder.api method)":[[0,"responder.API.group",false]],"headers (responder.request property)":[[0,"responder.Request.headers",false]],"install() (responder.ext.ratelimit.ratelimiter method)":[[0,"responder.ext.ratelimit.RateLimiter.install",false]],"is_100() (in module responder.status_codes)":[[0,"responder.status_codes.is_100",false]],"is_200() (in module responder.status_codes)":[[0,"responder.status_codes.is_200",false]],"is_300() (in module responder.status_codes)":[[0,"responder.status_codes.is_300",false]],"is_400() (in module responder.status_codes)":[[0,"responder.status_codes.is_400",false]],"is_500() (in module responder.status_codes)":[[0,"responder.status_codes.is_500",false]],"is_json (responder.request property)":[[0,"responder.Request.is_json",false]],"is_secure (responder.request property)":[[0,"responder.Request.is_secure",false]],"items() (responder.models.querydict method)":[[0,"responder.models.QueryDict.items",false]],"items_list() (responder.models.querydict method)":[[0,"responder.models.QueryDict.items_list",false]],"media() (responder.request method)":[[0,"responder.Request.media",false]],"method (responder.request property)":[[0,"responder.Request.method",false]],"mimetype (responder.request property)":[[0,"responder.Request.mimetype",false]],"module":[[0,"module-responder",false]],"mount() (responder.api method)":[[0,"responder.API.mount",false]],"ok (responder.response property)":[[0,"responder.Response.ok",false]],"on_event() (responder.api method)":[[0,"responder.API.on_event",false]],"params (responder.request property)":[[0,"responder.Request.params",false]],"path_matches_route() (responder.api method)":[[0,"responder.API.path_matches_route",false]],"path_params (responder.request property)":[[0,"responder.Request.path_params",false]],"querydict (class in responder.models)":[[0,"responder.models.QueryDict",false]],"ratelimiter (class in responder.ext.ratelimit)":[[0,"responder.ext.ratelimit.RateLimiter",false]],"redirect() (responder.api method)":[[0,"responder.API.redirect",false]],"redirect() (responder.response method)":[[0,"responder.Response.redirect",false]],"request (class in responder)":[[0,"responder.Request",false]],"requests (responder.api property)":[[0,"responder.API.requests",false]],"responder":[[0,"module-responder",false]],"response (class in responder)":[[0,"responder.Response",false]],"route() (responder.api method)":[[0,"responder.API.route",false]],"routegroup (class in responder.api)":[[0,"responder.api.RouteGroup",false]],"run() (responder.api method)":[[0,"responder.API.run",false]],"run() (responder.background.backgroundqueue method)":[[0,"responder.background.BackgroundQueue.run",false]],"schema() (responder.api method)":[[0,"responder.API.schema",false]],"serve() (responder.api method)":[[0,"responder.API.serve",false]],"session (responder.request property)":[[0,"responder.Request.session",false]],"session() (responder.api method)":[[0,"responder.API.session",false]],"set_cookie() (responder.response method)":[[0,"responder.Response.set_cookie",false]],"sse() (responder.response method)":[[0,"responder.Response.sse",false]],"state (responder.request property)":[[0,"responder.Request.state",false]],"static_app (responder.api property)":[[0,"responder.API.static_app",false]],"status_code_safe (responder.response property)":[[0,"responder.Response.status_code_safe",false]],"stream() (responder.response method)":[[0,"responder.Response.stream",false]],"stream_file() (responder.response method)":[[0,"responder.Response.stream_file",false]],"task() (responder.background.backgroundqueue method)":[[0,"responder.background.BackgroundQueue.task",false]],"template() (responder.api method)":[[0,"responder.API.template",false]],"template_string() (responder.api method)":[[0,"responder.API.template_string",false]],"text (responder.request property)":[[0,"responder.Request.text",false]],"url (responder.request property)":[[0,"responder.Request.url",false]],"url_for() (responder.api method)":[[0,"responder.API.url_for",false]]},"objects":{"":[[0,0,0,"-","responder"]],"responder":[[0,1,1,"","API"],[0,1,1,"","Request"],[0,1,1,"","Response"]],"responder.API":[[0,2,1,"","add_event_handler"],[0,2,1,"","add_middleware"],[0,2,1,"","add_route"],[0,2,1,"","after_request"],[0,2,1,"","before_request"],[0,2,1,"","exception_handler"],[0,2,1,"","graphql"],[0,2,1,"","group"],[0,2,1,"","mount"],[0,2,1,"","on_event"],[0,2,1,"","path_matches_route"],[0,2,1,"","redirect"],[0,3,1,"","requests"],[0,2,1,"","route"],[0,2,1,"","run"],[0,2,1,"","schema"],[0,2,1,"","serve"],[0,2,1,"","session"],[0,3,1,"","static_app"],[0,2,1,"","template"],[0,2,1,"","template_string"],[0,2,1,"","url_for"]],"responder.Request":[[0,2,1,"","accepts"],[0,3,1,"","apparent_encoding"],[0,3,1,"","client"],[0,3,1,"","content"],[0,3,1,"","cookies"],[0,3,1,"","encoding"],[0,3,1,"","full_url"],[0,3,1,"","headers"],[0,3,1,"","is_json"],[0,3,1,"","is_secure"],[0,2,1,"","media"],[0,3,1,"","method"],[0,3,1,"","mimetype"],[0,3,1,"","params"],[0,3,1,"","path_params"],[0,3,1,"","session"],[0,3,1,"","state"],[0,3,1,"","text"],[0,3,1,"","url"]],"responder.Response":[[0,2,1,"","file"],[0,3,1,"","ok"],[0,2,1,"","redirect"],[0,2,1,"","set_cookie"],[0,2,1,"","sse"],[0,3,1,"","status_code_safe"],[0,2,1,"","stream"],[0,2,1,"","stream_file"]],"responder.api":[[0,1,1,"","RouteGroup"]],"responder.background":[[0,1,1,"","BackgroundQueue"]],"responder.background.BackgroundQueue":[[0,2,1,"","run"],[0,2,1,"","task"]],"responder.ext.ratelimit":[[0,1,1,"","RateLimiter"]],"responder.ext.ratelimit.RateLimiter":[[0,2,1,"","check"],[0,2,1,"","install"]],"responder.models":[[0,1,1,"","QueryDict"]],"responder.models.QueryDict":[[0,2,1,"","get"],[0,2,1,"","get_list"],[0,2,1,"","items"],[0,2,1,"","items_list"]],"responder.status_codes":[[0,4,1,"","is_100"],[0,4,1,"","is_200"],[0,4,1,"","is_300"],[0,4,1,"","is_400"],[0,4,1,"","is_500"]]},"objnames":{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","function","Python function"]},"objtypes":{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:function"},"terms":{"":[0,2,3,4,5,6,7,9,10,11,12,13,15,16],"0":[0,3,4,5,7,10,14,15],"00":[0,10],"01":0,"03":10,"0441172719":14,"1":[0,1,3,4,5,7,9,10,11,12,14,16],"10":[0,6,7,10],"100":[0,2,10],"1000":16,"1001":16,"1008":16,"1011":16,"12":10,"127":[3,4,5],"13":4,"14":2,"150mb":4,"16":4,"1965":14,"2":[0,4,7,9,10,14,15,16],"200":[0,2,4,7,9,10,14],"201":[0,7,9,12,14,15],"2026":[0,10],"204":[14,15],"24":[10,11],"2m":[2,10],"2xx":0,"3":[0,1,4,6,7,9,10,14,16],"30":4,"3000":5,"301":[0,7],"308":2,"32":5,"3600":[0,10],"3f":13,"4":[4,7],"40":2,"400":[0,2,9,10,14],"401":[0,10,11],"403":11,"404":[0,7,12,14,15],"41d4":7,"42":10,"422":[2,9,10,14],"429":[0,9,10],"446655440000":7,"500":[2,7,9,10,13,14],"5000":10,"5042":[3,4,7,10,11,14,16],"550e8400":7,"561":2,"60":[0,2,9,10],"600":[0,10],"7":[9,11],"8":0,"80":4,"8000":[4,7],"8192":0,"9":9,"978":14,"99":9,"A":[0,4,5,6,7,10,13,16],"And":[5,6,7,11],"As":[0,10],"But":[7,9,10],"By":[3,7,9,10,13,14],"For":[0,3,4,5,7,9,10,11,13,14,15],"If":[0,3,5,6,7,9,10,12,15],"In":[0,5,6,7,10,11,12,15,16],"It":[0,3,6,9,10,13],"No":[6,9,10,11,12,14],"Not":7,"On":[5,10],"One":[6,7,9],"Or":[0,5,8],"That":[4,6,7,9],"The":[2,3,4,5,7,9,10,11,13,14,15,16],"There":[9,10],"These":7,"To":[14,15],"Will":0,"With":[0,5],"_":9,"__call__":13,"__init__":[11,13],"__main__":[4,6,7,9,14,15],"__name__":[4,6,7,9,10,12,14,15],"__tablename__":15,"_route_for":2,"a1b2c3":10,"a2wsgi":2,"a716":7,"abc":14,"abc123":[0,9,10,11],"abil":2,"abl":0,"abort":12,"about":[4,7,9,12],"abov":[6,11],"abstract":[13,15],"accept":[0,1,2,7,9,10,16],"access":[0,2,4,6,10,13,15],"accumul":16,"acm":3,"across":[2,4,10,15],"activ":[8,16],"actual":[0,4,7,10],"ad":[0,6,10],"adapt":10,"add":[0,2,4,5,7,11,13,14,15,16],"add_event_handl":0,"add_head":[10,13],"add_middlewar":[0,13],"add_request_id":0,"add_rout":[0,10],"add_tim":[9,10],"add_vers":9,"addeventlisten":16,"addit":[0,10,13],"address":[0,5,7,10],"adher":2,"admin":11,"affect":10,"after":[0,6,7,11,15,16],"after_request":[0,2,9,10,13],"ag":[0,10],"again":11,"against":[0,4,10,11],"aggreg":4,"agre":7,"ahead":2,"ai":10,"aiosqlit":15,"alemb":15,"algorithm":11,"alias":2,"alic":10,"aliv":4,"all":[0,2,3,4,6,8,9,10,12,13,15,16],"alloc":9,"allow":[4,6,10],"allow_credenti":[0,10],"allow_head":[0,10],"allow_method":[0,5,10],"allow_origin":[0,5,10],"allow_origin_regex":0,"allowed_host":[0,5,9,10],"alongsid":10,"alpin":4,"alreadi":[0,9,10],"also":[0,2,3,7,9,10,16],"altern":[0,10],"alwai":[2,4,5,6,7,10,16],"an":[0,2,3,4,5,6,7,10,12,13,14,15,16],"analysi":10,"angle_bracket":12,"angular":10,"ani":[0,3,4,5,6,7,9,10,11,13,14,15,16],"annot":[2,6,7,10,15],"annual":[7,10],"answer":[10,16],"anyon":6,"anyth":7,"anywher":[4,10],"api":[2,3,4,5,6,7,8,10,13,15,16],"api_kei":11,"api_v1":12,"apispec":2,"app":[0,2,3,4,5,6,7,8,12,13,14,15,16],"appar":0,"apparent_encod":0,"appear":[0,10],"appendchild":16,"appli":[0,13],"applic":[0,2,3,4,5,7,9,10,11,13,14,15],"approach":[5,10,11,12,13],"appropri":[10,15],"ar":[0,2,3,4,6,7,9,10,11,12,13,15,16],"architectur":10,"aren":[7,13],"arg":[0,12],"argument":[0,2,7,12,13],"around":[0,6],"arriv":[7,12],"asgi":[0,2,4,6,7,10,12],"ask":[6,10,16],"assert":[9,16],"asset":[0,4,6,10],"assign":14,"associ":0,"astral":4,"async":[0,2,4,6,7,9,10,11,12,13,14,15,16],"async_sess":15,"async_sessionmak":15,"asynccontextmanag":[10,15],"asynchron":[2,4],"asyncio":[2,15],"asyncpg":[4,15],"attach":10,"attack":[4,5,10],"attribut":[0,3,15],"audio":16,"auth":[2,6,10,13],"auth_check":10,"auth_guard":11,"authent":[6,7,10,13,16],"autherror":11,"author":[0,7,10,11,13,14,15],"auto":[0,2,8,10,16],"auto_escap":0,"autobuild":8,"autoincr":15,"automat":[0,2,3,4,5,6,7,9,10,11,12,13,14,15],"avail":[0,2,7,10],"avoid":[9,10,13,16],"aw":4,"awai":16,"await":[0,2,7,9,10,11,12,13,14,15,16],"azur":[3,4],"b":[0,7,9,13,15,16],"back":[0,7,10,15,16],"background":[2,6,8],"backgroundqueu":0,"backlog":[2,6],"bad":[9,10,14],"balanc":4,"bandwidth":10,"bar":10,"bare":[2,16],"base":[0,2,6,13,15],"base_url":0,"basehttpmiddlewar":13,"basemodel":[0,9,10,14,15],"basic":7,"batteri":6,"battl":6,"bearer":6,"becaus":[0,6,7,11,12,14],"becom":[0,15],"been":0,"befor":[0,1,2,4,6,7,11,13,15],"before_request":[0,1,2,9,10,11,12,13,16],"begin":15,"behav":0,"behavior":[5,13],"behind":[4,10],"being":[0,10],"best":[6,11],"better":6,"between":13,"bidirect":[10,16],"big":6,"biggest":12,"bin":[4,8],"binari":[7,10,16],"bind":[0,3,4,5,7],"blob":3,"block":[0,7,9,10,12,16],"blocklist":11,"blueprint":6,"bodi":[0,2,7,9,10,12,14,16],"boilerpl":6,"book":[6,15],"book_id":[14,15],"bookin":[14,15],"bookout":15,"books_db":14,"bool":5,"born":6,"both":[6,7,10,12,16],"bottom":14,"boundari":10,"box":13,"bp":12,"break":[2,9],"bring":6,"broad":2,"broadcast":16,"broke":[7,9],"broker":7,"browser":[7,8,10,11,14,16],"bucket":[0,10],"buffer":[0,7],"bufix":2,"bug":[2,9,16],"bugfix":2,"build":[2,4,6,7,8,10,11,15,16],"builder":15,"built":[1,2,4,6,7,9,10,16],"bump":2,"bypass":[4,13],"byte":[0,2,6,7,13,16],"c":[5,16],"cach":[7,9,10],"caddi":[2,4],"caddyfil":4,"call":[2,3,7,9,10,13,14,16],"call_next":13,"callabl":[0,13],"came":7,"can":[0,2,3,4,5,7,9,10,11,12,13,14,15,16],"carri":7,"case":[0,6,7,13],"cat":10,"catalog":14,"catch":[10,11,13,16],"categori":0,"cd":8,"ceas":2,"celeri":7,"cell":10,"central":[0,7],"certain":0,"certif":4,"chang":[0,15],"changelog":6,"channel":[10,16],"chardet":0,"chat":[2,6,10],"check":[0,2,6,9,10,11,13,16],"check_api_kei":11,"check_auth":0,"check_exist":[0,10,14,15],"checker":15,"checklist":[2,6],"choic":[7,10],"choos":[6,10],"chunk":[0,10],"chunk_siz":0,"ci":2,"circuit":[0,1,2,10],"class":[2,6,7,8,9,11,13,14,15],"claud":2,"clean":[6,10,14],"cleaner":[10,11,15],"cleanli":5,"cleanup":[2,10],"clear":[11,16],"cli":[2,8,11],"click":6,"client":[0,2,6,7,9,10,11,14],"client_ip":10,"clone":8,"close":[9,10,15,16],"close_database_connection_pool":0,"closur":16,"cloud":[3,5,6,7],"cmd":4,"code":[2,3,4,5,6,7,9,10,11,14,15,16],"codebas":2,"coercion":10,"collabor":[10,16],"colon":3,"column":15,"com":[0,3,4,5,7,8,10],"combin":7,"come":[7,10,12],"command":[2,4,6],"commit":[5,15],"common":[0,3,4,5,7,10,11,12,13,14,16],"commonli":7,"commun":[7,10,11],"compact":10,"compat":[0,2],"complement":10,"complet":[7,10,14,16],"complex":[13,15],"compon":13,"compos":[2,6,15],"comprehens":2,"compress":[6,7,13],"compromis":5,"comput":7,"concept":[2,10,12],"concern":[7,13],"concurr":[0,4],"condit":[9,10],"config":[4,5,8,15],"configur":[0,2,4,6,7,9,10,13],"confirm":4,"conflict":2,"confus":9,"conn":15,"connect":[0,4,6,7,9,10,13,15],"consid":[7,15],"consist":[7,10],"consol":[10,15],"const":[10,16],"constructor":[0,13],"consum":10,"contact":0,"contain":[0,4,7],"container":4,"content":[0,2,6,7,8,9,13,14],"content_typ":[0,9,10],"context":[1,2,6,9,10,15,16],"contextlib":[10,15],"contextvar":2,"continu":7,"contract":9,"control":[0,4,5,6,7,10,13,15],"conveni":[0,5,15],"convent":[3,4,14],"convert":[2,7],"convertor":[2,6,12],"cooki":[0,2,5,6,7,11,12,13],"copi":4,"cor":[0,2,5,6,9,13],"core":[2,4],"coroutin":0,"correctli":4,"correspond":15,"cors_en":5,"cors_origin":5,"cors_param":[0,5,10],"corsmiddlewar":13,"count":2,"cover":[5,11,13],"coverag":[2,8],"cpu":[0,4,7],"crash":2,"creat":[0,6,9,10,11,12,15],"create_al":15,"create_asgi_app":10,"create_async_engin":15,"create_book":[14,15],"create_connect":16,"create_item":[0,10,12],"create_pet":10,"create_token":11,"createel":16,"creation":[13,15],"credenti":11,"cross":[10,13],"crud":[6,7,14],"css":10,"csv":[0,10],"curl":[3,4,7,10,11,14],"curly_brac":12,"current":10,"custom":[0,2,6,7,9,14,16],"cut":13,"cycl":7,"d":[7,9,10,14],"dashboard":[5,10,11,16],"data":[0,2,4,5,6,7,9,10,11,12,14,15],"databas":[4,5,6,7,9,10,11,14],"database_url":[4,5,15],"datadog":10,"date":0,"datetim":[2,11],"db":[4,5,10,15],"dead":16,"debug":[0,2,4,6,10,12],"decim":7,"declar":[2,7],"declarativebas":15,"decod":[2,10,11],"decor":[0,2,7,10],"deep":6,"def":[0,4,6,7,9,10,11,12,13,14,15,16],"def456":11,"default":[0,2,3,4,5,7,9,10,15],"default_valu":[0,10],"defend":10,"defin":[0,6,7,10,11],"definit":0,"del":14,"delet":[5,6,7,10,15],"delete_book":[14,15],"deliber":7,"demo":3,"deni":13,"denpend":2,"dep":2,"depend":[1,2,4,8,9,13],"depends_on":4,"deploi":[4,6],"deploy":[2,6,7],"depth":10,"describ":10,"descript":[0,10],"design":[7,10,14],"detail":[4,5,10,14],"detect":[0,6,10],"dev":[2,4,5],"develop":[3,4,5,10,15],"devic":10,"dict":[6,7,10,11,14,15],"dictionari":0,"differ":[0,1,3,5,6,9,10,11,15],"digit":7,"direct":[0,2,10,13],"directli":[3,6,7,9,10,14,15],"directori":[0,7,10],"disabl":[4,9,15],"discard":16,"disconnect":16,"disk":[0,7,10],"dispatch":[2,10,13],"dispos":15,"distribut":[4,10],"div":16,"django":[6,10],"do":[4,5,7,10],"doc":[0,2,8,9,10,11,14],"docker":[2,5,6,7],"dockerfil":4,"docs_rout":[0,10,14],"docstr":[2,10],"doctyp":16,"document":[0,2,4,6,14,16],"doe":15,"doesn":[0,10,14,15],"domain":[0,4,5,10],"don":[4,5,7,9,10,11,12,15],"done":4,"dot":3,"dotenv":5,"doubl":14,"down":[10,15],"download":10,"downsid":11,"dramat":2,"driver":15,"drop":[2,16],"dump":2,"dune":14,"duplex":10,"duplic":10,"durat":13,"dure":[3,4,9,10,11,15],"duti":14,"dynam":7,"e":[0,10,16],"e29b":7,"each":[0,4,9,10,15],"easi":[3,5,7],"echo":[6,7,15],"ecosystem":[6,7],"edit":8,"editor":[10,16],"effect":[9,14],"effici":4,"either":[0,16],"element":[0,10],"els":[7,10,11,12,15],"email":7,"emb":[10,11],"emit":10,"empti":[0,14],"enabl":[0,2,4,10,13,14],"enable_async":7,"enable_hst":[0,10,13],"enable_log":[0,2,10],"encod":[0,2,11],"encrypt":11,"end":[7,14],"endpoint":[0,1,2,6,9,10,11,12,14],"enforc":10,"engin":[7,15],"enough":[4,13],"enrich":2,"ensur":[10,14,15,16],"enter":[9,16],"entir":[0,4,10,11,13,14],"entiti":10,"entri":[8,14],"env":[4,6],"environ":[0,4,6,7],"eol":2,"equival":12,"error":[0,2,5,6,15,16],"errorhandl":12,"escap":0,"essenti":10,"establish":16,"etc":[7,9,10],"even":[3,4,10,16],"event":[0,2,6,7,12,16],"event_typ":0,"eventsourc":10,"ever":[5,6],"everi":[0,2,4,5,6,7,9,10,11,13,14,15],"everyth":[0,2,4,7,10,12,14,15,16],"everywher":[3,5],"evolv":15,"exact":2,"exactli":[9,10],"exampl":[0,2,3,4,5,7,8,10,11],"exc":[0,9,10,11,14],"exceed":[0,10],"except":[0,2,6,9,10,13,16],"exception_cl":0,"exception_handl":[0,2,9,10,11,12,14],"exceptionmiddlewar":13,"execut":15,"exist":[0,2,6,12,13],"exit":[4,9,10,16],"exp":11,"expand":2,"expect":7,"expens":4,"expir":[0,10,11],"expire_on_commit":15,"explain":10,"explan":0,"explicit":[7,10,12],"explicitli":[10,12],"explor":[7,10],"export":[0,5,10],"expos":[4,5],"expose_head":0,"express":[6,7],"ext":[0,2,8,9,10,15],"extens":[2,7,8],"extern":7,"extra":[2,4,10,13],"extract":0,"extrem":7,"f":[0,4,6,7,9,10,11,13,14,16],"factori":[11,15],"fail":[9,10,15],"failur":[2,8,9],"falcon":[6,10],"fall":0,"fals":[0,4,5,9,10,14,15],"familiar":[6,12],"fast":[4,6,7,9],"fastapi":6,"faster":[4,10,13],"featur":[0,2,6,7],"feed":10,"feel":6,"fetch":[3,10],"few":12,"fido":10,"field":[0,2,9,10,14],"figur":7,"file":[0,2,4,6,7,8,14,15,16],"filenam":[0,9],"filepath":7,"filesystem":[2,3],"fill":7,"filter":[6,7],"final":16,"find":[3,10,12],"fine":[4,10,13,15],"fire":[0,9],"first":[0,8,9,10,11,13,14,15],"fit":6,"fix":8,"fixtur":6,"flag":[4,10,15],"flask":[2,6,7,9,10],"flask_app":[9,10,12],"flatten":2,"float":[0,7,9,10],"flow":[11,13],"fly":[3,4],"fmt":2,"follow":7,"font":10,"forg":[5,10],"forget":0,"form":[0,7,11,12],"format":[0,2,6,7,10,11],"formatt":10,"formerli":10,"forward":[2,4,10],"found":[2,7,14,15],"foundat":10,"fragment":3,"frame":13,"framework":[6,10],"franca":7,"frank":14,"free":2,"freeli":16,"fresh":9,"from":[0,2,4,5,6,7,9,10,11,13,14,15,16],"from_attribut":15,"front":4,"frontend":[6,10],"fsspec":3,"full":[0,2,3,7,8,10],"full_url":[0,7,10],"fulli":[7,16],"fun":6,"func":0,"function":[0,7,10,12,13],"futur":[0,2,6],"g":[0,10],"game":[10,16],"gatewai":4,"gener":[0,2,5,6,9,10,13,14],"get":[0,2,5,7,10,11,15],"get_book":[14,15],"get_client_ip":10,"get_list":0,"get_logg":[2,10],"get_m":11,"get_request_id":10,"get_us":[0,10,12],"getattr":11,"getelementbyid":16,"getenv":5,"getlist":0,"ghcr":4,"git":[5,8],"github":[2,3,8],"gitignor":5,"give":[0,9,10,13,15],"given":[0,9],"global":[12,14],"gmt":0,"go":[4,7,12,16],"goe":[10,12],"good":[4,6,10,11],"googl":[3,4],"got":16,"grace":4,"grade":7,"gradual":[6,10],"graduat":13,"grain":15,"graphen":[0,2,6,10],"graphiql":[2,6,10],"graphql":[0,2,6,8],"great":[3,6,10],"greet":[6,7,10],"greet_world":6,"greetingresourc":10,"group":[2,6],"grow":10,"guard":11,"guid":[2,5,7,11,12,15],"guido":7,"gzip":[6,7],"gzipmiddlewar":13,"h":[7,10,11,14],"h1":[0,7,11],"ha":[7,9,12,14,16],"half":7,"halv":10,"hand":0,"handl":[0,2,4,5,6,7,11,13,16],"handle_auth_error":11,"handle_value_error":[0,10,14],"handler":[0,1,6,9,10,11,13,14,16],"handshak":16,"happen":[6,7,10],"hard":9,"hasn":0,"have":[0,2,3,7,9,11,12,13,14],"hdf":3,"head":3,"header":[0,2,4,5,6,7,10,11,12,13,16],"health":[2,6,11],"healthcheck":4,"healthi":4,"heavi":7,"hello":[0,3,6,9,10,12,16],"hello_html":7,"hello_json":7,"hello_to":7,"hello_world":7,"helloworld":3,"help":[0,15],"helper":[6,10,11],"herbert":14,"here":[4,5,7,10,12,16],"heroku":[3,4],"high":[4,10],"hold":[0,6,7],"home":6,"homepag":2,"honor":[4,7],"hood":10,"hook":[0,2,6,7,11],"host":[0,2,4,6,7,9,13],"hostnam":10,"hour":[10,11],"how":[3,5,6,7,10,11,12,14,15],"hs256":11,"hst":6,"html":[0,2,6,7,8,10,11,12],"http":[0,2,3,4,5,6,7,8,9,10,11,13,14,16],"httponli":[0,10],"httpsredirect":0,"httpsredirectmiddlewar":[0,4,13],"httpx":[2,9],"i":[0,2,3,4,5,6,7,9,10,11,12,13,14,15,16],"id":[0,2,6,7,12,13,14,15,16],"idea":12,"idempot":14,"ident":12,"identifi":10,"imag":[4,7,10,16],"immedi":[0,6,7,10],"immut":2,"imperson":5,"implement":[2,9],"import":[0,2,3,5,6,7,9,10,11,12,13,14,15,16],"improv":2,"inaccess":0,"includ":[3,4,6,7,9,10,11,14],"incom":[0,7,10,14],"incredibli":10,"independ":4,"index":[0,7,8,10,16],"individu":10,"industri":10,"info":[0,2,10],"inform":[0,14],"infrastructur":[4,6],"inherit":[0,10],"initi":[0,9,16],"inject":[1,2,3,10,13],"innermost":13,"input":[2,9,10,14,16],"insensit":[0,6,7],"insid":13,"inspect":[0,2],"instal":[0,2,3,4,5,8,9,10,11,16],"instanc":[0,4,6,7,9,10],"instant":7,"instantli":4,"instead":[0,2,7,9,10,13,14,15,16],"instruct":4,"insuffici":11,"int":[0,2,7,10,11,12,14,15],"integ":[0,7,14],"integr":[10,13,14,15],"intens":7,"intent":[6,16],"intention":10,"interact":[2,10,14],"interfac":[2,4,6,7,12],"intern":[9,10,11,13],"interv":4,"invalid":[5,9,10,11],"invalidtokenerror":11,"involv":0,"io":[3,4],"iot":10,"ip":[0,2,7,10],"is_100":0,"is_200":0,"is_300":0,"is_400":0,"is_500":0,"is_class_bas":2,"is_http":0,"is_json":[0,2,7],"is_secur":[0,7],"isbn":[14,15],"iscoroutinefunct":2,"isn":[7,10,12],"issu":[2,11],"item":[0,9,10,12,15],"itemin":[0,10],"itemout":[0,10],"items_list":0,"iter":16,"its":[0,2,4,14,15],"itself":[10,11],"j":10,"jan":0,"javascript":[0,3,10],"jinja2":[0,7,12],"jpeg":10,"jpg":10,"json":[0,3,6,7,8,10,11,14,16],"jsonifi":12,"jump":7,"just":[4,9,10,13,15,16],"jwt":11,"k":8,"keep":[2,4,5,7,9,10,13,15,16],"kei":[0,4,6,7,9,10,12,15,16],"kennethreitz":[3,8],"keypress":16,"keyword":[0,7,12,13],"know":[5,7],"known":[0,11],"kubernet":4,"kwarg":0,"languag":10,"larg":[0,2,10],"larger":[5,9,13],"last":[0,13],"later":[7,9],"latest":4,"launch":[4,6],"layer":13,"layout":2,"lazi":2,"lazili":0,"lead":9,"learn":10,"legaci":12,"less":10,"let":[3,4,7,10,14,15],"level":[4,13],"lib":4,"librari":[2,9,10,16],"licens":0,"lifecycl":[6,11],"lifespan":[0,2,6,14],"lift":7,"lightn":4,"lightweight":[4,7],"like":[0,3,4,7,9,10,11,13,14,16],"limit":[1,2,4,6,8,13,15,16],"line":[6,7],"liner":2,"lingua":7,"link":2,"lint":8,"list":[0,6,7,9,10,13,15],"list_all_us":11,"list_book":[14,15],"list_item":10,"list_pet":10,"list_us":[0,10,12],"list_users_v2":10,"listen":3,"live":[4,8,10,16],"ll":[6,7,10,12,14,15],"load":[0,2,3,4,5,7,10],"load_dotenv":5,"local":[3,5,6,12],"localhost":[4,5,7,9,10,11,14,15,16],"locat":[0,7,11,12],"lock":[2,4],"log":[1,2,4,6,11,13],"log_error":0,"log_level":2,"log_request":13,"log_respons":10,"logger":[2,10],"logic":[6,7,10],"login":[10,11],"logout":11,"long":7,"look":[3,4,6,7],"loop":[7,12,16],"lose":[2,15,16],"lower":[0,5],"lowercas":7,"machin":10,"made":[0,6],"magic":12,"mai":4,"main":[3,8],"make":[4,5,7,8,9,10,11,12,16],"malici":10,"manag":[2,5,6,9,10,11,13,15,16],"mani":[0,4,7,10],"manual":0,"map":[2,7,10,12,15],"mapped_column":[2,15],"mapper":15,"marimo":[2,10],"mark":[2,10],"marker":2,"marshmallow":[0,2,10],"match":[0,5,7,8,10,14],"matter":10,"max_ag":[0,10],"maximum":[0,13],"md":2,"me":[0,11],"mean":[4,7,10,12],"mechan":10,"media":[0,2,4,6,7,9,10,11,12,14,15],"memori":[0,2,6,7,10],"messag":[0,7,10,11,13,16],"messagepack":[2,6],"metadata":[0,7,8,15],"method":[0,2,6,7,9,11,12,13,14,15,16],"microservic":10,"middelwar":0,"middlewar":[0,2,6,7,10],"middleware_cl":0,"middleware_config":0,"might":7,"migrat":[2,6,7,10,15],"mime":0,"mimetyp":[0,7,10],"min":[0,10],"mind":13,"minim":[4,16],"minimum":2,"minor":2,"miss":[2,9,10,11],"mix":10,"ml":10,"mobil":11,"mode":[0,4,6],"model":[0,2,6,8,9,10],"model_dump":15,"model_valid":15,"modern":[2,4,10,11,12],"modifi":[0,10,13,14,15],"modul":[0,2,6,7,10],"monitor":4,"more":[0,3,4,7,10,11,12,13,14,16],"most":[0,3,4,5,7,9,10,11,13,15],"mount":[0,2,6,12],"move":[2,7,10,12],"msgpack":[2,8,10],"much":[7,10],"multi":0,"multipart":[2,7],"multipl":[0,2,4,10,14],"multiplay":[10,16],"must":[0,7,10,11,14,16],"mutabl":6,"mutat":[0,7,12],"my":0,"my_templ":7,"myapi":4,"myapp":[3,4,10],"mydb":15,"mypi":8,"mysql":15,"n":[0,7],"name":[0,4,5,6,7,9,10,12],"namespac":2,"narrow":2,"nativ":12,"natur":[9,15],"nearli":12,"need":[4,5,6,7,9,10,11,12,13,15,16],"negoti":[0,2,6,7,8,9],"nervou":7,"network":[9,16],"never":[4,5,10,11,14],"new":[0,7,9,10,12,14,16],"new_endpoint":12,"next":[6,13,16],"next_id":14,"nginx":4,"non":7,"none":[0,2,11,14,15],"nonexist":16,"normal":[0,10,16],"nosniff":13,"notabl":2,"notasecret":0,"note":[7,10,12,14],"notebook":[2,10],"notic":7,"notif":10,"now":[2,7,10,11,15,16],"npm":3,"nullabl":15,"number":[0,2,7],"o":[0,3,5,7,12],"object":[0,2,7,10,12,13,15,16],"objecttyp":[0,10],"obviou":9,"octet":0,"off":[5,7],"offload":4,"offset":15,"often":[3,7,10],"ok":[0,7,9,14],"old":12,"older":15,"omit":4,"on_delet":10,"on_ev":[0,9,10],"on_get":[6,10],"on_post":[6,10],"on_put":10,"on_request":[6,10],"on_startup":9,"onc":[8,10,12,14],"one":[0,2,5,6,7,10,12,15],"ones":[6,7,10],"onion":13,"onli":[0,5,7,10,12,14],"onmessag":[10,16],"open":[2,7,8,15,16],"open_database_connection_pool":0,"openapi":[0,1,2,6,8,14],"openapi_rout":0,"openapi_them":0,"oper":[7,10,12,14],"opt":10,"option":[0,2,4,6,7,13],"option1":13,"option2":13,"orchestr":4,"order":[0,6],"order_bi":15,"organ":[0,5,9,10,12],"origin":[10,13],"orm":15,"other":[0,2,3,4,6,7,15],"otherwis":[0,10,16],"our":14,"out":[5,6,7,13],"outermost":13,"outgo":[7,10],"output":14,"outsid":13,"over":[0,6,7,10,12,15],"overal":2,"overhead":[9,13],"overrid":[0,10],"overwhelm":10,"own":[4,10,15],"p":[4,11,16],"pace":10,"packag":[2,3,4,8],"page":[0,2,5,7,10,11,16],"pagin":7,"painless":9,"pair":0,"param":[0,2,6,7,12],"paramet":[0,6,9,10,14],"parameter":0,"pars":[0,2,7,9,10],"parser":2,"part":[2,6,7,10],"parti":6,"pass":[0,3,4,7,9,10,12,13,15,16],"passion":6,"password":11,"patch":[7,10],"path":[0,2,3,6,7,9,10,11,13],"path_matches_rout":0,"path_param":[0,2,7],"pattern":[0,4,6,7,8,10,11,12,13,14,15],"payload":11,"pdf":[0,7,9,10],"pep":2,"per":[0,1,2,4,6,9,10],"perfect":10,"perfectli":13,"perform":13,"period":[0,2,9,10],"perman":7,"permiss":11,"permit":10,"persist":[0,10,16],"person":6,"pet":[0,10],"petin":10,"petout":10,"petschema":[0,10],"pgdata":4,"photo":10,"piec":10,"pin":[2,4],"pip":[2,3,4,5,6,8,11,15,16],"pipe":4,"place":[5,10],"placehold":[7,16],"plain":[0,7,10,13,16],"platform":[2,3,5,6,7],"pleasant":6,"plot":10,"plu":15,"plugin":2,"poethepoet":2,"point":[3,4,8,14],"polici":[10,13,16],"poll":4,"pool":[0,6,7,10,12,15],"popular":[7,10,15],"port":[0,3,4,5,7,9],"portion":0,"possibl":7,"post":[0,5,7,9,10,11,12,14,15],"postgr":4,"postgres_db":4,"postgres_password":4,"postgres_us":4,"postgresql":[4,6],"potenti":2,"power":[6,9,10,13,15,16],"practic":10,"prefer":10,"prefix":[0,2,10],"present":7,"prevent":[5,10],"price":[0,9,10],"primari":0,"primary_kei":15,"print":[0,5,10,13,15,16],"privat":10,"proce":16,"process":[0,4,6,7,9,10,13],"process_data":7,"procfil":[2,4],"prod":5,"produc":[0,7],"product":[2,3,5,6,7,9,10,11,15],"profil":10,"programmat":10,"progress":10,"project":[2,3],"propag":9,"proper":[7,11,15],"properli":[2,5,9,15,16],"properti":[0,2,7,9],"prose":2,"protect":[4,11],"proto":4,"protocol":[3,7,9,10,13,16],"prototyp":[2,3,6],"provid":0,"proxi":6,"public":[0,6,10],"public_path":11,"pure":[2,6],"push":[2,4,6,10],"put":[6,10,14,15],"py":[2,3,4,5,7,8,9,10,14,15],"pydant":[0,2,6,9,14,15],"pyjwt":11,"pypi":2,"pyproject":[2,8],"pytest":[6,7,8,9,16],"python":[0,2,3,4,5,6,7,10,14,15,16],"pythonpath":3,"q":[0,7,12],"queri":[2,4,6,7,10,15,16],"query_str":0,"querydict":0,"queue":[6,7,8],"quick":[0,3,6],"quickstart":2,"r":[7,9],"race":9,"railwai":[3,4],"rais":[0,2,9,10,11,16],"raise_server_except":9,"random":[0,5],"rang":[0,7,9,10],"rapidoc":[0,10],"rare":7,"rate":[1,2,4,6,8,13],"rate_limit":0,"ratelimit":[0,2,6,9,10,13],"rather":[9,16],"raw":[0,3,6,7,10,13,15,16],"re":[0,4,7,9,10,12,13,14,16],"reach":[11,13],"react":[2,10],"reactiv":10,"read":[0,2,3,5,6,10,11,12,14,15],"readabl":10,"readi":[4,5,6,7],"real":[2,5,6,7,10,11,14,15,16],"realli":[9,10],"receiv":[0,6,7,9,10,11,13,16],"receive_byt":[10,16],"receive_incom":7,"receive_json":[10,16],"receive_text":[9,10,16],"recommend":10,"reconnect":10,"record":2,"recv":16,"redirect":[0,2,7,11,12],"redoc":[0,10],"reduc":2,"ref":3,"refactor":[2,9],"refer":[2,6,9],"referr":13,"refresh":15,"refus":10,"regist":[0,9,10,11],"register_blueprint":12,"reject":[1,9,10,16],"relat":[0,10,15],"releas":[2,8],"reliabl":9,"reload":8,"remain":[0,9,10],"rememb":11,"remov":[10,12,14,16],"renam":9,"render":[0,4,6,10],"render_async":7,"render_templ":12,"replac":[2,7,10,14],"repo":8,"report":[7,9,10],"repres":0,"represent":0,"reproduc":4,"req":[0,2,4,6,7,9,10,11,12,13,14,15,16],"request":[1,2,3,4,6,8,11,12,13,14,15],"request_id":[0,2,10,13],"request_model":[0,2,9,10,14,15],"requestcontext":[2,10],"requestcontextfilt":2,"requir":[0,2,4,9,10],"require_rol":11,"research":6,"resolv":[2,10],"resolve_hello":[0,10],"resourc":[7,10,14],"resp":[0,2,4,6,7,9,10,11,12,13,14,15,16],"respect":3,"respond":[0,2,3,4,5,7,8,9,10,11,12,13,14,15,16],"respons":[2,6,8,9,10,12,13,14,15,16],"response_model":[0,2,10,14,15],"rest":[2,4,6,7,10],"restrict":[4,10,11],"result":[0,2,7,10,15],"resum":2,"resume_incomplet":2,"retri":[0,10],"retriev":[0,10,14],"return":[0,2,4,6,7,9,10,11,12,13,14,15],"reusabl":11,"revers":[0,6],"reverse_proxi":4,"revok":11,"rework":2,"rewrit":2,"rewrot":2,"rfc3986":2,"right":[6,7,10,12,13],"role":[2,6],"roll":15,"room":6,"root":[2,10],"rotat":5,"rout":[1,2,4,6,8,9,13,14,15,16],"routegroup":0,"router":[2,8],"rst":2,"ruff":[2,8],"rule":5,"run":[0,2,3,6,9,10,12,13,16],"run_sync":15,"runnabl":8,"runner":[2,4],"runtim":3,"runtimeerror":0,"s3":3,"safe":[2,14],"sai":7,"said":4,"same":[3,4,6,7,10,12,13,14,15],"sandbox":[2,6],"save":[7,16],"scalar":15,"scale":[6,11],"schema":[0,2,6,10,11,14,15],"scope":[0,10,13],"scratch":[6,14],"script":16,"search":[0,2,7,10],"searchabl":10,"second":0,"secret":[4,6,7,10,11],"secret_kei":[0,3,4,5,10,11],"section":[2,10],"secur":[0,10,13],"securityheadersmiddlewar":13,"see":[0,4,5,7,9,10,13,14,15],"select":[0,2,15],"self":[0,10,11,13],"semant":2,"send":[0,2,6,9,10,11,13,14,16],"send_byt":[10,16],"send_email":0,"send_json":[10,16],"send_text":[9,10,16],"send_with_head":13,"sensit":11,"sent":[0,2,6,7,13],"sentri":10,"separ":[7,9,14],"sequenti":2,"serial":[0,2,6,7,10,16],"serializ":7,"serv":[0,2,3,4,5,6,7,9,14,16],"server":[0,2,3,4,5,6,8,9,11,13,14,15],"servererrormiddlewar":13,"servestat":2,"servic":[0,3,4,6,9,10,11,14],"session":[0,2,5,6,7,9,12,13,15],"session_id":10,"sessionmiddlewar":13,"set":[0,2,3,4,5,6,7,9,10,11,15,16],"set_cooki":[0,2,10],"set_text":0,"setattr":15,"setup":[2,5,6,9],"sever":[10,13,16],"sftp":3,"sh":4,"shape":10,"share":[0,3,7,9,10,15],"shell":5,"short":[0,1,2,10],"shorthand":0,"should":[4,5,14,15],"shouldn":0,"show":[2,10,12,15,16],"shut":[10,15],"shutdown":[0,4,6,9,10],"shutdwown":2,"sibl":6,"side":[7,10,11,16],"sidebar":2,"sign":[0,5,6,7,10,11,13],"signatur":[7,10,12],"significantli":4,"signup":11,"simpl":[3,4,9,10,11,13,14,16],"simplecooki":0,"simpler":[7,10,11,13],"simplest":[5,7,11,13,16],"simpli":11,"simplic":[6,15],"simul":7,"sinc":[7,9],"singl":[0,2,3,6,7,8,10,12,15],"sit":13,"size":[0,15],"sk":11,"skip":[0,6,10],"slash":7,"sleep":[7,9],"slim":4,"slow":7,"slowlori":4,"slug":7,"small":[4,6,9,10],"smaller":4,"so":[9,10,11,12,13,14,15],"solv":10,"some":[4,5,10],"some_packag":13,"somemiddlewar":13,"someon":[5,7,10,16],"someth":[6,7,9,10],"sometim":[7,10],"somewher":7,"sourc":[0,5,8,10],"spa":11,"spawn":4,"spec":[7,10],"special":[6,10],"specif":[0,2,5,9,10,11,13,14,16],"specifi":3,"sphinx":8,"spin":7,"split":5,"sprawl":6,"sql":15,"sqlalchemi":[2,6,7,14],"sqlite":[5,15],"sse":[0,2,6],"ssl":4,"stabil":2,"stack":13,"stai":[12,15],"standard":[3,4,10,11,14],"starlett":[0,2,6,9,16],"start":[0,3,4,6,10,11,13,14,15],"startswith":11,"startup":[0,2,6,9,10],"state":[0,2,9,10,11,16],"stateless":11,"statement":6,"static":[0,2,4,6,7,16],"static_app":0,"static_dir":[0,10],"static_rout":[0,2,10],"staticfil":0,"statu":[2,4,6,7,9,10,14],"status_cod":[0,6,7,9,10,11,12,13,14,15],"status_code_saf":0,"stderr":0,"stdlib":2,"still":[10,12],"stop":[8,10],"storag":[3,6],"store":[0,5,10,11,14],"str":[0,7,9,10,11,14,15],"straightforward":10,"stranger":[0,10],"strategi":[2,6],"stream":[0,2,6,10,13],"stream_data":0,"stream_fil":[0,2,10],"strict":[10,13],"string":[0,6,7,10,15,16],"strip":[2,10,11],"structur":[1,2,6],"style":[10,15],"stylesheet":10,"sub":11,"subclass":0,"subcommand":3,"subject":0,"submiss":0,"submit":0,"subrout":[6,9,10,12],"subsequ":[10,11],"subtl":2,"succe":9,"success":[0,7,14],"successfulli":14,"successor":4,"suit":[8,9],"supersed":10,"suppli":2,"support":[0,1,2,3,4,6,7,12,15,16],"swagger":[0,6,10,14],"swagger_ui":[0,10],"swallow":16,"switch":[2,15,16],"sync":[2,6,7,12],"synchron":[0,12],"syntax":[2,6,7,12,15],"synthet":9,"syslog":10,"system":[3,4,7,10],"t":[0,4,5,7,9,10,11,12,13,14,15],"tab":16,"tabl":15,"tag":0,"take":[6,7],"tamper":[10,11],"target":2,"task":[0,2,6,8],"teach":6,"tear":10,"tell":[7,10,14,15],"templat":[0,2,6],"template_str":[0,7],"templates_dir":0,"termin":[3,4,16],"terms_of_servic":0,"test":[0,2,3,5,6,7,14],"test_500":[2,9],"test_api":9,"test_create_item":9,"test_custom_error":9,"test_echo":16,"test_flask_mount":9,"test_head":9,"test_hello":9,"test_hook":9,"test_json":9,"test_mount":8,"test_rate_limit":9,"test_respond":8,"test_upload":9,"test_valid":9,"test_websocket":9,"test_websocket_404":16,"test_with_lifespan":9,"testclient":[0,2,9,16],"text":[0,2,6,7,9,10,12,16],"textcont":16,"than":[4,9,10,11,12,13,14,15,16],"thei":[0,5,7,9,10,11,12,13,14,16],"them":[3,4,6,7,9,10,11,12,14,16],"theme":[0,10],"themselv":10,"thi":[0,2,3,4,5,6,7,9,10,11,12,13,14,15,16],"thing":[5,6,7,9,10,13],"think":7,"third":[6,9],"though":4,"thousand":4,"thread":[0,2,6,7,12],"threadpoolexecutor":[0,2],"three":[7,10,16],"through":[0,7,10,13,14,16],"throughput":10,"thu":0,"ti":4,"time":[0,2,6,7,9,10,12,13,14,15,16],"time_start":0,"timedelta":11,"timeout":4,"timezon":11,"timingmiddlewar":13,"tip":[2,6],"titl":[0,2,7,10,14,15],"tl":4,"togeth":[4,6,10],"token":[0,6,7,10,16],"token_hex":5,"toml":[2,8],"too":[0,3,4,9,10],"tool":[4,8,11,13],"toolbelt":2,"toolkit":15,"top":[0,5],"total":10,"tour":[0,2,6,7],"trace":10,"traceback":[0,2,5,10],"track":15,"tradit":[10,11],"traffic":4,"transact":15,"transform":13,"translat":12,"transport":10,"treat":[0,10],"trick":10,"trigger":9,"true":[0,2,5,7,9,10,11,12,13,15,16],"trust":[2,6,9],"trustedhostmiddlewar":[4,13],"try":[6,7,11,16],"tupl":[0,7,9],"tutori":[2,7,14],"two":[7,9,10,13],"type":[0,2,6,10,12,13,14,15,16],"typic":[7,10],"typo":[2,10],"ui":[0,2,6,10,14],"unauthor":[0,10,11],"under":[0,7,10,12],"underlin":2,"understand":[6,7],"unexpectedli":16,"unhandl":13,"unicod":0,"union":2,"uniqu":10,"unit":15,"univers":5,"unknown":0,"unless":[10,11],"unlik":10,"unmaintain":2,"unmatch":10,"unpin":2,"unprocess":10,"unrecogn":10,"until":7,"up":[0,2,4,7,10],"updat":[2,6,7,10,15,16],"update_book":[14,15],"upgrad":[2,8,10,16],"upload":[0,2,6,7],"url":[0,2,5,6,7,9,10,11,12,13,15],"url_for":[0,2,9],"url_prefix":12,"urllib":2,"us":[0,2,3,4,6,7,10,12,14,16],"usag":[0,2],"user":[0,4,5,7,10,11,12,15],"user_id":[7,10,11,12],"user_rol":11,"usernam":[10,11],"usr":4,"usual":9,"utc":11,"utcnow":2,"utf":0,"uuid":[0,2,7,10],"uuid4":0,"uv":[2,3,4,5,6,8,11,15],"uvicorn":[0,2,6,7,13],"uvloop":4,"v":6,"v1":[0,10],"v2":10,"valid":[0,2,6,7,11,13,14,15],"valu":[0,6,7,9,10,11,12,13,14,15,16],"valueerror":[0,9,10,12,14],"var":4,"variabl":[0,4,6,7],"ve":[6,9,12],"venv":8,"verb":10,"veri":[0,7,15],"verif":11,"verifi":[4,9,11],"verify_token":11,"version":[0,2,6,9,10,14],"via":[0,2,4,5,10,12],"view":[0,2,6,7,9,12],"violat":16,"virtual":[3,4],"visit":[10,14],"volum":4,"vue":10,"w":[9,10,16],"wa":[0,2,7,14],"wai":[3,4,6,7,10,11,12,13,15],"wait":[4,12],"walk":[7,10,14],"walkthrough":10,"want":[0,3,4,6,7,9,10,13,14,15,16],"warn":2,"watch":8,"we":[14,15,16],"web":[0,4,6,10,15],"websit":10,"websocket":[0,1,2,4,6,7,13],"websocket_connect":[9,16],"websocketdisconnect":[2,16],"websocketrout":8,"welcom":[6,7,11],"well":[6,11],"went":6,"werkzeug":[2,9],"what":[0,7,9,10,16],"whatev":[7,10],"when":[0,2,3,4,5,6,7,9,10,12,14,15,16],"where":[0,4,7,10,11,15,16],"whether":[0,7],"which":[0,2,7,9,10,12,15],"whichev":6,"while":[7,10,12,16],"whitenois":2,"who":[6,7,11],"widget":[9,10],"wildcard":10,"window":2,"wire":7,"with_app":10,"within":[2,10,15],"without":[0,2,4,7,9,10,11,15],"won":[7,9,10,15],"work":[3,4,5,6,7,10,13,14,15],"workdir":4,"worker":4,"world":[0,3,6,9,10,12],"worri":9,"would":9,"wrap":[0,7,9,10,13],"wrapper":8,"write":[6,7,10,12],"wrong":10,"ws_auth":16,"wsgi":[0,2,4,6,9,10,12],"www":5,"x":[0,2,4,6,7,9,10,11,12,13,14],"x00":16,"x01":16,"x02":16,"x89png":7,"xml":0,"xss":10,"xv":8,"yaml":[0,2,6,7,8,9,10],"year":[14,15],"yield":[0,10,15],"yml":[0,4,10,11],"you":[0,3,4,5,7,9,10,11,12,13,14,15,16],"your":[0,3,4,5,6,7,9,10,11,12,13,16],"yourself":7,"zero":4},"titles":["API Reference","Backlog","Changelog","Command Line Interface","Deployment","Configuration","Responder","Quick Start","Development Sandbox","Testing","Feature Tour","Authentication","Migrating from Flask","Writing Middleware","Building a REST API","Using SQLAlchemy","WebSocket Tutorial"],"titleterms":{"":14,"0":2,"01":2,"02":2,"03":2,"04":2,"08":2,"09":2,"1":2,"10":2,"11":2,"12":2,"13":2,"15":2,"16":2,"17":2,"18":2,"19":2,"2":2,"20":2,"2018":2,"2019":2,"2026":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":2,"28":2,"29":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"In":14,"It":[5,7,14,15],"The":[0,6,12],"access":11,"ad":[2,13],"after":[9,10],"all":[5,7,14],"allow":5,"an":11,"api":[0,9,11,12,14],"app":[9,10,11],"asgi":13,"asset":3,"auth":11,"authent":11,"background":[0,7],"backlog":1,"base":[10,11],"bearer":11,"befor":[9,10,16],"big":12,"blueprint":12,"book":14,"build":[3,14],"built":13,"chang":2,"changelog":2,"chat":16,"check":[4,8],"checklist":4,"choos":11,"class":[0,5,10],"client":16,"cloud":4,"code":[0,8],"command":3,"compos":4,"configur":5,"connect":16,"content":10,"control":11,"convertor":7,"cooki":[9,10],"cor":10,"creat":[7,14],"crud":15,"custom":[3,10,11],"data":16,"databas":15,"debug":5,"defin":[14,15],"delet":14,"deploy":4,"deprec":2,"develop":8,"dict":0,"differ":12,"directli":4,"docker":4,"document":[8,10],"echo":16,"endpoint":[4,15],"env":5,"environ":[3,5],"error":[9,10,11,14],"event":[9,10],"except":11,"featur":10,"file":[3,5,9,10],"filter":10,"fix":2,"fixtur":9,"flask":12,"format":[8,16],"from":[3,12],"frontend":3,"futur":1,"get":[6,9,14],"gradual":12,"graphql":10,"group":[0,10,12],"guid":6,"handl":[9,10,14],"header":9,"health":4,"hello":7,"helper":0,"hook":[9,10,13,16],"host":[5,10],"how":16,"hst":10,"html":16,"id":10,"idea":[1,6],"instal":[6,15],"instanc":3,"interfac":3,"json":[9,12],"kei":[5,11],"launch":3,"layout":8,"lifecycl":16,"lifespan":[9,10,15],"limit":[0,9,10],"line":3,"list":14,"local":4,"log":10,"memori":14,"messagepack":10,"method":10,"middlewar":13,"migrat":12,"mode":5,"model":[14,15],"modul":3,"mount":[9,10],"name":3,"negoti":10,"next":14,"openapi":10,"order":13,"other":10,"out":14,"paramet":[7,12],"parti":13,"pattern":5,"platform":4,"postgresql":15,"product":4,"project":[6,8,14],"proxi":4,"public":11,"pure":13,"put":[5,7],"pydant":10,"queri":0,"queue":0,"quick":[7,12],"rate":[0,9,10],"read":7,"refer":[0,12],"remov":2,"render":7,"request":[0,7,9,10,16],"respond":6,"respons":[0,7],"rest":14,"revers":4,"role":11,"room":16,"rout":[0,7,10,11,12],"run":[4,7,8,14,15],"sandbox":8,"secret":5,"send":7,"sent":10,"serv":10,"server":[7,10,16],"servic":7,"session":[10,11],"setup":[8,14,15],"shutdown":15,"singl":14,"skip":11,"sqlalchemi":15,"sse":10,"starlett":13,"start":[7,9],"startup":15,"static":10,"statu":0,"storag":14,"strategi":11,"structur":10,"support":10,"task":7,"templat":[7,12],"test":[8,9,16],"third":13,"tip":[9,15],"togeth":[5,7],"token":11,"tour":10,"trust":10,"try":14,"tutori":[6,16],"type":[7,8],"updat":14,"upload":9,"url":3,"us":[5,9,11,13,15],"user":6,"uvicorn":4,"v":13,"v0":2,"v1":2,"v2":2,"v3":2,"valid":[9,10],"variabl":[3,5],"view":10,"web":[7,11],"websocket":[9,10,16],"what":[6,13,14],"when":13,"work":16,"world":7,"write":13,"you":6,"your":[14,15]}}) \ No newline at end of file diff --git a/testing.html b/testing.html index 6218dea..f364794 100644 --- a/testing.html +++ b/testing.html @@ -5,13 +5,13 @@ - Testing — responder 3.5.0 documentation + Testing — responder 3.6.0 documentation - + @@ -376,7 +376,7 @@ the Host Responder — a familiar HTTP service framework for Python.
                                                                        - v3.5.0 + v3.6.0

                                                                        Useful Links

                                                                          diff --git a/tour.html b/tour.html index d589b79..3f733f6 100644 --- a/tour.html +++ b/tour.html @@ -5,13 +5,13 @@ - Feature Tour — responder 3.5.0 documentation + Feature Tour — responder 3.6.0 documentation - + @@ -732,7 +732,7 @@ bodies by passing &

                                                                          Responder — a familiar HTTP service framework for Python.
                                                                          - v3.5.0 + v3.6.0

                                                                          Useful Links

                                                                            diff --git a/tutorial-auth.html b/tutorial-auth.html index 2a4660a..db5d36c 100644 --- a/tutorial-auth.html +++ b/tutorial-auth.html @@ -5,13 +5,13 @@ - Authentication — responder 3.5.0 documentation + Authentication — responder 3.6.0 documentation - + @@ -289,7 +289,7 @@ sessions for web apps with login pages.

                                                                            Responder — a familiar HTTP service framework for Python.
                                                                            - v3.5.0 + v3.6.0

                                                                            Useful Links

                                                                              diff --git a/tutorial-flask.html b/tutorial-flask.html index 644b150..9ac6200 100644 --- a/tutorial-flask.html +++ b/tutorial-flask.html @@ -5,13 +5,13 @@ - Migrating from Flask — responder 3.5.0 documentation + Migrating from Flask — responder 3.6.0 documentation - + @@ -253,7 +253,7 @@ Responder. When you’ve moved everything over, remove the mount.

                                                                              Responder — a familiar HTTP service framework for Python.
                                                                              - v3.5.0 + v3.6.0

                                                                              Useful Links

                                                                                diff --git a/tutorial-middleware.html b/tutorial-middleware.html index 3a395de..dd8d812 100644 --- a/tutorial-middleware.html +++ b/tutorial-middleware.html @@ -5,13 +5,13 @@ - Writing Middleware — responder 3.5.0 documentation + Writing Middleware — responder 3.6.0 documentation - + @@ -210,7 +210,7 @@ middleware when hooks aren’t enough.

                                                                                Responder — a familiar HTTP service framework for Python.
                                                                                - v3.5.0 + v3.6.0

                                                                                Useful Links

                                                                                  diff --git a/tutorial-rest.html b/tutorial-rest.html index eba0ccd..e144961 100644 --- a/tutorial-rest.html +++ b/tutorial-rest.html @@ -5,13 +5,13 @@ - Building a REST API — responder 3.5.0 documentation + Building a REST API — responder 3.6.0 documentation - + @@ -255,7 +255,7 @@ with Responder using the lifespan pattern.

                                                                                  Responder — a familiar HTTP service framework for Python.
                                                                                  - v3.5.0 + v3.6.0

                                                                                  Useful Links

                                                                                    diff --git a/tutorial-sqlalchemy.html b/tutorial-sqlalchemy.html index 63e9dfb..c0771a8 100644 --- a/tutorial-sqlalchemy.html +++ b/tutorial-sqlalchemy.html @@ -5,13 +5,13 @@ - Using SQLAlchemy — responder 3.5.0 documentation + Using SQLAlchemy — responder 3.6.0 documentation - + @@ -291,7 +291,7 @@ your database without losing data.

                                                                                    Responder — a familiar HTTP service framework for Python.
                                                                                    - v3.5.0 + v3.6.0

                                                                                    Useful Links

                                                                                      diff --git a/tutorial-websockets.html b/tutorial-websockets.html index b0801a7..97c2eb3 100644 --- a/tutorial-websockets.html +++ b/tutorial-websockets.html @@ -5,13 +5,13 @@ - WebSocket Tutorial — responder 3.5.0 documentation + WebSocket Tutorial — responder 3.6.0 documentation - + @@ -256,7 +256,7 @@ lifecycle — it connects on enter and disconnects on exit.

                                                                                      Responder — a familiar HTTP service framework for Python.
                                                                                      - v3.5.0 + v3.6.0

                                                                                      Useful Links