From 9d31549fe8f184dd120bf4aa98fe78d147cda2fc Mon Sep 17 00:00:00 2001 From: kennethreitz Date: Tue, 24 Mar 2026 20:23:23 +0000 Subject: [PATCH] deploy: 90a082a0ac5c60a37efccbd048fd44d265bc393d --- .doctrees/api.doctree | Bin 229808 -> 230297 bytes .doctrees/environment.pickle | Bin 241190 -> 242236 bytes .doctrees/index.doctree | Bin 21606 -> 21867 bytes .doctrees/tour.doctree | Bin 82488 -> 89629 bytes _modules/responder/api.html | 18 +++++++++++- _sources/index.rst.txt | 1 + _sources/tour.rst.txt | 54 +++++++++++++++++++++++++++++++++++ api.html | 2 +- index.html | 2 ++ searchindex.js | 2 +- tour.html | 54 +++++++++++++++++++++++++++++++++++ 11 files changed, 130 insertions(+), 3 deletions(-) diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree index 78ecd0659a102f5150d94f38ff71a830490092f3..aa611125692dc2a6d2c749d9af6e2ff9da19b72b 100644 GIT binary patch literal 230297 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

f%#-mwlH?SZVh{>>rPrbei7n$Ru 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 literal 229808 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 DR}8%E diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index adb3c693c7058d3fb80e8a464d33b1158787402c..51e5f225059a5208247bc435786017610235d74d 100644 GIT binary patch delta 12811 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 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree index 7d2b673d3b341135e80390b1fc9135500e89b537..c031f44ea19fcfb308b232150825b327c328faf5 100644 GIT binary patch delta 1526 zcmbW1Ye*DP6vv%)$1Fpol*$)tTI^aINwm5TP1m>5%QV8WvTbs_=x$B3sg;@9)-Gs; zXNrjErG-?GW)VVB5fMQ_L0|e*QA81as6Ipx)H!$E62quI?C+kr=YP-npSjDt84%uI z5X8OWk&V?u;$=(w{8g&rb*WxO+H7d_)Ymt->kZ8fs%+RQDP~35=9RXq2A9XJN-gRF zO`cS%$!1fB)}|R{k*(E-h4HQU?tiP}(}E=u!da~z&ScJq7g3R*W-W)S7N?-V7fT70 zWc%Q5))FBA;n{^yYW2axY&%5TA|b|Vg%7q^xSW~7&!yRy!y{|Ha2;Z7>G}~g1s@`3 zz;kg88V z91EZ|Ckl=^OmHQ~2gNyybg?4r%E^Kwxy=y0I2y8Y*XvAT$iG-6C$Ks2q;Ps~ZlX{H z-*eyUmho&{G-fJ9d|8QdxSS-&$81!?Bplo)SdnRgRw!$jyZ|!c)W03%6}b$K^A5wY2 zz_Y@s$$y**Y{iF6A5o7-JI38&_Y_6iA}NyFC2iLHc%h%*Q?WaBRNXmF&AwxmpsJ%p z38}g!R>hTiLaKcetNKfKgjBwXRra!`kZS+Lst0AQvqs$?_)P_C%d3Pn!-M5lbVBE_ zYiYb*xDBlt3xP+Qk<0)5tdS-obZhvzY-?XV+0|dFpZE(NFkUB83ZfA zLMS3QVMS$JJGBe&Rsr57z*_`(c|R}h=Vkr8q@S1b^HP3Z#_yF4`2FOL>fnJsSE_(t`T|JPyWnwp7R>7dAtb{9dFd{Am0^_J5NybXeHkv8GUPyz z!5<=wQJQ{@N(Ep1H^ZzP>%)gMa3duiiUa)NmN8W7hY4c}6dTq-mM#vQhW*fHN|Bzy zkVz*^!dufWxs-+TCm@-%P+^LMW0_iM4j?lXW=$@zm{Zk1HPC6+!=p?Wn6fJ2zPSyY zA>ojiJ)zdiI4f!6T09|5R;gG7^I?%Jkwsa`L7Q_>-i^&>SnnGF135bRFv;LePQAKZ zhIghk*(w^{xwGNzDCB1d9RvrVi{J!Do^y*EOFP@iYw@`-pbGb%fbe`>vW=R{4V2hx z_;GxZ(Bov97$)2%+#!q*MiDlC z0clZl1s^>DW%icFrjylm%^rRc8*Y9{ut)GR(xT#5#G)68qp#wFk0X`_sl>0U7R_Iy zeoZyoN@k<29u|W;`mkBecHk-wKk-%%?fmbwNA{%uP5YF*OcGuq7LrNcWPYVhjofy$ zWwp7UlS^;9DJ++!!*FdF?jf})T*9i;K~_O;&@}GDBRc7FVY(nvnt>k$4ciymUCZvA ze?+;0*FFQ?dz%(j=T=sQ6*exaoGYt_3R@Rd=T}x`7u7GSTq~%2kISWU%V$H!LCL$5mGQK*AjH}B9-u-mUDz}gs+6(gn7am zlK2re5jGHF2-^r+LL$Q66VOmyZ)<5kWoxEi4mUfn>lUNkVys(?bc=C{7^R3YiWs4Y z;}vnVB92w;ESe6Y1T0Y4X9HgErzwi?PX8WW@2{y6-amQ0C*k@#mBPG4Muqucs)YG4 Os>nQ#9SbcxB>e#bM0#fc diff --git a/.doctrees/tour.doctree b/.doctrees/tour.doctree index 091defc771a30b7a6a41533bbaf83a557c3be386..33185ac1ed5aa08d9a9a277c48fb577f4cde15eb 100644 GIT binary patch delta 6814 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 delta 1950 zcmaJ?X>3$g6z+E^9U6q0_oh`lU1mz@#?a1mqcBu0ODmKXT0nu8q6G)0PmraQB_Kg9 zm1<4EH|BsqNrOg+3;2T!F(@%48c{(a!5{>esL@!WB*uU-#(VC2)5RbDxo^%r=ljlg z?m73)k+Y-EbdBB}#W;~O^RyG!N6~37rc+KL8e`QyrkgB9}3O6j&2C9Z%b!Re7vHo@*#>J+3xRBLJ$YbxdJ&f!Qk zFmjvvD&b>y_SFo!QHe>id&AwKshGuKoH^-PmJ^_Nijhk|A%|{WezV-Me<(h-ry3~`sX7B3 zrtN5|b<@BMG>P59Y+I5=tux^l#k#paH|X-~BYJlzc44M$x2V?TQxl}%Y?O;ComS6A zL^SH^sgdSSv+)6Mt0IqZ7Qas4)qq6AlGJbQaS5?cYmou5#gcT)cI;o^j)mr+4x&p} zQ*v}J7KvV6y;xm3<<;TExa+ezDYs9#(z~Qw)vQF{=Jmc|eX?m<=gFZx6{j()(^4dh zrSpWXQ>#a@XqKDxNXMaAYdy{h0e38G0mddeuE+$&Wjz*L1TSVyma}0L^74^WF6VhE z;D}tg^p0H@?&xS+6W-9a>dC0Fgr)T+Kh?G_ym|YEa0fqu#uc3oFGj7XanlcrQQTPT zPDt2m1n)^m=rMj#>%(eij#{^k=lxr1jmlg-1`Fs>$@i+nJ;q#)?2P!BUFwWHf~g27 zi8Ltjeg4G~4ZfPj1^&g2RvL{aovuBKKZMgwmzLm+Sm%~wR6NRK7^H>ZrE5#&|4YP8 z+A^exb~p7eM>=_yVgj`7$xwK%Nb zg85rU!rEF!!q$j$afEy!IZ@;CAw*_G9)p~_ed9)qZ@TDQX;_l?iLc}MuN2;+s&DHZ fy*9ihyf!)yy@}kXs9|fr&!+s(jW|jdTe09@$u>QG diff --git a/_modules/responder/api.html b/_modules/responder/api.html index 86b7bb5..4c41686 100644 --- a/_modules/responder/api.html +++ b/_modules/responder/api.html @@ -103,6 +103,7 @@ openapi_theme=DEFAULT_OPENAPI_THEME, lifespan=None, request_id=False, + enable_logging=False, ): """Create a new Responder API instance. @@ -128,6 +129,7 @@ :param openapi_theme: Documentation UI theme: ``"swagger_ui"``, ``"redoc"``, ``"rapidoc"``, or ``"elements"``. :param lifespan: An async context manager for startup/shutdown logic. :param request_id: If ``True``, add ``X-Request-ID`` headers to all responses. + :param enable_logging: If ``True``, enable structured logging with per-request context (request ID, method, path, client IP). """ # noqa: E501 self.background = BackgroundQueue() @@ -200,7 +202,7 @@ self.templates = Templates(directory=templates_dir) - if request_id: + if request_id and not enable_logging: import uuid as _uuid def _add_request_id(req, resp): @@ -209,6 +211,20 @@ self.router.after_request(_add_request_id) + if enable_logging: + import logging as _logging + + from .ext.logging import LoggingMiddleware, get_logger, setup_logging + + log_level = _logging.DEBUG if debug else _logging.INFO + setup_logging(level=log_level) + self.add_middleware(LoggingMiddleware) + self.log = get_logger("responder.app") + else: + import logging as _logging + + self.log = _logging.getLogger("responder.app") + @property def requests(self): """A test client connected to the ASGI app. Lazily initialized.""" diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt index f48987b..7bf221b 100644 --- a/_sources/index.rst.txt +++ b/_sources/index.rst.txt @@ -73,6 +73,7 @@ One ``pip install``, batteries included: - Sync and async views — ``async`` is always optional. - Class-based views with ``on_get``, ``on_post``, ``on_request``. - Built-in rate limiting with ``X-RateLimit`` headers. +- Structured logging with per-request context. - Content negotiation: JSON, YAML, and MessagePack. - A pleasant API with a single import statement. - OpenAPI schema generation with Swagger UI. diff --git a/_sources/tour.rst.txt b/_sources/tour.rst.txt index 6063fa8..aa81c2c 100644 --- a/_sources/tour.rst.txt +++ b/_sources/tour.rst.txt @@ -596,6 +596,60 @@ can pace themselves. The rate limiter is per-client, keyed by IP address. +Structured Logging +------------------ + +Production applications need structured, searchable logs. Responder +includes built-in logging that automatically attaches request context +— request ID, HTTP method, path, and client IP — to every log message +emitted during request handling:: + + api = responder.API(enable_logging=True) + +This gives you: + +- **Access logging** with timing for every request:: + + 2026-03-24 12:00:00 [INFO] responder.access — GET /users → 200 (1.2ms) + +- **A logger on the API instance** — use ``api.log`` anywhere in + your routes. Request context (ID, method, path, client IP) is + attached automatically:: + + @api.route("/users/{user_id:int}") + def get_user(req, resp, *, user_id): + api.log.info("fetching user %d", user_id) + # => [INFO] responder.app -- fetching user 42 [GET /users/42] [req:a1b2c3] [client:10.0.0.1] + resp.media = {"id": user_id} + +- **Request IDs** generated automatically (or forwarded from the + ``X-Request-ID`` header) and included in responses. + +The logging uses Python's standard ``logging`` module, so it works with +any handler — files, syslog, JSON formatters, Datadog, Sentry, whatever +you already use. + +For additional loggers (e.g. in helper modules), use ``get_logger``:: + + from responder.ext.logging import get_logger + logger = get_logger("myapp.db") + +You can also access the current request context directly:: + + from responder.ext.logging import RequestContext + + @api.route("/debug") + def debug(req, resp): + resp.media = { + "request_id": RequestContext.get_request_id(), + "client_ip": RequestContext.get_client_ip(), + } + +When ``enable_logging=True`` is set, it supersedes ``request_id=True`` +— the logging middleware handles request IDs itself, so you don't get +duplicate headers. + + Pydantic Validation ------------------- diff --git a/api.html b/api.html index 92c476f..196525f 100644 --- a/api.html +++ b/api.html @@ -65,7 +65,7 @@ module and use it to define your entire web service.

-class responder.API(*, debug=False, title=None, version=None, description=None, terms_of_service=None, contact=None, license=None, openapi=None, openapi_route='/schema.yml', static_dir='static', static_route='/static', templates_dir='templates', auto_escape=True, secret_key='NOTASECRET', enable_hsts=False, docs_route=None, cors=False, cors_params={'allow_credentials': False, 'allow_headers': (), 'allow_methods': ('GET',), 'allow_origin_regex': None, 'allow_origins': (), 'expose_headers': (), 'max_age': 600}, allowed_hosts=None, openapi_theme='swagger_ui', lifespan=None, request_id=False)[source]
+class responder.API(*, debug=False, title=None, version=None, description=None, terms_of_service=None, contact=None, license=None, openapi=None, openapi_route='/schema.yml', static_dir='static', static_route='/static', templates_dir='templates', auto_escape=True, secret_key='NOTASECRET', enable_hsts=False, docs_route=None, cors=False, cors_params={'allow_credentials': False, 'allow_headers': (), 'allow_methods': ('GET',), 'allow_origin_regex': None, 'allow_origins': (), 'expose_headers': (), 'max_age': 600}, allowed_hosts=None, openapi_theme='swagger_ui', lifespan=None, request_id=False, enable_logging=False)[source]

The primary web-service class.

Parameters:
diff --git a/index.html b/index.html index cb06178..53d1bd0 100644 --- a/index.html +++ b/index.html @@ -103,6 +103,7 @@ work with — welcome.

  • Sync and async views — async is always optional.

  • Class-based views with on_get, on_post, on_request.

  • Built-in rate limiting with X-RateLimit headers.

  • +
  • Structured logging with per-request context.

  • Content negotiation: JSON, YAML, and MessagePack.

  • A pleasant API with a single import statement.

  • OpenAPI schema generation with Swagger UI.

  • @@ -156,6 +157,7 @@ work with — welcome.

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

    The rate limiter is per-client, keyed by IP address.

    +
    +

    Structured Logging

    +

    Production applications need structured, searchable logs. Responder +includes built-in logging that automatically attaches request context +— request ID, HTTP method, path, and client IP — to every log message +emitted during request handling:

    +
    api = responder.API(enable_logging=True)
    +
    +
    +

    This gives you:

    +
      +
    • Access logging with timing for every request:

      +
      2026-03-24 12:00:00 [INFO] responder.access — GET /users → 200 (1.2ms)
      +
      +
      +
    • +
    • A logger on the API instance — use api.log anywhere in +your routes. Request context (ID, method, path, client IP) is +attached automatically:

      +
      @api.route("/users/{user_id:int}")
      +def get_user(req, resp, *, user_id):
      +    api.log.info("fetching user %d", user_id)
      +    # => [INFO] responder.app -- fetching user 42 [GET /users/42] [req:a1b2c3] [client:10.0.0.1]
      +    resp.media = {"id": user_id}
      +
      +
      +
    • +
    • Request IDs generated automatically (or forwarded from the +X-Request-ID header) and included in responses.

    • +
    +

    The logging uses Python’s standard logging module, so it works with +any handler — files, syslog, JSON formatters, Datadog, Sentry, whatever +you already use.

    +

    For additional loggers (e.g. in helper modules), use get_logger:

    +
    from responder.ext.logging import get_logger
    +logger = get_logger("myapp.db")
    +
    +
    +

    You can also access the current request context directly:

    +
    from responder.ext.logging import RequestContext
    +
    +@api.route("/debug")
    +def debug(req, resp):
    +    resp.media = {
    +        "request_id": RequestContext.get_request_id(),
    +        "client_ip": RequestContext.get_client_ip(),
    +    }
    +
    +
    +

    When enable_logging=True is set, it supersedes request_id=True +— the logging middleware handles request IDs itself, so you don’t get +duplicate headers.

    +

    Pydantic Validation

    Pydantic models integrate directly with @@ -712,6 +765,7 @@ bodies by passing &

  • Trusted Hosts
  • Request ID
  • Rate Limiting
  • +
  • Structured Logging
  • Pydantic Validation
  • Content Negotiation
  • MessagePack