From dc71a0b725bf3eb77b1491c2ff02b2e749e6bdc0 Mon Sep 17 00:00:00 2001 From: kennethreitz Date: Sun, 12 Apr 2026 22:12:14 +0000 Subject: [PATCH] deploy: b678542192a873a909ade7f60840b49b9730a2b9 --- .buildinfo | 2 +- .doctrees/changes.doctree | Bin 110565 -> 119740 bytes .doctrees/environment.pickle | Bin 245057 -> 247491 bytes _modules/index.html | 6 +- _modules/responder/api.html | 6 +- _modules/responder/background.html | 6 +- _modules/responder/ext/ratelimit.html | 29 +- _modules/responder/models.html | 25 +- _modules/responder/status_codes.html | 8 +- _sources/changes.md.txt | 29 ++ _static/documentation_options.js | 2 +- api.html | 6 +- backlog.html | 6 +- changes.html | 547 ++++++++++++++------------ 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, 433 insertions(+), 345 deletions(-) diff --git a/.buildinfo b/.buildinfo index 0373b38..6252e94 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: 927e170ec6c070fcbd4e14c41825f173 +config: 5ce83980cbbb1ff8c0566b9128c91144 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/changes.doctree b/.doctrees/changes.doctree index 3ed61b7aae743ef2131853d20b0a9ae69c1efe58..5bddbebe9a1de269b70891461594cff5b7411206 100644 GIT binary patch literal 119740 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%0DdRIEl=R2#V9k!f`HJ6Y;?C?K9 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�`xI4^WEL%X`#q}LwjI)GG0+lHY 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 TzGM*=dNm=&Q5f diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index 19f6ecc6db31eca0128595eca43c04e248069cbe..049d6af2f1b0703f7a1c74e2b333ff049f126b1a 100644 GIT binary patch literal 247491 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 z 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

HW|igibzV1 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 H+pYft1sd=8 literal 245057 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 La=5p5v-N)fQPF%& diff --git a/_modules/index.html b/_modules/index.html index d9eaf4e..b71be51 100644 --- a/_modules/index.html +++ b/_modules/index.html @@ -4,13 +4,13 @@ - Overview: module code — responder 3.6.1 documentation + Overview: module code — responder 3.6.2 documentation - + @@ -58,7 +58,7 @@

Responder — a familiar HTTP service framework for Python.
- v3.6.1 + v3.6.2

Useful Links

    diff --git a/_modules/responder/api.html b/_modules/responder/api.html index 6e4605d..0e486d9 100644 --- a/_modules/responder/api.html +++ b/_modules/responder/api.html @@ -4,13 +4,13 @@ - responder.api — responder 3.6.1 documentation + responder.api — responder 3.6.2 documentation - + @@ -743,7 +743,7 @@

    Responder — a familiar HTTP service framework for Python.
    - v3.6.1 + v3.6.2

    Useful Links

      diff --git a/_modules/responder/background.html b/_modules/responder/background.html index c83453f..29b1de4 100644 --- a/_modules/responder/background.html +++ b/_modules/responder/background.html @@ -4,13 +4,13 @@ - responder.background — responder 3.6.1 documentation + responder.background — responder 3.6.2 documentation - + @@ -144,7 +144,7 @@

      Responder — a familiar HTTP service framework for Python.
      - v3.6.1 + v3.6.2

      Useful Links

        diff --git a/_modules/responder/ext/ratelimit.html b/_modules/responder/ext/ratelimit.html index 10be91a..05896a4 100644 --- a/_modules/responder/ext/ratelimit.html +++ b/_modules/responder/ext/ratelimit.html @@ -4,13 +4,13 @@ - responder.ext.ratelimit — responder 3.6.1 documentation + responder.ext.ratelimit — responder 3.6.2 documentation - + @@ -40,6 +40,7 @@

        Source code for responder.ext.ratelimit

         """Simple in-memory rate limiter for Responder."""
         
        +import threading
         import time
         from collections import defaultdict
         
        @@ -70,6 +71,7 @@
                 self.max_requests = requests
                 self.period = period
                 self._buckets: dict[str, list[float]] = defaultdict(list)
        +        self._lock = threading.Lock()
         
             def _client_key(self, req):
                 client = req.client
        @@ -81,22 +83,27 @@
                 now = time.time()
                 cutoff = now - self.period
                 self._buckets[key] = [t for t in self._buckets[key] if t > cutoff]
        +        if not self._buckets[key]:
        +            del self._buckets[key]
         
         
        [docs] def check(self, req, resp): """Check rate limit. Sets 429 status if exceeded.""" key = self._client_key(req) - self._cleanup(key) - if len(self._buckets[key]) >= self.max_requests: - resp.status_code = 429 - resp.media = {"error": "rate limit exceeded"} - resp.headers["Retry-After"] = str(self.period) - return False + with self._lock: + self._cleanup(key) + + if len(self._buckets[key]) >= self.max_requests: + resp.status_code = 429 + resp.media = {"error": "rate limit exceeded"} + resp.headers["Retry-After"] = str(self.period) + return False + + self._buckets[key].append(time.time()) + remaining = self.max_requests - len(self._buckets[key]) - self._buckets[key].append(time.time()) - remaining = self.max_requests - len(self._buckets[key]) resp.headers["X-RateLimit-Limit"] = str(self.max_requests) resp.headers["X-RateLimit-Remaining"] = str(remaining) return True
        @@ -127,7 +134,7 @@

        Responder — a familiar HTTP service framework for Python.
        - v3.6.1 + v3.6.2

        Useful Links

          diff --git a/_modules/responder/models.html b/_modules/responder/models.html index bdedfad..e57703c 100644 --- a/_modules/responder/models.html +++ b/_modules/responder/models.html @@ -4,13 +4,13 @@ - responder.models — responder 3.6.1 documentation + responder.models — responder 3.6.2 documentation - + @@ -74,12 +74,21 @@ def __getitem__(self, key): return super().__getitem__(key.lower()) + def __delitem__(self, key): + super().__delitem__(key.lower()) + def __contains__(self, key): return super().__contains__(key.lower()) def get(self, key, default=None): return super().get(key.lower(), default) + def pop(self, key, *args): + return super().pop(key.lower(), *args) + + def setdefault(self, key, default=None): + return super().setdefault(key.lower(), default) + def update(self, other=None, **kwargs): if other: for key, value in other.items(): @@ -361,8 +370,8 @@ """ if format is None: - format = "yaml" if "yaml" in self.mimetype or "" else "json" # noqa: A001 - format = "form" if "form" in self.mimetype or "" else format # noqa: A001 + format = "yaml" if "yaml" in self.mimetype else "json" # noqa: A001 + format = "form" if "form" in self.mimetype else format # noqa: A001 formatter: Callable if isinstance(format, str): @@ -538,9 +547,11 @@ self.mimetype = guessed or "application/octet-stream" async def file_generator(): - with open(path, "rb") as f: + import anyio + + async with await anyio.open_file(path, "rb") as f: while True: - chunk = f.read(chunk_size) + chunk = await f.read(chunk_size) if not chunk: break yield chunk @@ -710,7 +721,7 @@

          Responder — a familiar HTTP service framework for Python.
          - v3.6.1 + v3.6.2

          Useful Links

            diff --git a/_modules/responder/status_codes.html b/_modules/responder/status_codes.html index 572defe..dc94a2a 100644 --- a/_modules/responder/status_codes.html +++ b/_modules/responder/status_codes.html @@ -4,13 +4,13 @@ - responder.status_codes — responder 3.6.1 documentation + responder.status_codes — responder 3.6.2 documentation - + @@ -125,7 +125,7 @@ def _is_category(category, status_code): - return all([(status_code >= category), (status_code < category + 100)]) + return category <= status_code < category + 100
            @@ -176,7 +176,7 @@

            Responder — a familiar HTTP service framework for Python.
            - v3.6.1 + v3.6.2

            Useful Links

              diff --git a/_sources/changes.md.txt b/_sources/changes.md.txt index b55fb6e..0b3b55f 100644 --- a/_sources/changes.md.txt +++ b/_sources/changes.md.txt @@ -5,6 +5,34 @@ 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.2] - 2026-04-12 + +### Fixed + +- GraphQL error responses now correctly return 400 status instead of always 200 +- OpenAPI docs UI now respects custom `openapi_route` instead of hardcoding `/schema.yml` +- `before_requests` default type mismatch that could crash routes called outside the router +- Blocking synchronous file I/O in `Response.stream_file()` — now uses async I/O via anyio +- Memory leak in rate limiter (empty bucket keys never cleaned up) +- Race condition in rate limiter `check()` — added thread-safe locking +- WSGI fallback catching all `TypeError`s instead of just call-signature mismatches +- Pydantic request/response model validation crashing on non-dict bodies +- Test assertions that could never fail (`or True`, `< 500` patterns) +- `CaseInsensitiveDict` missing `__delitem__`, `pop`, and `setdefault` overrides +- `assert` used for input validation in OpenAPI extension (stripped by `python -O`) +- Potential XSS in GraphiQL template endpoint injection +- Dead `or ""` in media format detection logic + +### Changed + +- `DELETE` requests now participate in Pydantic request body validation +- Simplified status code category check to use chained comparison + +### Removed + +- Unused `method` parameter from `load_target()` +- Unused Node.js setup step from CI test workflow + ## [v3.6.1] - 2026-04-12 ### Added @@ -497,6 +525,7 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Conception! +[v3.6.2]: https://github.com/kennethreitz/responder/compare/v3.6.1..v3.6.2 [v3.6.1]: https://github.com/kennethreitz/responder/compare/v3.6.0..v3.6.1 [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 diff --git a/_static/documentation_options.js b/_static/documentation_options.js index b677a0e..4bc78ff 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '3.6.1', + VERSION: '3.6.2', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/api.html b/api.html index c6f4b9d..66c807c 100644 --- a/api.html +++ b/api.html @@ -5,13 +5,13 @@ - API Reference — responder 3.6.1 documentation + API Reference — responder 3.6.2 documentation - + @@ -980,7 +980,7 @@ into. Useful in middleware and after-request hooks:

              Responder — a familiar HTTP service framework for Python.
              - v3.6.1 + v3.6.2

              Useful Links

                diff --git a/backlog.html b/backlog.html index bdf6638..fd6b105 100644 --- a/backlog.html +++ b/backlog.html @@ -5,13 +5,13 @@ - Backlog — responder 3.6.1 documentation + Backlog — responder 3.6.2 documentation - + @@ -67,7 +67,7 @@

                Responder — a familiar HTTP service framework for Python.
                - v3.6.1 + v3.6.2

                Useful Links

                  diff --git a/changes.html b/changes.html index 5c31d73..5e54f74 100644 --- a/changes.html +++ b/changes.html @@ -5,13 +5,13 @@ - Changelog — responder 3.6.1 documentation + Changelog — responder 3.6.2 documentation - + @@ -45,6 +45,41 @@

                  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.6.2 - 2026-04-12

                  +
                  +

                  Fixed

                  +
                    +
                  • GraphQL error responses now correctly return 400 status instead of always 200

                  • +
                  • OpenAPI docs UI now respects custom openapi_route instead of hardcoding /schema.yml

                  • +
                  • before_requests default type mismatch that could crash routes called outside the router

                  • +
                  • Blocking synchronous file I/O in Response.stream_file() — now uses async I/O via anyio

                  • +
                  • Memory leak in rate limiter (empty bucket keys never cleaned up)

                  • +
                  • Race condition in rate limiter check() — added thread-safe locking

                  • +
                  • WSGI fallback catching all TypeErrors instead of just call-signature mismatches

                  • +
                  • Pydantic request/response model validation crashing on non-dict bodies

                  • +
                  • Test assertions that could never fail (or True, < 500 patterns)

                  • +
                  • CaseInsensitiveDict missing __delitem__, pop, and setdefault overrides

                  • +
                  • assert used for input validation in OpenAPI extension (stripped by python -O)

                  • +
                  • Potential XSS in GraphiQL template endpoint injection

                  • +
                  • Dead or "" in media format detection logic

                  • +
                  +
                  +
                  +

                  Changed

                  +
                    +
                  • DELETE requests now participate in Pydantic request body validation

                  • +
                  • Simplified status code category check to use chained comparison

                  • +
                  +
                  +
                  +

                  Removed

                  +
                    +
                  • Unused method parameter from load_target()

                  • +
                  • Unused Node.js setup step from CI test workflow

                  • +
                  +
                  +

                  v3.6.1 - 2026-04-12

                  @@ -72,8 +107,8 @@ this project adheres to -

                  Changed

                  +
                  +

                  Changed

                  • Comprehensive documentation improvements across all pages

                      @@ -92,8 +127,8 @@ WebSocket WebSocket
                    • Backlog updated: removed implemented features, replaced HTTP/2 server push with dependency injection

                  -
                  -

                  Removed

                  +
                  +

                  Removed

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

                  @@ -101,16 +136,16 @@ WebSocket WebSocket

                  v3.5.0 - 2026-03-24

                  -
                  -

                  Added

                  +
                  +

                  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

                  • @@ -119,8 +154,8 @@ WebSocket WebSocket
                  • Dropped Python 3.9 from CI

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • WSGI mount returning 400 when requesting the exact mount root path

                  • Werkzeug 3.1.7 compatibility for trusted host validation in tests

                  • @@ -129,8 +164,8 @@ WebSocket WebSocket
                  • RST title underline warning breaking docs CI

                  -
                  -

                  Removed

                  +
                  +

                  Removed

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

                  @@ -138,8 +173,8 @@ WebSocket WebSocket

                  v3.4.0 - 2026-03-22

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Upgraded to Starlette 1.0

                  • Added comprehensive docstrings across the codebase

                  • @@ -149,8 +184,8 @@ WebSocket WebSocket

                  v3.3.0 - 2026-03-22

                  -
                  -

                  Added

                  +
                  +

                  Added

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

                  • Auth, WebSocket, middleware, and configuration guides

                  • @@ -158,8 +193,8 @@ WebSocket WebSocket
                  • GitHub Pages deployment for docs

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Reworked homepage prose

                  • Rewrote CLI and API reference docs

                  • @@ -168,8 +203,8 @@ WebSocket WebSocket

                  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

                  • @@ -189,8 +224,8 @@ WebSocket WebSocket
                  • Pydantic support for OpenAPI schema generation

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Dependencies flattened: pip install responder gets everything

                  • Core deps reduced to starlette + uvicorn

                  • @@ -199,8 +234,8 @@ WebSocket WebSocket
                  • Removed poethepoet task runner

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Multipart parser losing headers when parts have multiple headers

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

                  • @@ -213,8 +248,8 @@ WebSocket WebSocket

                  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> @@ -222,8 +257,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)

                    @@ -245,8 +280,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 @@ -254,8 +289,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"

                  • @@ -265,8 +300,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

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

                  v2.0.4 - 2019-11-19

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Fix static app resolving

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

                  v2.0.3 - 2019-09-20

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Fix template conflicts

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

                  v2.0.2 - 2019-09-20

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Fix template conflicts

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

                  v2.0.1 - 2019-09-20

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Fix template import

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

                  v2.0.0 - 2019-09-19

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Refactor Router and Schema

                  @@ -319,8 +354,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

                  • @@ -336,15 +371,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

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

                  v1.3.0 - 2019-02-22

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Versioning issue

                  • Multiple cookies.

                  • @@ -361,8 +396,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.

                  • @@ -373,14 +408,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

                  @@ -388,21 +423,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

                  • @@ -412,8 +447,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

                  • @@ -422,8 +457,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.

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

                  v1.1.0 - 2018-10-27

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • Support for before_request.

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

                  v1.0.5- 2018-10-27

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Fix sessions.

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

                  v1.0.4 - 2018-10-27

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Potential bufix for cookies.

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

                  v1.0.3 - 2018-10-27

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Bugfix for redirects.

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

                  v1.0.2 - 2018-10-27

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Improvement for static file hosting.

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

                  v1.0.1 - 2018-10-26

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Improve cors configuration settings.

                  @@ -485,8 +520,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.

                  @@ -494,14 +529,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.

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

                  v0.3.2 - 2018-10-25

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Subtle improvements.

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

                  v0.3.1 - 2018-10-24

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Packaging fix.

                  @@ -527,8 +562,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                  v0.3.0 - 2018-10-24

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Interactive Documentation endpoint.

                  • Minor improvements.

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

                  v0.2.3 - 2018-10-24

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Overall improvements.

                  @@ -546,8 +581,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.

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

                  v0.2.1 - 2018-10-23

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • api.requests.

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

                  v0.2.0 - 2018-10-22

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • WebSocket support.

                  @@ -573,8 +608,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                  v0.1.6 - 2018-10-20

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • 500 support.

                  @@ -582,14 +617,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.

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

                  v0.1.4 - 2018-10-19

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Stability.

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

                  v0.1.3 - 2018-10-18

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • Sessions support.

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

                  v0.1.2 - 2018-10-18

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • Cookies support.

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

                  v0.1.1 - 2018-10-17

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Default routes.

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

                  v0.1.0 - 2018-10-17

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • Prototype of static application support.

                  @@ -642,8 +677,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.

                  @@ -651,8 +686,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.

                  @@ -660,14 +695,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.

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

                  v0.0.7 - 2018-10-16

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Immutable Request object.

                  @@ -684,8 +719,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.

                  • @@ -694,8 +729,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.

                  • @@ -704,14 +739,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.

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

                  v0.0.3 - 2018-10-13

                  -
                  -

                  Fixed

                  +
                  +

                  Fixed

                  • Bug fixes.

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

                  v0.0.2 - 2018-10-13

                  -
                  -

                  Changed

                  +
                  +

                  Changed

                  • Switch to ASGI/Starlette.

                  @@ -737,8 +772,8 @@ aliases for HTTP 308 (marked for removal in 3.0)

                  v0.0.1 - 2018-10-12

                  -
                  -

                  Added

                  +
                  +

                  Added

                  • Conception!

                  @@ -760,7 +795,7 @@ aliases for HTTP 308 (marked for removal in 3.0)

                  Responder — a familiar HTTP service framework for Python.
                  - v3.6.1 + v3.6.2

                  Useful Links

                    @@ -772,233 +807,239 @@ aliases for HTTP 308 (marked for removal in 3.0)

                    Table of Contents

                    • Changelog
                        +
                      • v3.6.2 - 2026-04-12 +
                      • v3.6.1 - 2026-04-12
                      • 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 d4f0bb2..3925f61 100644 --- a/cli.html +++ b/cli.html @@ -5,13 +5,13 @@ - Command Line Interface — responder 3.6.1 documentation + Command Line Interface — responder 3.6.2 documentation - + @@ -146,7 +146,7 @@ $ responder build /path/to/frontend

                                      Responder — a familiar HTTP service framework for Python.
                                      - v3.6.1 + v3.6.2

                                      Useful Links

                                        diff --git a/deployment.html b/deployment.html index 39a8b16..cead4df 100644 --- a/deployment.html +++ b/deployment.html @@ -5,13 +5,13 @@ - Deployment — responder 3.6.1 documentation + Deployment — responder 3.6.2 documentation - + @@ -224,7 +224,7 @@ uvicorn directly without a reverse proxy and do just fine.

                                        Responder — a familiar HTTP service framework for Python.
                                        - v3.6.1 + v3.6.2

                                        Useful Links

                                          diff --git a/genindex.html b/genindex.html index 83d3334..83c3119 100644 --- a/genindex.html +++ b/genindex.html @@ -4,13 +4,13 @@ - Index — responder 3.6.1 documentation + Index — responder 3.6.2 documentation - + @@ -354,7 +354,7 @@

                                          Responder — a familiar HTTP service framework for Python.
                                          - v3.6.1 + v3.6.2

                                          Useful Links

                                            diff --git a/guide-config.html b/guide-config.html index 3bf8bb9..bb77807 100644 --- a/guide-config.html +++ b/guide-config.html @@ -5,13 +5,13 @@ - Configuration — responder 3.6.1 documentation + Configuration — responder 3.6.2 documentation - + @@ -213,7 +213,7 @@ platform’s dashboard, Docker secrets, or a secrets manager).

                                            Responder — a familiar HTTP service framework for Python.
                                            - v3.6.1 + v3.6.2

                                            Useful Links

                                              diff --git a/index.html b/index.html index b096ad8..b518dff 100644 --- a/index.html +++ b/index.html @@ -5,13 +5,13 @@ - Responder — responder 3.6.1 documentation + Responder — responder 3.6.2 documentation - + @@ -319,7 +319,7 @@ work with — welcome.

                                              Responder — a familiar HTTP service framework for Python.
                                              - v3.6.1 + v3.6.2

                                              Useful Links

                                                diff --git a/objects.inv b/objects.inv index fdb8ec4..4f0ba61 100644 --- a/objects.inv +++ b/objects.inv @@ -1,6 +1,6 @@ # Sphinx inventory version 2 # Project: responder -# Version: 3.6.1 +# Version: 3.6.2 # 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 c746165..612022f 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -4,13 +4,13 @@ - Python Module Index — responder 3.6.1 documentation + Python Module Index — responder 3.6.2 documentation - + @@ -76,7 +76,7 @@

                                                Responder — a familiar HTTP service framework for Python.
                                                - v3.6.1 + v3.6.2

                                                Useful Links

                                                  diff --git a/quickstart.html b/quickstart.html index 74ac7d4..c3792b4 100644 --- a/quickstart.html +++ b/quickstart.html @@ -5,13 +5,13 @@ - Quick Start — responder 3.6.1 documentation + Quick Start — responder 3.6.2 documentation - + @@ -409,7 +409,7 @@ jump into the tutorials:

                                                  Responder — a familiar HTTP service framework for Python.
                                                  - v3.6.1 + v3.6.2

                                                  Useful Links

                                                    diff --git a/sandbox.html b/sandbox.html index 390ab72..478ed03 100644 --- a/sandbox.html +++ b/sandbox.html @@ -5,13 +5,13 @@ - Development Sandbox — responder 3.6.1 documentation + Development Sandbox — responder 3.6.2 documentation - + @@ -120,7 +120,7 @@ make html

                                                    Responder — a familiar HTTP service framework for Python.
                                                    - v3.6.1 + v3.6.2

                                                    Useful Links

                                                      diff --git a/search.html b/search.html index 3b027ea..fc2efa9 100644 --- a/search.html +++ b/search.html @@ -4,14 +4,14 @@ - Search — responder 3.6.1 documentation + Search — responder 3.6.2 documentation - + @@ -85,7 +85,7 @@

                                                      Responder — a familiar HTTP service framework for Python.
                                                      - v3.6.1 + v3.6.2

                                                      Useful Links

                                                        diff --git a/searchindex.js b/searchindex.js index 66bb311..d9c170b 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,"id1"],[2,"id2"],[2,"id6"],[2,"id8"],[2,"id11"],[2,"id15"],[2,"id21"],[2,"id22"],[2,"id25"],[2,"id28"],[2,"id33"],[2,"id40"],[2,"id46"],[2,"id47"],[2,"id48"],[2,"id49"],[2,"id50"],[2,"id53"],[2,"id54"],[2,"id56"],[2,"id59"],[2,"id62"],[2,"id63"],[2,"id64"],[2,"id68"]],"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,"id3"],[2,"id5"],[2,"id7"],[2,"id9"],[2,"id12"],[2,"id20"],[2,"id23"],[2,"id26"],[2,"id29"],[2,"id32"],[2,"id37"],[2,"id38"],[2,"id39"],[2,"id41"],[2,"id42"],[2,"id44"],[2,"id45"],[2,"id51"],[2,"id55"],[2,"id60"],[2,"id61"],[2,"id67"]],"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,"id10"],[2,"id14"],[2,"id16"],[2,"id17"],[2,"id18"],[2,"id19"],[2,"id24"],[2,"id27"],[2,"id30"],[2,"id31"],[2,"id34"],[2,"id35"],[2,"id36"],[2,"id43"],[2,"id52"],[2,"id57"],[2,"id58"],[2,"id65"],[2,"id66"]],"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,"id4"],[2,"id13"]],"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"]],"v3.6.1 - 2026-04-12":[[2,"v3-6-1-2026-04-12"]]},"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":[0,2,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":[0,2,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,2,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 +Search.setIndex({"alltitles":{"API Key Authentication":[[11,"api-key-authentication"]],"API Reference":[[0,null]],"Added":[[2,"added"],[2,"id1"],[2,"id4"],[2,"id9"],[2,"id11"],[2,"id14"],[2,"id18"],[2,"id24"],[2,"id25"],[2,"id28"],[2,"id31"],[2,"id36"],[2,"id43"],[2,"id49"],[2,"id50"],[2,"id51"],[2,"id52"],[2,"id53"],[2,"id56"],[2,"id57"],[2,"id59"],[2,"id62"],[2,"id65"],[2,"id66"],[2,"id67"],[2,"id71"]],"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,"id5"],[2,"id8"],[2,"id10"],[2,"id12"],[2,"id15"],[2,"id23"],[2,"id26"],[2,"id29"],[2,"id32"],[2,"id35"],[2,"id40"],[2,"id41"],[2,"id42"],[2,"id44"],[2,"id45"],[2,"id47"],[2,"id48"],[2,"id54"],[2,"id58"],[2,"id63"],[2,"id64"],[2,"id70"]],"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,"id13"],[2,"id17"],[2,"id19"],[2,"id20"],[2,"id21"],[2,"id22"],[2,"id27"],[2,"id30"],[2,"id33"],[2,"id34"],[2,"id37"],[2,"id38"],[2,"id39"],[2,"id46"],[2,"id55"],[2,"id60"],[2,"id61"],[2,"id68"],[2,"id69"]],"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,"id7"],[2,"id16"]],"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"]],"v3.6.1 - 2026-04-12":[[2,"v3-6-1-2026-04-12"]],"v3.6.2 - 2026-04-12":[[2,"v3-6-2-2026-04-12"]]},"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,"__delitem__":2,"__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],"anyio":2,"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":[2,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,2,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,2,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],"caseinsensitivedict":2,"cat":10,"catalog":14,"catch":[2,10,11,13,16],"categori":[0,2],"cd":8,"ceas":2,"celeri":7,"cell":10,"central":[0,7],"certain":0,"certif":4,"chain":2,"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":[2,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,"comparison":2,"compat":[0,2],"complement":10,"complet":[7,10,14,16],"complex":[13,15],"compon":13,"compos":[2,6,15],"comprehens":2,"compress":[0,2,6,7,13],"compromis":5,"comput":7,"concept":[2,10,12],"concern":[7,13],"concurr":[0,4],"condit":[2,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":[2,4],"correspond":15,"cors_en":5,"cors_origin":5,"cors_param":[0,5,10],"corsmiddlewar":13,"could":2,"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":[2,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":[2,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,2,6,10],"dev":[2,4,5],"develop":[3,4,5,10,15],"devic":10,"dict":[2,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,2,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":[2,9,10,15],"failur":[2,8,9],"falcon":[6,10],"fall":0,"fallback":2,"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":[0,2,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,"hardcod":2,"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":[2,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":[2,4,9,10,13,15,16],"jwt":11,"k":8,"keep":[2,4,5,7,9,10,13,15,16],"kei":[0,2,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,"leak":2,"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,"load_target":2,"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":[2,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,"mismatch":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":[2,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,"node":2,"non":[2,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,2,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,2],"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":[2,13],"over":[0,6,7,10,12,15],"overal":2,"overhead":[9,13],"overrid":[0,2,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,2,6,9,10,14],"parameter":0,"pars":[0,2,7,9,10],"parser":2,"part":[2,6,7,10],"parti":6,"particip":2,"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,2,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],"pop":2,"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":[2,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":[2,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,"setdefault":2,"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":[2,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],"simplifi":2,"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,"step":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,2,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],"typeerror":2,"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,"unus":2,"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,"workflow":2,"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":[2,10],"xv":8,"yaml":[0,2,6,7,8,9,10],"year":[14,15],"yield":[0,10,15],"yml":[0,2,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 6b1c7f2..98c7cbd 100644 --- a/testing.html +++ b/testing.html @@ -5,13 +5,13 @@ - Testing — responder 3.6.1 documentation + Testing — responder 3.6.2 documentation - + @@ -376,7 +376,7 @@ the Host Responder — a familiar HTTP service framework for Python.
                                                        - v3.6.1 + v3.6.2

                                                        Useful Links

                                                          diff --git a/tour.html b/tour.html index 0141447..baccc47 100644 --- a/tour.html +++ b/tour.html @@ -5,13 +5,13 @@ - Feature Tour — responder 3.6.1 documentation + Feature Tour — responder 3.6.2 documentation - + @@ -732,7 +732,7 @@ bodies by passing &

                                                          Responder — a familiar HTTP service framework for Python.
                                                          - v3.6.1 + v3.6.2

                                                          Useful Links

                                                            diff --git a/tutorial-auth.html b/tutorial-auth.html index 6456af4..2e1c15e 100644 --- a/tutorial-auth.html +++ b/tutorial-auth.html @@ -5,13 +5,13 @@ - Authentication — responder 3.6.1 documentation + Authentication — responder 3.6.2 documentation - + @@ -289,7 +289,7 @@ sessions for web apps with login pages.

                                                            Responder — a familiar HTTP service framework for Python.
                                                            - v3.6.1 + v3.6.2

                                                            Useful Links

                                                              diff --git a/tutorial-flask.html b/tutorial-flask.html index 6f20f05..b848725 100644 --- a/tutorial-flask.html +++ b/tutorial-flask.html @@ -5,13 +5,13 @@ - Migrating from Flask — responder 3.6.1 documentation + Migrating from Flask — responder 3.6.2 documentation - + @@ -253,7 +253,7 @@ Responder. When you’ve moved everything over, remove the mount.

                                                              Responder — a familiar HTTP service framework for Python.
                                                              - v3.6.1 + v3.6.2

                                                              Useful Links

                                                                diff --git a/tutorial-middleware.html b/tutorial-middleware.html index 7353fdc..259fac8 100644 --- a/tutorial-middleware.html +++ b/tutorial-middleware.html @@ -5,13 +5,13 @@ - Writing Middleware — responder 3.6.1 documentation + Writing Middleware — responder 3.6.2 documentation - + @@ -210,7 +210,7 @@ middleware when hooks aren’t enough.

                                                                Responder — a familiar HTTP service framework for Python.
                                                                - v3.6.1 + v3.6.2

                                                                Useful Links

                                                                  diff --git a/tutorial-rest.html b/tutorial-rest.html index 18c003f..eb6c48c 100644 --- a/tutorial-rest.html +++ b/tutorial-rest.html @@ -5,13 +5,13 @@ - Building a REST API — responder 3.6.1 documentation + Building a REST API — responder 3.6.2 documentation - + @@ -255,7 +255,7 @@ with Responder using the lifespan pattern.

                                                                  Responder — a familiar HTTP service framework for Python.
                                                                  - v3.6.1 + v3.6.2

                                                                  Useful Links

                                                                    diff --git a/tutorial-sqlalchemy.html b/tutorial-sqlalchemy.html index a1f2a6c..90ff66e 100644 --- a/tutorial-sqlalchemy.html +++ b/tutorial-sqlalchemy.html @@ -5,13 +5,13 @@ - Using SQLAlchemy — responder 3.6.1 documentation + Using SQLAlchemy — responder 3.6.2 documentation - + @@ -291,7 +291,7 @@ your database without losing data.

                                                                    Responder — a familiar HTTP service framework for Python.
                                                                    - v3.6.1 + v3.6.2

                                                                    Useful Links

                                                                      diff --git a/tutorial-websockets.html b/tutorial-websockets.html index d83a240..501b925 100644 --- a/tutorial-websockets.html +++ b/tutorial-websockets.html @@ -5,13 +5,13 @@ - WebSocket Tutorial — responder 3.6.1 documentation + WebSocket Tutorial — responder 3.6.2 documentation - + @@ -256,7 +256,7 @@ lifecycle — it connects on enter and disconnects on exit.

                                                                      Responder — a familiar HTTP service framework for Python.
                                                                      - v3.6.1 + v3.6.2

                                                                      Useful Links