gitextract_37k7scdk/ ├── .appveyor.yml ├── .coveragerc ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ ├── feature-request.yml │ │ └── rfc.yml │ ├── stale.yml │ └── workflows/ │ ├── codeql-analysis.yml │ ├── coverage-upload.yml │ ├── coverage.yml │ ├── publish-release.yml │ └── tests.yml ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MANIFEST.in ├── Makefile ├── README.rst ├── SECURITY.md ├── bandit.baseline ├── changelogs/ │ ├── .gitignore │ ├── 1892.removal.rst │ ├── 1904.feature.rst │ └── 1970.misc.rst ├── codecov.yml ├── crowdin.yml ├── docker/ │ ├── Dockerfile │ └── Dockerfile-base ├── docs/ │ ├── Makefile │ ├── _static/ │ │ ├── .gitkeep │ │ └── custom.css │ ├── _templates/ │ │ └── banner.html │ ├── conf.py │ ├── index.html │ ├── index.rst │ ├── make.bat │ └── sanic/ │ ├── api/ │ │ ├── app.rst │ │ ├── blueprints.rst │ │ ├── core.rst │ │ ├── exceptions.rst │ │ ├── router.rst │ │ ├── server.rst │ │ └── utility.rst │ ├── api_reference.rst │ ├── changelog.rst │ ├── contributing.rst │ └── releases/ │ ├── 21/ │ │ ├── 21.12.md │ │ └── 21.9.md │ ├── 22/ │ │ ├── 22.12.md │ │ ├── 22.3.md │ │ ├── 22.6.md │ │ └── 22.9.md │ └── 23/ │ ├── 23.3.md │ └── 23.6.md ├── examples/ │ ├── Dockerfile │ ├── add_task_sanic.py │ ├── amending_request_object.py │ ├── authorized_sanic.py │ ├── blueprint_middlware_execution_order.py │ ├── blueprints.py │ ├── delayed_response.py │ ├── docker-compose.yml │ ├── exception_monitoring.py │ ├── hello_world.py │ ├── http_redirect.py │ ├── limit_concurrency.py │ ├── log_request_id.py │ ├── logdna_example.py │ ├── modify_header_example.py │ ├── override_logging.py │ ├── pytest_xdist.py │ ├── raygun_example.py │ ├── redirect_example.py │ ├── request_stream/ │ │ ├── client.py │ │ └── server.py │ ├── request_timeout.py │ ├── rollbar_example.py │ ├── run_asgi.py │ ├── run_async.py │ ├── run_async_advanced.py │ ├── sentry_example.py │ ├── simple_async_view.py │ ├── static/ │ │ └── robots.txt │ ├── static_assets.py │ ├── teapot.py │ ├── try_everything.py │ ├── unix_socket.py │ ├── url_for_example.py │ ├── versioned_blueprint_group.py │ ├── vhosts.py │ ├── websocket.html │ └── websocket.py ├── guide/ │ ├── Procfile │ ├── config/ │ │ └── en/ │ │ ├── general.yaml │ │ ├── navbar.yaml │ │ └── sidebar.yaml │ ├── content/ │ │ └── en/ │ │ ├── built-with-sanic.md │ │ ├── emoji.py │ │ ├── guide/ │ │ │ ├── advanced/ │ │ │ │ ├── class-based-views.md │ │ │ │ ├── commands.md │ │ │ │ ├── proxy-headers.md │ │ │ │ ├── signals.md │ │ │ │ ├── streaming.md │ │ │ │ ├── versioning.md │ │ │ │ └── websockets.md │ │ │ ├── basics/ │ │ │ │ ├── README.md │ │ │ │ ├── app.md │ │ │ │ ├── cookies.md │ │ │ │ ├── handlers.md │ │ │ │ ├── headers.md │ │ │ │ ├── listeners.md │ │ │ │ ├── middleware.md │ │ │ │ ├── request.md │ │ │ │ ├── response.md │ │ │ │ ├── routing.md │ │ │ │ └── tasks.md │ │ │ ├── best-practices/ │ │ │ │ ├── blueprints.md │ │ │ │ ├── decorators.md │ │ │ │ ├── exceptions.md │ │ │ │ ├── logging.md │ │ │ │ └── testing.md │ │ │ ├── deployment/ │ │ │ │ ├── caddy.md │ │ │ │ ├── docker.md │ │ │ │ ├── kubernetes.md │ │ │ │ └── nginx.md │ │ │ ├── getting-started.md │ │ │ ├── how-to/ │ │ │ │ ├── README.md │ │ │ │ ├── authentication.md │ │ │ │ ├── autodiscovery.md │ │ │ │ ├── cors.md │ │ │ │ ├── csrf.md │ │ │ │ ├── db.md │ │ │ │ ├── decorators.md │ │ │ │ ├── ipv6.md │ │ │ │ ├── mounting.md │ │ │ │ ├── orm.md │ │ │ │ ├── request-id-logging.md │ │ │ │ ├── serialization.md │ │ │ │ ├── server-sent-events.md │ │ │ │ ├── static-redirects.md │ │ │ │ ├── table-of-contents.md │ │ │ │ ├── task-queue.md │ │ │ │ ├── tls.md │ │ │ │ ├── validation.md │ │ │ │ └── websocket-feed.md │ │ │ ├── introduction.md │ │ │ └── running/ │ │ │ ├── app-loader.md │ │ │ ├── configuration.md │ │ │ ├── development.md │ │ │ ├── inspector.md │ │ │ ├── manager.md │ │ │ └── running.md │ │ ├── help.md │ │ ├── index.md │ │ ├── migrate.py │ │ ├── organization/ │ │ │ ├── code-of-conduct.md │ │ │ ├── contributing.md │ │ │ ├── policies.md │ │ │ └── scope.md │ │ ├── plugins/ │ │ │ ├── sanic-ext/ │ │ │ │ ├── configuration.md │ │ │ │ ├── convenience.md │ │ │ │ ├── custom.md │ │ │ │ ├── getting-started.md │ │ │ │ ├── health-monitor.md │ │ │ │ ├── http/ │ │ │ │ │ ├── cors.md │ │ │ │ │ └── methods.md │ │ │ │ ├── injection.md │ │ │ │ ├── logger.md │ │ │ │ ├── openapi/ │ │ │ │ │ ├── advanced.md │ │ │ │ │ ├── autodoc.md │ │ │ │ │ ├── basics.md │ │ │ │ │ ├── decorators.md │ │ │ │ │ ├── security.md │ │ │ │ │ └── ui.md │ │ │ │ ├── openapi.md │ │ │ │ ├── templating/ │ │ │ │ │ ├── html5tagger.md │ │ │ │ │ └── jinja.md │ │ │ │ └── validation.md │ │ │ └── sanic-testing/ │ │ │ ├── README.md │ │ │ ├── clients.md │ │ │ └── getting-started.md │ │ └── release-notes/ │ │ ├── 2021/ │ │ │ ├── v21.12.md │ │ │ ├── v21.3.md │ │ │ ├── v21.6.md │ │ │ └── v21.9.md │ │ ├── 2022/ │ │ │ ├── v22.12.md │ │ │ ├── v22.3.md │ │ │ ├── v22.6.md │ │ │ └── v22.9.md │ │ ├── 2023/ │ │ │ ├── v23.12.md │ │ │ ├── v23.3.md │ │ │ ├── v23.6.md │ │ │ └── v23.9.md │ │ ├── 2024/ │ │ │ ├── v24.12.md │ │ │ └── v24.6.md │ │ ├── 2025/ │ │ │ ├── v25.12.md │ │ │ └── v25.3.md │ │ └── changelog.md │ ├── public/ │ │ ├── assets/ │ │ │ ├── .gitkeep │ │ │ ├── code.css │ │ │ ├── docs.js │ │ │ └── style.css │ │ ├── index.html │ │ └── web/ │ │ ├── browserconfig.xml │ │ ├── robots.txt │ │ └── site.webmanifest │ ├── requirements.txt │ ├── server.py │ ├── style/ │ │ ├── bulma/ │ │ │ ├── LICENSE │ │ │ ├── bulma.sass │ │ │ └── sass/ │ │ │ ├── base/ │ │ │ │ ├── _all.sass │ │ │ │ ├── animations.sass │ │ │ │ ├── generic.sass │ │ │ │ ├── helpers.sass │ │ │ │ └── minireset.sass │ │ │ ├── components/ │ │ │ │ ├── _all.sass │ │ │ │ ├── breadcrumb.sass │ │ │ │ ├── card.sass │ │ │ │ ├── dropdown.sass │ │ │ │ ├── level.sass │ │ │ │ ├── media.sass │ │ │ │ ├── menu.sass │ │ │ │ ├── message.sass │ │ │ │ ├── modal.sass │ │ │ │ ├── navbar.sass │ │ │ │ ├── pagination.sass │ │ │ │ ├── panel.sass │ │ │ │ └── tabs.sass │ │ │ ├── elements/ │ │ │ │ ├── _all.sass │ │ │ │ ├── box.sass │ │ │ │ ├── button.sass │ │ │ │ ├── container.sass │ │ │ │ ├── content.sass │ │ │ │ ├── form.sass │ │ │ │ ├── icon.sass │ │ │ │ ├── image.sass │ │ │ │ ├── notification.sass │ │ │ │ ├── other.sass │ │ │ │ ├── progress.sass │ │ │ │ ├── table.sass │ │ │ │ ├── tag.sass │ │ │ │ └── title.sass │ │ │ ├── form/ │ │ │ │ ├── _all.sass │ │ │ │ ├── checkbox-radio.sass │ │ │ │ ├── file.sass │ │ │ │ ├── input-textarea.sass │ │ │ │ ├── select.sass │ │ │ │ ├── shared.sass │ │ │ │ └── tools.sass │ │ │ ├── grid/ │ │ │ │ ├── _all.sass │ │ │ │ ├── columns.sass │ │ │ │ └── tiles.sass │ │ │ ├── helpers/ │ │ │ │ ├── _all.sass │ │ │ │ ├── color.sass │ │ │ │ ├── flexbox.sass │ │ │ │ ├── float.sass │ │ │ │ ├── other.sass │ │ │ │ ├── overflow.sass │ │ │ │ ├── position.sass │ │ │ │ ├── spacing.sass │ │ │ │ ├── typography.sass │ │ │ │ └── visibility.sass │ │ │ ├── layout/ │ │ │ │ ├── _all.sass │ │ │ │ ├── footer.sass │ │ │ │ ├── hero.sass │ │ │ │ └── section.sass │ │ │ └── utilities/ │ │ │ ├── _all.sass │ │ │ ├── animations.sass │ │ │ ├── controls.sass │ │ │ ├── derived-variables.sass │ │ │ ├── extends.sass │ │ │ ├── functions.sass │ │ │ ├── initial-variables.sass │ │ │ └── mixins.sass │ │ ├── bulma-prefers-dark/ │ │ │ ├── LICENSE │ │ │ ├── bulma-prefers-dark.sass │ │ │ └── sass/ │ │ │ ├── base/ │ │ │ │ ├── _all.sass │ │ │ │ ├── generic.sass │ │ │ │ └── helpers.sass │ │ │ ├── components/ │ │ │ │ ├── _all.sass │ │ │ │ ├── breadcrumb.sass │ │ │ │ ├── card.sass │ │ │ │ ├── dropdown.sass │ │ │ │ ├── list.sass │ │ │ │ ├── media.sass │ │ │ │ ├── menu.sass │ │ │ │ ├── message.sass │ │ │ │ ├── modal.sass │ │ │ │ ├── navbar.sass │ │ │ │ ├── pagination.sass │ │ │ │ ├── panel.sass │ │ │ │ └── tabs.sass │ │ │ ├── elements/ │ │ │ │ ├── _all.sass │ │ │ │ ├── box.sass │ │ │ │ ├── button.sass │ │ │ │ ├── content.sass │ │ │ │ ├── form.sass │ │ │ │ ├── notification.sass │ │ │ │ ├── other.sass │ │ │ │ ├── progress.sass │ │ │ │ ├── table.sass │ │ │ │ ├── tag.sass │ │ │ │ └── title.sass │ │ │ ├── layout/ │ │ │ │ ├── _all.sass │ │ │ │ ├── footer.sass │ │ │ │ └── hero.sass │ │ │ └── utilities/ │ │ │ ├── _all.sass │ │ │ ├── derived-variables.sass │ │ │ ├── initial-variables.sass │ │ │ └── mixins.sass │ │ ├── colors.scss │ │ ├── elements.scss │ │ ├── general.scss │ │ ├── home.scss │ │ ├── index.scss │ │ ├── menu.scss │ │ ├── overrides.scss │ │ └── theme.scss │ └── webapp/ │ ├── __init__.py │ ├── display/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── code_style.py │ │ ├── layouts/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── elements/ │ │ │ │ ├── __init__.py │ │ │ │ ├── footer.py │ │ │ │ ├── navbar.py │ │ │ │ └── sidebar.py │ │ │ ├── home.py │ │ │ ├── main.py │ │ │ └── models.py │ │ ├── markdown.py │ │ ├── page/ │ │ │ ├── __init__.py │ │ │ ├── docobject.py │ │ │ ├── page.py │ │ │ └── renderer.py │ │ ├── plugins/ │ │ │ ├── __init__.py │ │ │ ├── attrs.py │ │ │ ├── columns.py │ │ │ ├── hook.py │ │ │ ├── inline_directive.py │ │ │ ├── mermaid.py │ │ │ ├── notification.py │ │ │ ├── span.py │ │ │ └── tabs.py │ │ ├── search/ │ │ │ ├── __init__.py │ │ │ ├── renderer.py │ │ │ └── search.py │ │ └── text.py │ ├── endpoint/ │ │ ├── __init__.py │ │ ├── search.py │ │ ├── sitemap.py │ │ └── view.py │ └── worker/ │ ├── __init__.py │ ├── config.py │ ├── factory.py │ ├── livereload.js │ ├── reload.py │ └── style.py ├── pyproject.toml ├── readthedocs.yml ├── sanic/ │ ├── __init__.py │ ├── __main__.py │ ├── __version__.py │ ├── app.py │ ├── application/ │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── ext.py │ │ ├── logo.py │ │ ├── motd.py │ │ ├── spinner.py │ │ └── state.py │ ├── asgi.py │ ├── base/ │ │ ├── __init__.py │ │ ├── meta.py │ │ └── root.py │ ├── blueprint_group.py │ ├── blueprints.py │ ├── cli/ │ │ ├── __init__.py │ │ ├── app.py │ │ ├── arguments.py │ │ ├── base.py │ │ ├── console.py │ │ ├── daemon.py │ │ ├── executor.py │ │ ├── inspector.py │ │ └── inspector_client.py │ ├── compat.py │ ├── config.py │ ├── constants.py │ ├── cookies/ │ │ ├── __init__.py │ │ ├── request.py │ │ └── response.py │ ├── errorpages.py │ ├── exceptions.py │ ├── handlers/ │ │ ├── __init__.py │ │ ├── content_range.py │ │ ├── directory.py │ │ └── error.py │ ├── headers.py │ ├── helpers.py │ ├── http/ │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── http1.py │ │ ├── http3.py │ │ ├── stream.py │ │ └── tls/ │ │ ├── __init__.py │ │ ├── context.py │ │ └── creators.py │ ├── log.py │ ├── logging/ │ │ ├── __init__.py │ │ ├── color.py │ │ ├── default.py │ │ ├── deprecation.py │ │ ├── filter.py │ │ ├── formatter.py │ │ ├── loggers.py │ │ └── setup.py │ ├── middleware.py │ ├── mixins/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── commands.py │ │ ├── exceptions.py │ │ ├── listeners.py │ │ ├── middleware.py │ │ ├── routes.py │ │ ├── signals.py │ │ ├── startup.py │ │ └── static.py │ ├── models/ │ │ ├── __init__.py │ │ ├── asgi.py │ │ ├── ctx_types.py │ │ ├── futures.py │ │ ├── handler_types.py │ │ ├── http_types.py │ │ ├── protocol_types.py │ │ └── server_types.py │ ├── pages/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── css.py │ │ ├── directory_page.py │ │ ├── error.py │ │ └── styles/ │ │ ├── BasePage.css │ │ ├── DirectoryPage.css │ │ └── ErrorPage.css │ ├── py.typed │ ├── request/ │ │ ├── __init__.py │ │ ├── form.py │ │ ├── parameters.py │ │ └── types.py │ ├── response/ │ │ ├── __init__.py │ │ ├── convenience.py │ │ └── types.py │ ├── router.py │ ├── server/ │ │ ├── __init__.py │ │ ├── async_server.py │ │ ├── events.py │ │ ├── goodbye.py │ │ ├── loop.py │ │ ├── protocols/ │ │ │ ├── __init__.py │ │ │ ├── base_protocol.py │ │ │ ├── http_protocol.py │ │ │ └── websocket_protocol.py │ │ ├── runners.py │ │ ├── socket.py │ │ └── websockets/ │ │ ├── __init__.py │ │ ├── connection.py │ │ ├── frame.py │ │ └── impl.py │ ├── signals.py │ ├── simple.py │ ├── startup/ │ │ ├── __init__.py │ │ └── errors.py │ ├── touchup/ │ │ ├── __init__.py │ │ ├── meta.py │ │ ├── schemes/ │ │ │ ├── __init__.py │ │ │ ├── altsvc.py │ │ │ ├── base.py │ │ │ └── ode.py │ │ └── service.py │ ├── types/ │ │ ├── __init__.py │ │ ├── hashable_dict.py │ │ └── shared_ctx.py │ ├── utils.py │ ├── views.py │ └── worker/ │ ├── __init__.py │ ├── constants.py │ ├── daemon.py │ ├── inspector.py │ ├── loader.py │ ├── manager.py │ ├── multiplexer.py │ ├── process.py │ ├── reloader.py │ ├── restarter.py │ ├── serve.py │ └── state.py ├── scripts/ │ ├── changelog.py │ ├── pyproject.toml │ └── release.py ├── setup.py ├── tests/ │ ├── __init__.py │ ├── asyncmock.py │ ├── benchmark/ │ │ └── test_route_resolution_benchmark.py │ ├── certs/ │ │ ├── createcerts.py │ │ ├── invalid.certmissing/ │ │ │ └── privkey.pem │ │ ├── localhost/ │ │ │ ├── fullchain.pem │ │ │ └── privkey.pem │ │ ├── password/ │ │ │ ├── fullchain.pem │ │ │ └── privkey.pem │ │ └── sanic.example/ │ │ ├── fullchain.pem │ │ └── privkey.pem │ ├── client.py │ ├── conftest.py │ ├── fake/ │ │ └── server.py │ ├── http3/ │ │ ├── __init__.py │ │ ├── test_http_receiver.py │ │ ├── test_server.py │ │ └── test_session_ticket_store.py │ ├── performance/ │ │ └── sanic/ │ │ ├── http_response.py │ │ ├── simple_server.py │ │ └── varied_server.py │ ├── skip_test_custom_protocol.py │ ├── static/ │ │ ├── app_test_config.py │ │ ├── bp/ │ │ │ ├── decode me.txt │ │ │ └── test.file │ │ ├── decode me.txt │ │ ├── nested/ │ │ │ └── dir/ │ │ │ └── foo.txt │ │ ├── test.file │ │ └── test.html │ ├── test_app.py │ ├── test_asgi.py │ ├── test_bad_request.py │ ├── test_base.py │ ├── test_blueprint_copy.py │ ├── test_blueprint_group.py │ ├── test_blueprints.py │ ├── test_cancellederror.py │ ├── test_cli.py │ ├── test_coffee.py │ ├── test_config.py │ ├── test_constants.py │ ├── test_cookies.py │ ├── test_create_task.py │ ├── test_custom_request.py │ ├── test_daemon.py │ ├── test_deprecation.py │ ├── test_dynamic_routes.py │ ├── test_errorpages.py │ ├── test_exceptions.py │ ├── test_exceptions_handler.py │ ├── test_ext_integration.py │ ├── test_graceful_shutdown.py │ ├── test_handler.py │ ├── test_handler_annotations.py │ ├── test_headers.py │ ├── test_helpers.py │ ├── test_http.py │ ├── test_http_alt_svc.py │ ├── test_init.py │ ├── test_json_decoding.py │ ├── test_json_encoding.py │ ├── test_keep_alive_timeout.py │ ├── test_late_adds.py │ ├── test_logging.py │ ├── test_logo.py │ ├── test_middleware.py │ ├── test_middleware_priority.py │ ├── test_motd.py │ ├── test_multi_serve.py │ ├── test_multiprocessing.py │ ├── test_named_routes.py │ ├── test_naming.py │ ├── test_payload_too_large.py │ ├── test_pipelining.py │ ├── test_prepare.py │ ├── test_redirect.py │ ├── test_reloader.py │ ├── test_request.py │ ├── test_request_cancel.py │ ├── test_request_data.py │ ├── test_request_stream.py │ ├── test_requests.py │ ├── test_response.py │ ├── test_response_file.py │ ├── test_response_json.py │ ├── test_response_timeout.py │ ├── test_routes.py │ ├── test_server_events.py │ ├── test_server_loop.py │ ├── test_signal_handlers.py │ ├── test_signals.py │ ├── test_startup_errors.py │ ├── test_static.py │ ├── test_static_directory.py │ ├── test_tasks.py │ ├── test_test_client_port.py │ ├── test_timeout_logic.py │ ├── test_tls.py │ ├── test_touchup.py │ ├── test_unix_socket.py │ ├── test_url_building.py │ ├── test_url_for.py │ ├── test_url_for_static.py │ ├── test_utf8.py │ ├── test_utils.py │ ├── test_versioning.py │ ├── test_vhosts.py │ ├── test_views.py │ ├── test_websockets.py │ ├── test_ws_handlers.py │ ├── typing/ │ │ ├── samples/ │ │ │ ├── app_custom_config.py │ │ │ ├── app_custom_ctx.py │ │ │ ├── app_default.py │ │ │ ├── app_fully_custom.py │ │ │ ├── request_custom_ctx.py │ │ │ ├── request_custom_sanic.py │ │ │ └── request_fully_custom.py │ │ └── test_typing.py │ └── worker/ │ ├── conftest.py │ ├── test_inspector.py │ ├── test_loader.py │ ├── test_manager.py │ ├── test_multiplexer.py │ ├── test_reloader.py │ ├── test_restarter.py │ ├── test_runner.py │ ├── test_shared_ctx.py │ ├── test_socket.py │ ├── test_startup.py │ ├── test_state.py │ └── test_worker_serve.py └── tox.ini